1. 程式人生 > 其它 >批量刪除資料命令區別:drop、truncate、delete

批量刪除資料命令區別:drop、truncate、delete

批量刪除資料有三種常見的方法:                          #####面試題

(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所有資料後,自增列計數的這個行為,往往不是使用者想要的,所以是一個潛在坑。