批量刪除資料命令區別:drop、truncate、delete
阿新 • • 發佈:2022-05-07
批量刪除資料有三種常見的方法: #####面試題
(1) drop table:當不需要該表時,可以使用該方法。
(2) truncate table:刪除所有資料,同時保留表,速度很快。
可以理解為,drop table然後再create table。
(3) delete from table:可以刪除所有資料,也能保留表,但效能較差。也可以帶where條件刪除部分資料,靈活性強。
#1
- truncate是DDL語句,它不存在所謂的“事務回滾”;
- delete是DML語句,它執行完是可以rollback的。
#2
- truncate table返回值是0;
- delete from table返回值是被刪除的行數。
#3 InnoDB支援一個表一個檔案,此時:
- truncate會一次性把表幹掉,且不會啟用觸發器,速度非常快;
- delete from table則會一行一行刪除,會啟用觸發器,速度比較慢。
delete資料,是要記錄日誌的,truncate表不需要記錄日誌。
#4.當表中有列被其它表作為外來鍵(foreign key)時:
- truncate會是失敗;
- delete則會成功。
這類資料刪除失敗很容易定位問題,因為報錯提示簡單易懂。
#5. 當表中有自增列時:
- truncate會使得自增列計數復原;
- delete所有資料後,自增列計數並不會從頭開始。
所以,delete所有資料後,自增列計數的這個行為,往往不是使用者想要的,所以是一個潛在坑。