在MySQL
中刪除數據有兩種方式:mysql
truncate
(截短)屬於粗暴型的清空delete
屬於精細化的刪除若是你須要清空表裏的全部數據,下面兩種都可:sql
delete from tablename; truncate table tablename;
而若是你只是刪除一部分數據,就只能使用delete
:apache
delete from tablename where case1 and case2;
在精細化的刪除部分數據時,只能使用delete
。
而清空全部表數據時,二者都可,此時這兩種方式有必定的區別:服務器
truncate
返回值爲0
,而delete
會返回被刪除的記錄數.net
mysql> truncate serviceHost; Query OK, 0 rows affected (0.04 sec) mysql> delete from serviceHost where creator='test'; Query OK, 4 rows affected (0.01 sec)
若是表中有自增字段,truncate
會重置爲1
,而delete
會保持自增的最大值。日誌
truncate
不掃描表,至關於從新建立了表,只保留了表的結構,而後刪除掉原有表,效率很是高。delete
會掃描全表,根據where
語句作判斷,所以效率低。code
truncate
不寫服務器日誌,沒法恢復。delete
會寫服務器日誌。blog
truncate
不激活觸發器,delete
會激活觸發器。get