mysql檢視外來鍵建立時間 外來鍵的建立 刪除 檢視

2021-10-17 22:41:00 字數 3632 閱讀 7227

一、建立表的時候建立外來鍵

如果表a的主關鍵字是表b中的字段,則該字段稱為表b的外來鍵,表a稱為主表,表b稱為從表。外來鍵是用來實現參照完整性的,不同的外來鍵約束方式將可以使兩張表緊密的結合起來,特別是修改或者刪除的級聯操作將使得日常的維護工作更加輕鬆。這裡以mysql為例,總結一下3種外來鍵約束方式的區別和聯絡。

這裡以使用者表和使用者組表為例,這是乙個典型的多對一關係,多個使用者對應於乙個使用者組。

首先建立使用者組表:

建立使用者組表

create tablet_group (

idint not null,

namevarchar(30),primary key(id)

並插入兩條記錄:

插入記錄

insert into t_group values (1, 'group1');insert into t_group values (2, 'group2');

下面建立使用者表,分別以不同的約束方式建立外來鍵引用關係:

1、級聯(cascade)方式

級聯方式

create tablet_user (

idint not null,

namevarchar(30),

groupidint,primary key(id),foreign key (groupid) references t_group(id) on delete cascade on update cascade);

參照完整性測試

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、置空(set null)方式

置空方式

create tablet_user (

idint not null,

namevarchar(30),

groupidint,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被設定為nullupdate t_group set id=2 where id=1; #導致t_user中的1記錄的groupid被設定為null

3、禁止(no action / restrict)方式

禁止方式

create tablet_user (

idint not null,

namevarchar(30),

groupidint,primary key(id),foreign key (groupid) references t_group(id) on delete no action on updateno 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; #錯誤,從表中有相關引用,因此主表中無法修改

注:在mysql中,restrict方式與no action方式作用相同

二、在表外建立外來鍵

#建立新聞表create tablenews(

nidint(4) not null primary keyauto_increment,

ntidint(4) not null,

ntnamevarchar(4) not null,

ntitlevarchar(4) not null,

nauthorvarchar(4) not null,

ncreatedatedatetime not null,

npicpathvarchar(4),

ncontent longtextnot null,

nmodifydatetimestamp,

nsummarytext not null,foreign key (ntid) referencestopic(tid)

);descnews;

cidint(4) not null primary keyauto_increment,

cnidint(4) not null,

ccontentvarchar(50) not null,

cdatetimestamp,

cipvarchar(2),

cauthorvarchar(2)

#新增外來鍵方式1預設名alter table `comment` add constraint foreign key(cnid) referencesnews(nid);

#新增外來鍵方式2指定名alter table `comment` add constraint fk_news_comment foreign key(cnid) references news(nid);

三、刪除外來鍵

#檢視建立語言

showcreate table`comment`;

#檢視所有的主鍵和外來鍵select * frominformation_schema.key_column_usage

#刪除外來鍵alter table tablename drop foreign key foreignkeyname;

mysql建立外來鍵案例 MySQL外來鍵例項

外來鍵例項 性別表create table gender gid int auto increment primary key not null,gender char 10 insert into gender gender values male female unknown 乙個表只能有乙個主...

mysql建立外來鍵

建立外來鍵的前提 本表的列必須與外來鍵型別相同 外來鍵必須是外表主鍵 外來鍵作用 使兩張表形成關聯,外來鍵只能引用外表中的列的值!指定主鍵關鍵字 foyunmkreign key 列名 引用外來鍵關鍵字 references 外來鍵表名 外來鍵列名 事件觸發限制 on delete和on updat...

mysql建立外來鍵報錯 Mysql表建立外來鍵報錯

資料庫表a create table task desc tab id int 11 primary key not null comment 自增主鍵 auto increment,taskname varchar 200 not null comment 任務名字 sqlname varchar...