Navicat添加外鍵詳細(xì)操作步驟
前言
用Navicat為mysql數(shù)據(jù)庫(kù)的兩個(gè)表之間建立外鍵關(guān)系,出現(xiàn)“cannot add foreign key constraint”錯(cuò)誤,操作了很久不知道怎么回事,發(fā)現(xiàn)竟然是。。。。
正文
想要建立class表與student表之間的外鍵連接,class為父表,student為子表


打開(kāi)student的設(shè)計(jì)表。


如果c_id不允許為空則當(dāng),選擇刪除時(shí)-->>SET NULL就會(huì)出現(xiàn)Cannot add foreign key constraint的提示,這是因?yàn)閯h除置空有條件,必須滿足字段允許為空(如果不滿足,外鍵無(wú)法創(chuàng)建)當(dāng)然,如果不允許為空,可以選擇刪除時(shí)-->>CASCADE也可以建立外鍵。

當(dāng)勾選允許為空之后

再去保存就可以了。
還有必須注意,Engin必須為InnoDB。

總結(jié)一下:
外鍵條件
在我們使用外鍵的時(shí)候,應(yīng)該遵循如下條件:
- 外鍵要存在,首先必須保證表的引擎是 InnoDB(默認(rèn)的存儲(chǔ)引擎),如果不是 InnoDB 存儲(chǔ)引擎,那么外鍵可以創(chuàng)建成功,但沒(méi)有約束作用;
- 外鍵字段的字段類(lèi)型(列類(lèi)型),必須與父表的主鍵類(lèi)型完全一致;
- 每張表中的外鍵名稱不能重復(fù);
- 增加外鍵的字段,如果數(shù)據(jù)已經(jīng)存在,那么要保證數(shù)據(jù)與父表中的主鍵對(duì)應(yīng)。
- 如果外鍵約束模式選擇SET NULL ,那么字段必須允許為NULL,否則出現(xiàn)Cannot add foreign key constraint。
外鍵約束
所謂外鍵約束,就是指外鍵的作用。之前所講的外鍵的作用都是默認(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ù)(外鍵字段)被置空。
設(shè)計(jì)外鍵的界面,有七列:
- 名(name):可以不填,保存時(shí)會(huì)自動(dòng)生成。
- 欄位(FieldName):要設(shè)置的外鍵,如:student 里的c_id
- 參考數(shù)據(jù)庫(kù)(Reference DataBase):外鍵關(guān)聯(lián)的數(shù)據(jù)庫(kù)
- 被參考表(Reference Table):關(guān)聯(lián)的表,這里是class表
- 參考欄位(Forgin filed Names):關(guān)聯(lián)的字段,class里的id
- 刪除時(shí)(ondelete):刪除時(shí)候的動(dòng)作,當(dāng)時(shí)我選擇的是SETNULL
- 更新時(shí)(onupdate):更新時(shí)候的動(dòng)作,我選擇的是CASCADE
以上字段也可以按照自己的需求填寫(xiě),設(shè)置完成后保存即可。
某個(gè)表已經(jīng)有記錄了,添加外鍵失敗,這時(shí)候只需要將兩個(gè)要關(guān)聯(lián)的表中的數(shù)據(jù)清空再?gòu)男绿砑油怄I關(guān)系即可。
到此這篇關(guān)于Navicat添加外鍵詳細(xì)操作步驟的文章就介紹到這了,更多相關(guān)Navicat添加外鍵內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SQLSERVER 高級(jí)復(fù) 制 排錯(cuò) 技巧
SQLSERVER 高級(jí)復(fù) 制 排錯(cuò) 技巧...2007-08-08
sql優(yōu)化實(shí)戰(zhàn) 把full join改為left join +union all(從5分鐘降為10秒)
因?yàn)樘厥庠?,無(wú)法訪問(wèn)客戶的服務(wù)器,沒(méi)辦法查看sql的執(zhí)行計(jì)劃、沒(méi)辦法知道表中的索引情況,所以,嘗試從語(yǔ)句的改寫(xiě)上來(lái)優(yōu)化2020-09-09
GaussDB數(shù)據(jù)庫(kù)使用COPY命令導(dǎo)入導(dǎo)出數(shù)據(jù)的場(chǎng)景分析
使用COPY命令可以方便地導(dǎo)入數(shù)據(jù)到GaussDB,GaussDB還提供了其他數(shù)據(jù)導(dǎo)入工具和功能,如使用GDS導(dǎo)入數(shù)據(jù)、使用INSERT多行插入、使用gsql元命令導(dǎo)入數(shù)據(jù)、ETL工具集成等,以滿足不同場(chǎng)景下的數(shù)據(jù)導(dǎo)入需求,對(duì)GaussDB COPY命令相關(guān)知識(shí)感興趣的朋友一起看看吧2024-01-01
數(shù)據(jù)庫(kù)之SQL注入原理以及過(guò)程的簡(jiǎn)單介紹
這篇文章主要介紹了數(shù)據(jù)庫(kù)之SQL注入原理以及過(guò)程的簡(jiǎn)單介紹,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
存儲(chǔ)過(guò)程返回?cái)?shù)組對(duì)象示例代碼
存儲(chǔ)過(guò)程返回?cái)?shù)組對(duì)象其實(shí)就相當(dāng)于返回List里面放的對(duì)象數(shù)據(jù),下面與大家分享是例子,感興趣的朋友可以學(xué)習(xí)下2013-07-07
掌握SQL Server數(shù)據(jù)庫(kù)快照的工作原理
2008-01-01

