SQL創(chuàng)建表外鍵約束的語句是什么

sql外鍵約束可通過FOREIGN KEY關鍵字來指定,創(chuàng)建語句為“ALTER table 表名 ADD CONSTRAINT 外鍵名 FOREIGN KEY(列名) REFERENCES 主表名 (列名);”。

SQL創(chuàng)建表外鍵約束的語句是什么

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

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

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

創(chuàng)建表外鍵約束

可以在ALTER TABLE語句中,通過?FOREIGN KEY?關鍵字來指定外鍵;添加外鍵約束的前提是:從表中外鍵列中的數(shù)據(jù)必須與主表中主鍵列中的數(shù)據(jù)一致或者是沒有數(shù)據(jù)。

具體的語法格式如下:

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

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

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

  • 必須為主表定義主鍵。

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

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

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

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

示例:

修改數(shù)據(jù)表 tb_emp2,將字段 deptId 設置為外鍵,與數(shù)據(jù)表 tb_dept1 的主鍵 id 進行關聯(lián),SQL 語句和運行結(jié)果如下所示。

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ù)表添加外鍵約束時,要確保添加外鍵約束的列的值全部來源于主鍵列,并且外鍵列不能為空。

(推薦教程:mysql視頻教程

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