2010-05-04 94 views

回答

16

你應該在問之前谷歌它。

截斷

  1. 截斷刪除 從數據庫中的所有引用。
  2. 快速
  3. 事務日誌中沒有條目。
  4. 如果移除一次,則無法恢復。
  5. 頁面參考被清除。
  6. 全或無
  7. 標識列被重新初始化 種子
  8. 截斷是DDL

截斷數據表tblname

沒有contidion可以給

刪除

  1. 條目在事務日誌中創建。
  2. 可恢復
  3. 基於每個記錄刪除
  4. 的參考文獻mainained頁面
  5. 身份從之前的 位置開始
  6. DML
Delete FROM tableName 

沒有任何結構表的兩個影響。所有引用必須在執行任何操作之前被刪除,但它並不適用與Cascade =真正用於刪除

+2

對。截斷是DDL,刪除是DML。 – Konerak 2010-05-04 06:47:38

+0

表結構呢? – 2010-05-04 06:49:02

+0

不要猶豫,即時通訊新的SQL服務器,甚至學習者。 – 2010-05-04 06:49:26

0

時截斷之間的區別和delete刪除列示如下:

+----------------------------------------+----------------------------------------------+ 
|    Truncate    |     Delete     | 
+----------------------------------------+----------------------------------------------+ 
| We can't Rollback after performing  | We can Rollback after delete.    | 
| Truncate.        |            | 
|          |            | 
| Example:        | Example:          | 
| BEGIN TRAN        | BEGIN TRAN         | 
| TRUNCATE TABLE tranTest    | DELETE FROM tranTest       | 
| SELECT * FROM tranTest     | SELECT * FROM tranTest      | 
| ROLLBACK        | ROLLBACK          | 
| SELECT * FROM tranTest     | SELECT * FROM tranTest      | 
+----------------------------------------+----------------------------------------------+ 
| Truncate reset identity of table.  | Truncate reset identity of table.   | 
+----------------------------------------+----------------------------------------------+ 
| It locks the entire table.    | It locks the table row.      | 
+----------------------------------------+----------------------------------------------+ 
| Its DDL(Data Definition Language)  | Its DML(Data Manipulation Language)   | 
| command.        | command.          | 
+----------------------------------------+----------------------------------------------+ 
| We can't use WHERE clause with it.  | We can use WHERE to filter data to delete. | 
+----------------------------------------+----------------------------------------------+ 
| Trigger is not fired while truncate. | Trigger is fired.       | 
+----------------------------------------+----------------------------------------------+ 
| Syntax :        | Syntax :          | 
| 1) TRUNCATE TABLE table_name   | 1) DELETE FROM table_name     | 
|          | 2) DELETE FROM table_name WHERE    | 
|          | example_column_id IN (1,2,3)    | 
+----------------------------------------+----------------------------------------------+ 
0

在處理數據庫時,我們使用Delete和Truncate而不知道它們之間的差異以及何時使用它們。在本文中,我們將討論Sql中的Delete和Truncate之間的區別。

刪除 刪除是一個DML命令。 使用行鎖執行刪除語句,表中的每一行都被鎖定以供刪除。 我們可以在where子句中指定過濾器。 如果條件存在,它將刪除指定的數據。 刪除活動觸發器,因爲操作是單獨記錄的。 比截斷慢,因爲它會保留日誌 截斷 截斷是DDL命令。 截斷表總是鎖定表和頁面,但不是每一行。它刪除所有數據。 不能使用Where條件。 它刪除所有數據。 截斷表無法激活觸發器,因爲該操作不會記錄單個行刪除。 性能更快,因爲它不保留任何日誌。 注意 與事務一起使用時,Delete和Truncate都可以回滾。 如果事務完成,意味着提交,那麼我們不能從日誌文件中回滾截斷命令,但是我們仍然可以從日誌文件中回滾刪除命令,因爲刪除寫入將它們記錄在日誌文件中,以防將來從日誌文件中回滾。

如果您有一個引用您要截斷的表的外鍵約束,即使引用表中沒有數據,這也不起作用。這是因爲外鍵檢查是使用DDL而不是DML完成的。這可以通過暫時禁用表中的外鍵約束來解決。

刪除表是一個記錄操作。所以刪除每行記錄在事務日誌中,這使得它變慢。 截斷表還會刪除表中的所有行,但不會記錄每行的刪除,而是記錄表的數據頁的取消分配,這會使其更快。

〜如果不小心使用Delete/Truncate刪除表中的所有數據。您可以回滾提交的事務。恢復上次備份並運行事務日誌,直到發生Delete/Truncate時。

本文取回滾表截斷命令後,在SQL或

difference-between-delete-truncate-in

另見when-to-use-truncate-and-delete-command

相關問題