設置外鍵時注意的小細節

今天在作業的時候,本以爲在SQL中建表是很容易的一件事,可是在實際的設置外鍵方面還出現了一些小插曲,我們知道設置外鍵的命令格式爲:

alter  table  <表名1>  add  constraint  <約束名>  foreign key (需要設置外鍵的列) references <表名2> (與外鍵關聯的列);

如有兩張表分別爲:

create table actor
(
id integer primary key not null,
name char(36) ,          --需要設置爲唯一鍵 否則無法成功設置外鍵
)
create table casting
(
movieid varchar(70)  not null,
actorid char(36) not null,
ord integer,
primary key(movieid,actorid)            --設置複合主鍵
)

alter table casting add constraint cas_actorid_actor foreign key (actorid) references actor (name)  --設置外鍵的命令(actorid是外鍵,指向actor表中的對應的演員

如果像上面這樣來設置外鍵,將會出錯:

服務器: 消息 1776,級別 16,狀態 1,行 1
在被引用表 'actor' 中沒有與外鍵 'cas_actorid_actor' 的引用列的列表匹配的主鍵或候選鍵。
服務器: 消息 1750,級別 16,狀態 1,行 1
未能創建約束。請參閱前面的錯誤信息。

解決方案這個原因是由於actor表被引用的的字段不是候選鍵或者不是主鍵,說白了就是確保它是唯一的;因此只需要在actor表中的name字段後面添加unique就可以了,即改成name char(36)unique , 就設置好外鍵了。

    最後有一點小提示:在設置外鍵約束的時候,要保證外鍵字段的數據類型和大小(長度)要一樣。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章