MySQL庫中有倆表,table1和table2,相互關聯,在刪除表的時候出錯:
Cannot delete or update a parent row: a foreign key constraint fails。
很明顯這是表關聯生成的強制約束問題,在刪除的時候回檢查表之間的關聯關係,從而導致無法刪除。
解決辦法:
SET foreign_key_checks = 0; // 先設置外鍵約束檢查關閉
drop table table1; // 刪除表,如果要刪除視圖,也是如此
SET foreign_key_checks = 1; // 開啓外鍵約束檢查,以保持表結構完整性
MySQL的環境變量中存在一個foreign_key_checks,這是默認檢查外鍵的配置項,如果將其設置爲0,則表示不檢查外鍵約束。查看foreign_key_checks的值:
show VARIABLES like "foreign%";
運行結果:
mysql> show variables like "foreign%";
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| foreign_key_checks | OFF |
+--------------------+-------+
1 row in set, 1 warning (0.01 sec)
這是因爲我將foreign_key_checks的值設置爲了0,所以這裏顯示的是OFF,爲關閉狀態。運行SET foreign_key_checks = 1;
將其設置爲1,那這裏的狀態將是ON。
注意:在刪除完表之後,最好是重新打開檢查(SET foreign_key_checks = 1) 以保持表格結構的完整性。
參考鏈接:https://stackoverflow.com/questions/2300396/force-drop-mysql-bypassing-foreign-key-constraint?rq=1