主鍵(primary key):一列(或一組列),其值能夠唯一區分表中每個行 。
外來鍵(foreign key) 外來鍵為某個表中的一列,它包含另乙個表的主鍵值,定義了兩個表之間的關係
右邊的departmentid是外來鍵。外來鍵約束是指用於在兩個表之間建立關係,需要指定引用主表的哪一列。
on delete可能取值如上圖為:no action, cascade,set null, restrict屬性。 1. no action / restrict 當取值為no action或者restrict時,則當在父表(主表)(即外來鍵的**表)中刪除對應記錄時,首先檢查該記錄對應的從表是否有對應外來鍵,如果有則不允許刪除。 2. cascade(級聯) 當取值為cascade時,則當在父表(主表)(即外來鍵的**表)中刪除對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則也刪除外來鍵在子表(即包含外來鍵的表)中的記錄。(一起刪除) 3. set null 當取值為set null時,則當在父表(即外來鍵的**表)中刪除對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則設定子表中該外鍵值為null(不過這就要求該外來鍵允許取null)。
on update可能取值如上圖為:no action, cascade,set null, restrict屬性。(更新的是外來鍵的值)
no action / restrict 當取值為no action或者restrict時,則當在父表(即外來鍵的**表)中更新對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則不允許更新。
cascade(級聯) 當取值為cascade時,則當在父表(即外來鍵的**表)中更新對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則也更新外來鍵在子表(即包含外來鍵的表)中的記錄。
set null 當取值為set null時,則當在父表(即外來鍵的**表)中更新對應記錄時,首先檢查該記錄是否有對應外來鍵,如果有則設定子表中該外鍵值為null(不過這就要求該外來鍵允許取null)。
學生表(學號,姓名,性別,班級) // 學號唯一,能確定學生表的一行
課程表(課程編號,課程名,學分) // 課程編號唯一,能確定課程表的一行
成績表(學號,課程號,成績) // 學號和課程號才能唯一確定哪個人哪門課得了多少分,學號和課程號這兩列為主鍵
以上面的成績表為例,學號和課程號是成績表的主鍵,那麼學號是成績表的外來鍵還是學生表的外來鍵?當然是成績表的外來鍵,因為學號是學生表的主鍵呀,怎麼可能是外來鍵?同理成績表課程號也應該是成績表的外來鍵。 其實,外來鍵主要建立與其他表的聯絡,如果我們想知道成績表中某一行成績是誰考的,啥性別,在哪個班級,就可通過成績表的外來鍵學號與學生表建立一種關係。 Mysql刪除外來鍵約束
通常有關聯的兩張表,我們都會進行主外來鍵約束。但是有時候我們可能需要去除主外來鍵約束,下面我會告訴大家怎麼去除主外來鍵約束。note就是外來鍵約束的表 show create table note 執行後會出現類似下面的 這裡的note ibfk 1 note ibfk 2.就是約束的外來鍵名稱。c...
刪除外來鍵約束
主表 create table test1 id int primary key not null,value int insert test1 select 1,2 go 從表 create table test2 id int references test1 id value int go 第...
mysql取消外碼約束 MySQL刪除外來鍵約束問題
當我們在乙個表中新增字段約束的時候 alter table product add constraint product fk foreign key category id references category id 會認為我的外來鍵約束名稱為product fk,然後當我們想刪除時 alter...