天天看點

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 (

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的資料預設都幫我們删掉了。

再來一個更新的試試:

上一篇: mysql外鍵
下一篇: 外鍵限制

繼續閱讀