異常處理:1215 - Cannot add foreign key constraint


  最近在做新生入學系統,學生表中包括新生的班級,專業等信息,班級,專業就需要和班級表,專業表進行關聯,但是在添加外鍵的過程中卻出現了“Cannot add foreign key constraint” 的問題,也就是不能添加外鍵約束,為什么就不能添加外鍵呢?


出現這個問題主要有三個原因:

(1)外鍵對應的字段數據類型不一致

(2)設置外鍵時“刪除時”設置為“SET NULL”

(3)兩張表的存儲引擎不一致

     經過檢查,前兩種情況排除,但是兩張表的存儲引擎都不清楚,於是又百度了一些關於存儲引擎的東西:

查詢表的引擎:

a、show table status from db_name where name='table_name';

b、show create table table_name;

查詢結果如圖:

班級表的引擎:

學生表的引擎:



    果然是兩張表的引擎不一致,那就修改成一樣的唄

修改表的引擎:

alter table table_name engine=innodb;

    首先將basicclassentities表的ndbcluster引擎修改為InnoDB,但是又出現了新的錯誤:"1217 - Cannot delete or update a parent row: a foreign key constraint fails",於是嘗試將freshstudententities表的引擎修改為ndbcluster,同樣的問題。

    "1217 - Cannot delete or update a parent row: a foreign key constraint fails",這可能是MySQL在引擎中設置了foreign key關聯,造成無法更新或刪除數據。可以通過設置FOREIGN_KEY_CHECKS變量來避免這種情況:

SET FOREIGN_KEY_CHECKS = 0; 刪除完成后設置 :SET FOREIGN_KEY_CHECKS = 1; 

     還是不能修改表的引擎,於是又繼續探索mysql的各種引擎(http://www.cnblogs.com/ggjucheng/archive/2012/11/11/2765469.html),經過分析,由於ndbcluster和集群,分布式有關,自己的電腦上沒有足夠的權限,所以修改不了,只要將兩張表的引擎都修改為InnoDB,就可以添加外鍵了。


免責聲明!

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



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