mysql 外鍵約束

來源:互聯網
上載者:User

標籤:font   sql   ima   ict   varchar   linux   cascade   innodb   span   

外鍵的作用:外鍵具有保持資料完整性和一致性的機制。

① 外鍵只能指向主表或本表的主鍵列或者unique
② 外鍵的資料類型應該與它指向的列類型一致
③ 外鍵的值:NULL 或者 指向列中存在的值

##############準備##############

建立一個組表作為主表,命名為t_group:

create table t_group(    id int not null,    name varchar(30),    primary key(id));#插入兩條記錄insert into t_group values (1, ‘Group1‘); insert into t_group values (2, ‘Group2‘); 

##############示範##############

三種外鍵約束模式:級聯(cascade)、置空(set null)、禁止(no action / restrict 預設

1.級聯方式(從表中的列也會被刪除或更新)

create table t_user (         id int not null,         name varchar(30),         groupid int,         primary key (id),         foreign key (groupid) references t_group(id) on delete cascade on update cascade   );#(1)從表中的外索引值必須在主表中存在#(2)從表中的外鍵類型一定要和參照鍵(主表中的主鍵)類型一致,若為數#字,則要完全一致;若為字元,字元個數可以不一致。
#參照完整性測試:insert into t_user values (1, ‘qianxin‘, 1); #可以插入  insert into t_user values (2, ‘yiyu‘, 2); #可以插入 insert into t_user values (3, ‘dai‘, 3); #無法插入,外鍵3不存在,與參照完整性條件約束不符#約束方式測試:insert into t_user values (1, ‘qianxin‘, 1);   insert into t_user values (2, ‘yiyu‘, 2);  insert into t_user values (3, ‘dai‘, 2); delete from t_group where id=2; #導致t_user中的2、3記錄串聯刪除 update t_group set id=2 where id=1; #導致t_user中的1記錄的groupid級聯修改為2 

2.置空方式(主表中的記錄被刪除或主鍵被更新,從表則會被設定為null)

create table t_user (         id int not null,         name varchar(30),         groupid int,         primary key (id),         foreign key (groupid) references t_group(id) on delete set null on update set null  ); #參照完整性測試 insert into t_user values (1, ‘qianxin‘, 1); #可以插入   
insert into t_user values (2, ‘yiyu‘, 2); #可以插入 insert into t_user values (3, ‘dai‘, 3); #無法插入,外鍵3不存在,與參照完整性條件約束不符 #約束方式測試 insert into t_user values (1, ‘qianxin‘, 1);   insert into t_user values (2, ‘yiyu‘, 2);   insert into t_user values (3, ‘dai‘, 2); delete from t_group where id=2; #導致t_user中的2、3記錄的groupid被設定為NULL   update t_group set id=2 where id=1; #導致t_user中的1記錄的groupid被設定為NULL 

3.禁止方式(從表有引用時,主表無法刪除或更新)

create table t_user (         id int not null,         name varchar(30),         groupid int,         primary key (id),         foreign key (groupid) references t_group(id) on delete no action on update no action   );   參照完整性測試    insert into t_user values (1, ‘qianxin‘, 1); #可以插入   insert into t_user values (2, ‘yiyu‘, 2); #可以插入    insert into t_user values (3, ‘dai‘, 3); #無法插入,外鍵3不存在,與參照完整性條件約束不符   約束方式測試    insert into t_user values (1, ‘qianxin‘, 1);   insert into t_user values (2, ‘yiyu‘, 2);   insert into t_user values (3, ‘dai‘, 2); delete from t_group where id=2; #錯誤,從表中有相關引用,因此主表中無法刪除   update t_group set id=2 where id=1; #錯誤,從表中有相關引用,因此主表中無法修改 

注意:外鍵約束需要預設引擎為innodb引擎。

linux環境下可以通過修改設定檔/usr/share/mysql/my-default.cnf來修改預設引擎

mysql 外鍵約束

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.