我們可以在創(chuàng)建表時設(shè)置外鍵約束。
在 CREATE table 語句中,通過?FOREIGN KEY?關(guān)鍵字來指定外鍵,具體的語法格式如下:
[CONSTRAint?]?FOREIGN?KEY?字段名?[,字段名2,…] REFERENCES??主鍵列1?[,主鍵列2,…]
舉例:
現(xiàn)在在 test_db 數(shù)據(jù)庫中創(chuàng)建一個部門表 tb_dept1,表結(jié)構(gòu)如下圖所示:
創(chuàng)建 tb_dept1 的 sql 語句和運行結(jié)果如下所示。
mysql>?CREATE?TABLE?tb_dept1 ????->?( ????->?id?INT(11)?PRIMARY?KEY, ????->?name?VARchar(22)?NOT?NULL, ????->?location?VARCHAR(50) ????->?); Query?OK,?0?rows?affected?(0.37?sec)
創(chuàng)建數(shù)據(jù)表 tb_emp6,并在表 tb_emp6 上創(chuàng)建外鍵約束,讓它的鍵 deptId 作為外鍵關(guān)聯(lián)到表 tb_dept1 的主鍵 id,SQL 語句和運行結(jié)果如下所示。
mysql>?CREATE?TABLE?tb_emp6 ????->?( ????->?id?INT(11)?PRIMARY?KEY, ????->?name?VARCHAR(25), ????->?deptId?INT(11), ????->?salary?FLOAT, ????->?CONSTRAINT?fk_emp_dept1 ????->?FOREIGN?KEY(deptId)?REFERENCES?tb_dept1(id) ????->?); Query?OK,?0?rows?affected?(0.37?sec) mysql>?DESC?tb_emp6; +--------+-------------+------+-----+---------+-------+ |?Field??|?Type????????|?Null?|?Key?|?Default?|?Extra?| +--------+-------------+------+-----+---------+-------+ |?id?????|?int(11)?????|?NO???|?PRI?|?NULL????|???????| |?name???|?varchar(25)?|?YES??|?????|?NULL????|???????| |?deptId?|?int(11)?????|?YES??|?MUL?|?NULL????|???????| |?salary?|?float???????|?YES??|?????|?NULL????|???????| +--------+-------------+------+-----+---------+-------+ 4?rows?in?set?(1.33?sec)
以上語句執(zhí)行成功之后,在表 tb_emp6 上添加了名稱為 fk_emp_dept1 的外鍵約束,外鍵名稱為 deptId,其依賴于表 tb_dept1 的主鍵 id。
注意:從表的外鍵關(guān)聯(lián)的必須是主表的主鍵,且主鍵和外鍵的數(shù)據(jù)類型必須一致。例如,兩者都是 INT 類型,或者都是 CHAR 類型。如果不滿足這樣的要求,在創(chuàng)建從表時,就會出現(xiàn)“Error 1005(HY000): Can’t create table”錯誤。
推薦教程:mysql教程
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載。
THE END
喜歡就支持一下吧
相關(guān)推薦