在MySQL中有兩種方法能夠刪除數據,一種是DELETE語句,另外一種是TRUNCATE TABLE語句。DELETE語句能夠經過WHERE對要刪除的記錄進行選擇。而使用TRUNCATE TABLE將刪除表中的全部記錄。所以,DELETE語句更靈活。 排序
若是要清空表中的全部記錄,可使用下面的兩種方法: table
DELETE FROM table1
TRUNCATE TABLE table1 方法
其中第二條記錄中的TABLE是可選的。 數據
若是要刪除表中的部分記錄,只能使用DELETE語句。 tab
DELETE FROM table1 WHERE ...; co
若是DELETE不加WHERE子句,那麼它和TRUNCATE TABLE是同樣的,但它們有一點不一樣,那就是DELETE能夠返回被刪除的記錄數,而TRUNCATE TABLE返回的是0。 ab
若是一個表中有自增字段,使用TRUNCATE TABLE和沒有WHERE子句的DELETE刪除全部記錄後,這個自增字段將起始值恢復成1.若是你不想這樣作的話,能夠在DELETE語句中加上永真的WHERE,如WHERE 1或WHERE true。
DELETE FROM table1 WHERE 1;
上面的語句在執行時將掃描每一條記錄。但它並不比較,由於這個WHERE條件永遠爲true。這樣作雖然能夠保持自增的最大值,但因爲它是掃描了全部的記錄,所以,它的執行成本要比沒有WHERE子句的DELETE大得多。
DELETE和TRUNCATE TABLE的最大區別是DELETE能夠經過WHERE語句選擇要刪除的記錄。但執行得速度不快。並且還能夠返回被刪除的記錄數。而TRUNCATE TABLE沒法刪除指定的記錄,並且不能返回被刪除的記錄。但它執行得很是快。
和標準的SQL語句不一樣,DELETE支持ORDER BY和LIMIT子句,經過這兩個子句,咱們能夠更好地控制要刪除的記錄。如當咱們只想刪除WHERE子句過濾出來的記錄的一部分,可使用LIMIB,若是要刪除後幾條記錄,能夠經過ORDER BY和LIMIT配合使用。假設咱們要刪除users表中name等於"Mike"的前6條記錄。可使用以下的DELETE語句:
DELETE FROM users WHERE name = 'Mike' LIMIT 6;
通常MySQL並不肯定刪除的這6條記錄是哪6條,爲了更保險,咱們可使用ORDER BY對記錄進行排序。
DELETE FROM users WHERE name = 'Mike' ORDER BY id DESC LIMIT 6;