1、delete
- 屬於DML語言,每次刪除一行,都在事務日志中為所刪除的每行記錄一項。產生rollback,事務提交之后才生效;如果有相應的 trigger,執行的時候將被觸發,如果刪除大數據量的表速度會很慢。
- 刪除表中數據而不刪除表的結構(定義),同時也不釋放空間。
2、truncate
- 默認情況下,truncate通過釋放存儲表數據所用的數據頁來刪除數據,並且只在事務日志中記錄頁的釋放。所以使用的系統和事務日志資源少,truncate會將高水線復位(回到最開始)。在InnoDB中,對於AUTO_INCREMENT的列來說,當在truncate之后,改列的第一個值仍從1開始,但是delete仍然使用順序使用刪除之前的值。
- truncate是DDL語言, 操作立即生效,自動提交,原數據不放到rollback segment中,不能回滾。 操作不觸發trigger。
- 刪除內容、釋放空間但不刪除表的結構(定義)。