刪除vs截斷
SQL(結構查詢語言)命令Delete和Truncate都用於刪除數據庫中表中存儲的數據。Delete是一個DML(數據操作語言)語句,它刪除表中的部分或所有行。“Where子句”用於指定需要刪除的行,如果Where子句未與Delete語句一起使用,它將刪除表中的所有數據。Truncate是一個DDL(數據定義語言)語句,它從表中刪除整個數據。這兩個命令都不會破壞表結構和對錶的引用,只會根據需要刪除數據。
刪除語句
Delete語句允許用戶根據指定的條件從數據庫中的現有表中刪除數據,而“Where子句”用於確定此條件。Delete命令被稱為日誌執行,因為它一次只刪除一行,並在事務日誌中為每一行刪除保留一個條目。所以,這會導致操作變慢。Delete是一個DML語句,因此在執行命令時不會自動提交它。因此,如果需要,可以回滾刪除操作以再次訪問數據。在執行Delete命令之後,應該提交或回滾它,以便永久保存更改。Delete語句不會從數據庫中刪除表的表結構。它也不會釋放表使用的內存空間。
Delete命令的典型語法如下所述。
從<;表格名稱中刪除>;
或
從<;table_name>;WHERE<;condition>;中刪除;
截斷語句
Truncate語句刪除數據庫中現有表中的所有數據,但它保留相同的表結構、完整性約束、訪問權限和與其他表的關係。因此,如果用戶希望再次重用表,則不需要重新定義表,並且可以使用舊的表結構。Truncate通過取消分配用於保存數據的數據頁來刪除整個數據,而事務日誌中只保留這些頁釋放。因此,truncate命令只使用較少的系統和事務日誌資源進行操作,因此它比其他相關命令更快。Truncate是一個DDL命令,因此它在語句執行前後使用自動提交。因此,truncate不能以任何方式再次回滾數據。它在執行之後釋放表使用的內存空間。但是Truncate語句不能應用於由外鍵約束引用的表。
下面是Truncate語句的常用語法。
截斷表格<;表格名稱>;
Delete和Truncate有什麼區別?1Delete和Truncate命令從數據庫中現有的表中刪除數據,而不會損害表結構或對錶的其他引用。但是,Delete命令只能用於刪除使用相關條件的表中的特定行,也可以用於不帶任何條件地刪除所有行,而Truncate命令只能用於刪除表中的整個數據。Delete是一個DML命令,它可以根據需要回滾操作,但是Truncate是一個DDL命令,因此它是一個自動提交語句,不能以任何方式回滾。因此,在數據庫管理中謹慎使用該命令是非常重要的。Truncate操作比Delete操作消耗更少的系統資源和事務日誌資源,因此Truncate被認為比Delete更快。另外,Delete不會釋放表所使用的空間,而Truncate則釋放執行後使用的空間,因此從數據庫表中刪除整個數據時,Delete的效率不高。但是,當表被外鍵約束引用時,不允許使用Truncate,在這種情況下,可以使用Delete命令代替Truncate.7。最後,這兩個命令在數據庫管理系統中的應用既有優點也有缺點,用戶應該意識到適當地使用這些命令以獲得良好的效果。 |