mysql外鍵

外鍵是爲了保證數據的完整性,但也會帶來許多副作用,使用不當會使數據處理變得複雜,在數據量大的時候會明顯影響性能。所以,工具是工具,具體如何使用,根據自己情況取捨。

注意:目前在mysql數據庫中,只有innodb存儲引擎支持外鍵。

外鍵定義:兩個有關聯關係的表,其中一個表中的某個字段a指向另一個表中的主鍵b,我們稱a是外鍵。在它們兩個的關係中,b所在表我們稱之爲主表,而a所在字段我們稱之爲從表。

如果沒有定義兩個表之間的關聯操作,那麼a只是邏輯上的外鍵,定義其之間的關聯操作後,a纔是我們今天要討論的真正外鍵。

語法:foreign key (字段名) references 主表名 (字段名) on [update | delete] [ cascade | set null | restrict ]

(1)可定義的級聯操作:

on delete 定義當主表刪除時記錄時從表的操作

on update 定義當主表更新記錄時執行的操作

(2)可設置的動作:

cascade : 串聯操作,就是子表跟主表動作一樣,刪除或更新

set null : 當主表更改時,子表的外鍵字段設置爲null

restrict : 限制主表做更改

舉例:

第一步:創建兩張表 班級 和 學生,並且以class_id爲外鍵對班級表關聯。

create table class (
id int primary key auto_increment,
class_name varchar(20) not null
);
create table student (
id int primary key auto_increment,
name varchar(20) not null,
class_id int ,
foreign key (class_id) references class (id)
on delete cascade
on update set null
);
第二步:分別向兩張表添加數據

insert into class values
(null,'A'),
(null,'B');

insert into student values
(null,'xiaohong',1),
(null,'xiaoming',2),
(null,'xiaogang',1);
此時我們首先看一下表中的數據,以便跟我們稍後的測驗作數據對比。

第三步:刪除和修改,並查看結果
剛纔我們設置的是 on delete cascade,讓我們來驗證一下結果。

當我們刪掉 class 表中的 id=1 的數據後,student 表中,class_id 爲1的數據默認都幫我們刪掉了。

再來一個更新的試試:

剛纔我們設置的 on update set null

從數據中我們可以看到,當我們把class表中id=2的記錄值的id改爲3的時候,student表中class_id爲2的記錄class_id變爲了null。

同理,restrict 動作也能得到我們預期的結果,這裏就不再演示。

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