MySQL報(bào)錯(cuò)cannot?add?foreign?key?constraint的問(wèn)題解決方法
1 問(wèn)題場(chǎng)景
利用Navicat對(duì)MySQL兩張表想要進(jìn)行外鍵關(guān)聯(lián)時(shí)設(shè)置正確,但出現(xiàn)出現(xiàn)如下錯(cuò)誤
2 原因分析
創(chuàng)建外鍵錯(cuò)誤的原因大概有一下幾個(gè)原因:
1、關(guān)聯(lián)的兩個(gè)字段的字段的類(lèi)型不一致
2、設(shè)置外鍵刪除時(shí)set null
3、兩張表的引擎不一致
2.1 數(shù)據(jù)類(lèi)型不一致
主表:
需要關(guān)聯(lián)的表:
2.2 字段設(shè)置不一樣
主表:
需要關(guān)聯(lián)的表:
2.3 引擎設(shè)置為“InnoDB”
數(shù)據(jù)庫(kù)引擎應(yīng)該一致,如圖:
3 總結(jié)
3.1 外鍵條件
在我們使用外鍵的時(shí)候,應(yīng)該遵循如下條件:
- 外鍵要存在,首先必須保證表的引擎是 InnoDB(默認(rèn)的存儲(chǔ)引擎),如果不是 InnoDB存儲(chǔ)引擎,那么外鍵可以創(chuàng)建成功,但沒(méi)有約束作用;
- 外鍵字段的字段類(lèi)型(列類(lèi)型),必須與父表的主鍵類(lèi)型完全一致;
- 每張表中的外鍵名稱(chēng)不能重復(fù);
- 增加外鍵的字段,如果數(shù)據(jù)已經(jīng)存在,那么要保證數(shù)據(jù)與父表中的主鍵對(duì)應(yīng)。
- 如果外鍵約束模式選擇SET NULL ,那么字段必須允許為NULL,否則出現(xiàn)Cannot add foreign key constraint。
3.2 外鍵約束
所謂外鍵約束,就是指外鍵的作用。之前所講的外鍵的作用都是默認(rèn)的作用,實(shí)際上,可以通過(guò)對(duì)外鍵的需求,進(jìn)行定制操作。外鍵約束有三種模式,分別為:
- district:嚴(yán)格模式(默認(rèn)),父表不能刪除或更新一個(gè)已經(jīng)被子表數(shù)據(jù)引用的記錄;
- cascade:級(jí)聯(lián)模式,父表的操作,對(duì)應(yīng)子表關(guān)聯(lián)的數(shù)據(jù)也跟著被刪除;
- set null:置空模式,父表的操作之后,子表對(duì)應(yīng)的數(shù)據(jù)(外鍵字段)被置空。
到此這篇關(guān)于MySQL報(bào)錯(cuò)cannot add foreign key constraint的問(wèn)題解決方法的文章就介紹到這了,更多相關(guān)mysql cannot add foreign key constraint內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql執(zhí)行sql文件報(bào)錯(cuò)Error: Unknown storage engine‘InnoDB’的解決方法
最近在執(zhí)行一個(gè)innoDB類(lèi)型sql文件的時(shí)候,發(fā)現(xiàn)系統(tǒng)報(bào)錯(cuò)了,通過(guò)查找相關(guān)的資料終于解決了,所以下面這篇文章主要給大家介紹了關(guān)于mysql執(zhí)行sql文件時(shí)報(bào)錯(cuò)Error: Unknown storage engine 'InnoDB'的解決方法,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-07-07MySQL?中常見(jiàn)的幾種高可用架構(gòu)部署方案解析
MySQL Replication 是官方提供的主從同步方案,用于將一個(gè) MySQL 的實(shí)例同步到另一個(gè)實(shí)例中,這篇文章主要介紹了MySQL?中常見(jiàn)的幾種高可用架構(gòu)部署方案,需要的朋友可以參考下2023-04-04windows環(huán)境下Mysql中文亂碼問(wèn)題解決方法
在搭建Mysql環(huán)境的時(shí)候遇到了中文亂碼問(wèn)題,下面與大家分享下具體的解決方法,感興趣的朋友可以參考下哈,希望對(duì)大家有所幫助2013-06-06mysql把主鍵定義為自動(dòng)增長(zhǎng)標(biāo)識(shí)符類(lèi)型
這篇文章主要介紹了mysql中如何把主鍵定義為自動(dòng)增長(zhǎng)標(biāo)識(shí)符類(lèi)型,下面有個(gè)不錯(cuò)的示例,大家可以參考下2014-07-07MySQL刪除binlog日志文件的三種實(shí)現(xiàn)方式
本文介紹了三種刪除MySQL binlog日志文件的方法,包含手動(dòng)刪除、使用SQL命令刪除和設(shè)置自動(dòng)清理,具有一定的參考價(jià)值,感興趣的可以了解一下2025-02-02淺析MySQL如何實(shí)現(xiàn)事務(wù)隔離
使用過(guò)關(guān)系型數(shù)據(jù)庫(kù)的,應(yīng)該都事務(wù)的概念有所了解,知道事務(wù)有 ACID 四個(gè)基本屬性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability),今天我們主要來(lái)理解一下事務(wù)的隔離性2021-06-06在Qt中操作MySQL數(shù)據(jù)庫(kù)的實(shí)戰(zhàn)指南
QT連接Mysql數(shù)據(jù)庫(kù)的步驟相對(duì)繁瑣,但是也是一個(gè)不錯(cuò)的學(xué)習(xí)經(jīng)歷,下面這篇文章主要給大家介紹了關(guān)于在Qt中操作MySQL數(shù)據(jù)庫(kù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04DataGrip連接Mysql并創(chuàng)建數(shù)據(jù)庫(kù)的方法實(shí)現(xiàn)
本文主要介紹了DataGrip連接Mysql并創(chuàng)建數(shù)據(jù)庫(kù)的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02