MySQL報錯cannot?add?foreign?key?constraint的問題解決方法
1 問題場景
利用Navicat對MySQL兩張表想要進行外鍵關聯時設置正確,但出現出現如下錯誤
2 原因分析
創(chuàng)建外鍵錯誤的原因大概有一下幾個原因:
1、關聯的兩個字段的字段的類型不一致
2、設置外鍵刪除時set null
3、兩張表的引擎不一致
2.1 數據類型不一致
主表:
需要關聯的表:
2.2 字段設置不一樣
主表:
需要關聯的表:
2.3 引擎設置為“InnoDB”
數據庫引擎應該一致,如圖:
3 總結
3.1 外鍵條件
在我們使用外鍵的時候,應該遵循如下條件:
- 外鍵要存在,首先必須保證表的引擎是 InnoDB(默認的存儲引擎),如果不是 InnoDB存儲引擎,那么外鍵可以創(chuàng)建成功,但沒有約束作用;
- 外鍵字段的字段類型(列類型),必須與父表的主鍵類型完全一致;
- 每張表中的外鍵名稱不能重復;
- 增加外鍵的字段,如果數據已經存在,那么要保證數據與父表中的主鍵對應。
- 如果外鍵約束模式選擇SET NULL ,那么字段必須允許為NULL,否則出現Cannot add foreign key constraint。
3.2 外鍵約束
所謂外鍵約束,就是指外鍵的作用。之前所講的外鍵的作用都是默認的作用,實際上,可以通過對外鍵的需求,進行定制操作。外鍵約束有三種模式,分別為:
- district:嚴格模式(默認),父表不能刪除或更新一個已經被子表數據引用的記錄;
- cascade:級聯模式,父表的操作,對應子表關聯的數據也跟著被刪除;
- set null:置空模式,父表的操作之后,子表對應的數據(外鍵字段)被置空。
到此這篇關于MySQL報錯cannot add foreign key constraint的問題解決方法的文章就介紹到這了,更多相關mysql cannot add foreign key constraint內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
mysql執(zhí)行sql文件報錯Error: Unknown storage engine‘InnoDB’的解決方法
最近在執(zhí)行一個innoDB類型sql文件的時候,發(fā)現系統(tǒng)報錯了,通過查找相關的資料終于解決了,所以下面這篇文章主要給大家介紹了關于mysql執(zhí)行sql文件時報錯Error: Unknown storage engine 'InnoDB'的解決方法,需要的朋友可以參考借鑒,下面來一起看看吧。2017-07-07windows環(huán)境下Mysql中文亂碼問題解決方法
在搭建Mysql環(huán)境的時候遇到了中文亂碼問題,下面與大家分享下具體的解決方法,感興趣的朋友可以參考下哈,希望對大家有所幫助2013-06-06DataGrip連接Mysql并創(chuàng)建數據庫的方法實現
本文主要介紹了DataGrip連接Mysql并創(chuàng)建數據庫的方法實現,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02