drop直接刪掉表速兔,truncate刪除表中數(shù)據(jù)业栅,再插入時(shí)自增長id又從1開始,delete刪除表中數(shù)據(jù)漾抬,可以加where字句。
- delete 語句執(zhí)行刪除的過程是每次從表中刪除一行常遂,并且同時(shí)將該行的刪除操作作為事務(wù)記錄在日志中保存以便進(jìn)行回滾操作纳令。truncate table則一次性地從表中刪除所有的數(shù)據(jù)并不把單獨(dú)的刪除操作記錄記入日志保存,刪除行是不能恢復(fù)的烈钞。并且在刪除的過程中不會(huì)激活與表有關(guān)的刪除觸發(fā)器泊碑,執(zhí)行速度快。
- 表和索引所占空間毯欣。當(dāng)表被truncate后馒过,這個(gè)表和索引所占用的空間會(huì)恢復(fù)到初始大小,而delete操作不會(huì)減少表或索引所占用的空間酗钞。drop語句將表所占用的空間全釋放掉腹忽。
- 一般而言,drop>truncate>delete
- 應(yīng)用范圍砚作。truncate只能對(duì)table窘奏,delete可以是table和view
- truncate和delete只刪除數(shù)據(jù),而drop則刪除整個(gè)表(結(jié)構(gòu)和數(shù)據(jù))
- truncate與不帶where的delete:只刪除數(shù)據(jù)葫录,而不刪除表的結(jié)構(gòu)(定義)drop語句將刪除表的結(jié)構(gòu)被依賴的約束(constrain),觸發(fā)器(trigger)索引(index);依賴于該表的存儲(chǔ)過程/函數(shù)將被保留着裹,但其狀態(tài)會(huì)變?yōu)?invalid.