MySQL數據庫有外鍵約束時使用truncate命令的辦法


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文件中,可以簡單地恢復。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM