MySQL數據庫操作中,Delete與Truncate兩個命令都可以刪除一個數據表中的全部數據,使用辦法分別是:
DELETE FROM t_question
TRUNCATE TABLE t_question
但兩種命令對數據表操作后,當添加數據時,實際效果還是不同的。Delete命令只是刪除里面的記錄,當插入新記錄時,自增主鍵仍然在已經刪除的記錄基礎上進行自增,即不會回到從1開始的情況;而Truncate命令則是重構了數據表,所以,使用Truncate命令后的數據表,當插入新記錄時,自增主鍵從1開始,和一個新建的表一樣。
實用中,如果是開發一個MySQL應用,開始可能使用的是測試數據,當應用開發成功后,需要將真正的數據導入到數據表中,為了使自增主鍵從1開始,使用Truncate操作數據表是必須的,因此,使用Truncate不可避免。
在MySQL數據庫中,如果一個數據表有外鍵約束(foreign key constraint),那么是無法使用Truncate命令的,總是出現錯誤如下:
[Err] 1701 - Cannot truncate a table referenced in a foreign key constraint(....................)
解決辦法有如下幾種:
第一種辦法:將對該表進行外鍵約束的相關表外鍵約束全部刪除,等將表Truncate成功后,再恢復其它表對該表的外鍵約束,這種辦法比較麻煩,不建議使用;
第二種辦法:將對該表進行外鍵約束的相關表轉存(dump),比如使用工具Navicat中的“Dump SQL File”,如果有數據,連數據帶結構一並轉存,如果無數據,只轉存結構;這一步完成后,將外鍵約束的相關表刪除。將主表Truncate成功后,再把外鍵約束的相關表恢復回來即可。這種辦法不需要手動刪除外鍵,雖然把整個表刪除了,但表的結構及數據都完好地保存在SQL文件中,可以簡單地恢復。