mysql怎么增加外鍵約束

mysql中可用“ALTER TABLE”語句和“FOREIGN KEY”關(guān)鍵字增加外鍵,語法“ALTER TABLE 表名 ADD CONSTRAINT 外鍵名 FOREIGN KEY(列名) REFERENCES 主表名 (列名);”。

mysql怎么增加外鍵約束

本教程操作環(huán)境:windows7系統(tǒng)、mysql8版本、Dell G3電腦。

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

外鍵用來建立主表與從表的關(guān)聯(lián)關(guān)系,為兩個(gè)表的數(shù)據(jù)建立連接,約束兩個(gè)表中數(shù)據(jù)的一致性和完整性。

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

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

  • 必須為主表定義主鍵。

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

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

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

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

mysql給表增加外鍵約束

外鍵約束可以在修改表時(shí)添加,但是添加外鍵約束的前提是:從表中外鍵列中的數(shù)據(jù)必須與主表中主鍵列中的數(shù)據(jù)一致或者是沒有數(shù)據(jù)。

在修改數(shù)據(jù)表時(shí)添加外鍵約束的語法格式如下:

ALTER?TABLE??ADD?CONSTRAINT? FOREIGN?KEY()?REFERENCES??();

示例

修改數(shù)據(jù)表 tb_emp2,將字段 deptId 設(shè)置為外鍵,與數(shù)據(jù)表 tb_dept1 的主鍵 id 進(jìn)行關(guān)聯(lián)

mysql>?ALTER?TABLE?tb_emp2 ????->?ADD?CONSTRAINT?fk_tb_dept1 ????->?FOREIGN?KEY(deptId) ????->?REFERENCES?tb_dept1(id); Query?OK,?0?rows?affected?(1.38?sec) Records:?0??Duplicates:?0??Warnings:?0
mysql>?SHOW?CREATE?TABLE?tb_emp2G ***************************?1.?row?*************************** ???????Table:?tb_emp2 Create?Table:?CREATE?TABLE?`tb_emp2`?( ??`id`?int(11)?NOT?NULL, ??`name`?varchar(30)?DEFAULT?NULL, ??`deptId`?int(11)?DEFAULT?NULL, ??`salary`?float?DEFAULT?NULL, ??PRIMARY?KEY?(`id`), ??KEY?`fk_tb_dept1`?(`deptId`), ??CONSTRAINT?`fk_tb_dept1`?FOREIGN?KEY?(`deptId`)?REFERENCES?`tb_dept1`?(`id`) )?ENGINE=InnoDB?DEFAULT?CHARSET=gb2312 1?row?in?set?(0.12?sec)

注意:在為已經(jīng)創(chuàng)建好的數(shù)據(jù)表添加外鍵約束時(shí),要確保添加外鍵約束的列的值全部來源于主鍵列,并且外鍵列不能為空。

【相關(guān)推薦:mysql視頻教程

以上就是

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊7 分享