MySQL 数据库添加数据时为什么会产生外码(外键)约束?原理就是什么?如何解决?
生活随笔
收集整理的這篇文章主要介紹了
MySQL 数据库添加数据时为什么会产生外码(外键)约束?原理就是什么?如何解决?
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 前言
- 一、插入新數(shù)據(jù)時報錯外鍵約束?
- 二、對于出錯 SQL 語句的分析
- 三、對于外碼約束的分析
- 四、如何處理外鍵約束?
- 總結(jié)
前言
我們在使用 MySQL 數(shù)據(jù)庫時,添加數(shù)據(jù)如果設(shè)計不合理很容易出現(xiàn)外碼約束的情況,為什么會產(chǎn)生這樣的問題?那我們該如何處理這一問題呢?依據(jù)又是什么?本篇文章帶你進(jìn)一步來深度剖析,并帶著你的思路來設(shè)計解決方案。本次案例的案例情景是傳統(tǒng)的數(shù)據(jù)庫表:學(xué)生-課程數(shù)據(jù)庫。
一、插入新數(shù)據(jù)時報錯外鍵約束?
我們在 Course 表中插入課程號為 1 的數(shù)據(jù)時提示違反了外鍵約束。插入語句如下:
insert into course(cno,cname,cpno,ccredit) values('1','數(shù)據(jù)庫','5',4);二、對于出錯 SQL 語句的分析
我們先根據(jù) Course 表的定義,看哪一個是外鍵。查看 Course 表定義的 SQL 語句如下:
create table course ( cno char(4) primary key, cname char(40), cpno char(4), ccredit smallint, foreign key cpno references course(cno));從上面的 SQL 語句可以看出,cpno 是外鍵,而且引用的是本表的主鍵 cno。
三、對于外碼約束的分析
我們根據(jù)數(shù)據(jù)庫定義的參照完整性規(guī)則得知:外鍵 cpno 的取值不為空的情況下(如上 cpno=‘5’),與其對應(yīng)的主鍵 cno 在參照表中必須存在。
但是我們反觀上面操作,第一個插入的就是 cno=‘1’ 的數(shù)據(jù),cno=‘5’ 的還沒有插入,很顯然不滿足參照完整性規(guī)則。
四、如何處理外鍵約束?
解決方法:
總結(jié)
本文我們掌握了 MySQL 數(shù)據(jù)庫如何在設(shè)計不合理時遇到的外碼約束的問題,并通過經(jīng)典案例為大家分析了為何會出現(xiàn)這樣的問題,同時順著思路來設(shè)計業(yè)務(wù)的解決方案。本文提到的數(shù)據(jù)庫參照完整性規(guī)則是數(shù)據(jù)庫設(shè)計的基礎(chǔ)知識,大家切記要重視基礎(chǔ),活學(xué)活用,方能在開發(fā)中百戰(zhàn)不殆!感謝大家的支持,我是白鹿,一個不懈奮斗的程序猿。希望本貼能幫助到大家,歡迎大家的一鍵三連!如果還有什么問題、建議或者補(bǔ)充可以留言在帖子下方,給予更多人幫助!
更多資訊微信搜索公眾號【WDeerCode代碼圈】
總結(jié)
以上是生活随笔為你收集整理的MySQL 数据库添加数据时为什么会产生外码(外键)约束?原理就是什么?如何解决?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2013逍客原厂机油型号是多少?
- 下一篇: 宜春市到安福的汽车经过新坊镇吗?