MySQL外鍵約束(FOREIGN KEY)

MySQL外鍵約束(FOREIGN KEY)

MySQL 外鍵約束(FOREIGN KEY)是表的一個(gè)特殊字段成翩,經(jīng)常與主鍵約束一起使用。對(duì)于兩個(gè)具有關(guān)聯(lián)關(guān)系的表而言赦役,相關(guān)聯(lián)字段中主鍵所在的表就是主表(父表)麻敌,外鍵所在的表就是從表(子表)。

外鍵用來建立主表與從表的關(guān)聯(lián)關(guān)系掂摔,為兩個(gè)表的數(shù)據(jù)建立連接术羔,約束兩個(gè)表中數(shù)據(jù)的一致性和完整性赢赊。比如,一個(gè)水果攤级历,只有蘋果释移、桃子、李子寥殖、西瓜等 4 種水果玩讳,那么,你來到水果攤要買水果就只能選擇蘋果嚼贡、桃子熏纯、李子和西瓜,其它的水果都是不能購(gòu)買的编曼。

主表刪除某條記錄時(shí)豆巨,從表中與之對(duì)應(yīng)的記錄也必須有相應(yīng)的改變。一個(gè)表可以有一個(gè)或多個(gè)外鍵掐场,外鍵可以為空值往扔,若不為空值,則每一個(gè)外鍵的值必須等于主表中主鍵的某個(gè)值熊户。

定義外鍵時(shí)萍膛,需要遵守下列規(guī)則:

? ? 主表必須已經(jīng)存在于數(shù)據(jù)庫(kù)中,或者是當(dāng)前正在創(chuàng)建的表嚷堡。如果是后一種情況蝗罗,則主表與從表是同一個(gè)表,這樣的表稱為自參照表蝌戒,這種結(jié)構(gòu)稱為自參照完整性串塑。

? ? 必須為主表定義主鍵。

? ? 主鍵不能包含空值北苟,但允許在外鍵中出現(xiàn)空值桩匪。也就是說,只要外鍵的每個(gè)非空值出現(xiàn)在指定的主鍵中友鼻,這個(gè)外鍵的內(nèi)容就是正確的傻昙。

? ? 在主表的表名后面指定列名或列名的組合。這個(gè)列或列的組合必須是主表的主鍵或候選鍵彩扔。

? ? 外鍵中列的數(shù)目必須和主表的主鍵中列的數(shù)目相同妆档。

? ? 外鍵中列的數(shù)據(jù)類型必須和主表主鍵中對(duì)應(yīng)列的數(shù)據(jù)類型相同。

實(shí)例:

--創(chuàng)建用戶表并將UID設(shè)為主鍵

DROP TABLE IF EXISTS tbl_user;

CREATE TABLE tbl_user (

? uId INT NOT NULL AUTO_INCREMENT COMMENT '用戶編號(hào)',

? uName VARCHAR(50) NOT NULL COMMENT '用戶名',

? uPass VARCHAR(10) NOT NULL COMMENT '密碼',

? head VARCHAR(50) NOT NULL COMMENT '頭像',

? regTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '注冊(cè)時(shí)間',

? gender smallint(6) NOT NULL COMMENT '性別',

? PRIMARY KEY (uId) /*設(shè)置用戶編號(hào)為主鍵*/

) ENGINE=InnoDB? DEFAULT CHARSET=utf8;

--創(chuàng)建版塊表虫碉,并將版塊編號(hào)設(shè)為主鍵

DROP TABLE IF EXISTS tbl_board;

CREATE TABLE tbl_board (

? boardid INT NOT NULL AUTO_INCREMENT COMMENT '版塊編號(hào)',

? boardName VARCHAR(50) NOT NULL COMMENT '版塊標(biāo)題',

? parentId INT NOT NULL COMMENT '父版塊編號(hào)',

? PRIMARY KEY (boardid) /*設(shè)置版塊編號(hào)為主鍵*/

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--創(chuàng)建帖子表贾惦,并將帖子編號(hào)設(shè)為主鍵,同時(shí)建立與用戶表和版塊表的關(guān)聯(lián)關(guān)系

DROP TABLE IF EXISTS tbl_topic;

CREATE TABLE tbl_topic (

? topicId INT NOT NULL AUTO_INCREMENT COMMENT '帖子編號(hào)',

? title VARCHAR(50) NOT NULL COMMENT '帖子標(biāo)題',

? content VARCHAR(1000) NOT NULL COMMENT '帖子內(nèi)容',

? publishTime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '發(fā)帖時(shí)間',

? modifyTime TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '修改時(shí)間',

? uId INT NOT NULL COMMENT '用戶編號(hào)',

? boardId INT NOT NULL COMMENT '版塊編號(hào)',

? PRIMARY KEY (topicId), /*設(shè)置主鍵*/

FOREIGN KEY FK_UID (uId) REFERENCES tbl_user(uId),/*設(shè)置外鍵*/

FOREIGN KEY FK_BID (boardId) REFERENCES tbl_board(boardId) /*設(shè)置外鍵*/?

) ENGINE=InnoDB? DEFAULT CHARSET=utf8;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市纤虽,隨后出現(xiàn)的幾起案子乳绕,更是在濱河造成了極大的恐慌绞惦,老刑警劉巖逼纸,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異济蝉,居然都是意外死亡杰刽,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門王滤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贺嫂,“玉大人,你說我怎么就攤上這事雁乡〉谠” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵踱稍,是天一觀的道長(zhǎng)曲饱。 經(jīng)常有香客問我,道長(zhǎng)珠月,這世上最難降的妖魔是什么扩淀? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮啤挎,結(jié)果婚禮上驻谆,老公的妹妹穿的比我還像新娘。我一直安慰自己庆聘,他們只是感情好胜臊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著伙判,像睡著了一般象对。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上澳腹,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天织盼,我揣著相機(jī)與錄音,去河邊找鬼酱塔。 笑死沥邻,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的羊娃。 我是一名探鬼主播唐全,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了邮利?” 一聲冷哼從身側(cè)響起弥雹,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎延届,沒想到半個(gè)月后剪勿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡方庭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年厕吉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片械念。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡头朱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出龄减,到底是詐尸還是另有隱情项钮,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布希停,位于F島的核電站烁巫,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏脖苏。R本人自食惡果不足惜程拭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望棍潘。 院中可真熱鬧恃鞋,春花似錦、人聲如沸亦歉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肴楷。三九已至水由,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赛蔫,已是汗流浹背砂客。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留呵恢,地道東北人鞠值。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓腺怯,卻偏偏與公主長(zhǎng)得像逃魄,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子坦辟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容