Mysql的5中外鍵約束方式

2021-09-10 13:31:52 字數 2304 閱讀 9110

何為外來鍵?

如果表a的主關鍵字是表b中的字段,則該字段稱為表b的外來鍵,表a稱為主表,表b稱為子表(從表)。【注:兩個表必須是innodb表,myisam表暫時不支援外來鍵】

外來鍵關係的兩個表的列必須是資料型別相似,也就是可以相互轉換型別的列,比如int和tinyint可以,而int和char則不可以;

精闢:

當刪除子表時,主表是不會受到影響的;而當刪除主表時,子表可能會受到影響。

因為因為外來鍵關聯是設定在子表的,也就是說子表純粹是一廂情願的事,子表是死是活,跟主表一毛錢關係沒有。

外來鍵的作用:

外來鍵是用來實現參照完整性的,不同的外來鍵約束方式將可以使兩張表緊密的結合起來,特別是修改或者刪除的級聯操作將使得日常的維護工作更加輕鬆。

在父表上update/delete記錄時,同步update/delete掉子表的匹配記錄 

在父表上update/delete記錄時,將子表上匹配記錄的列設為null

注意:子表的外來鍵列不能為not null  

如果子表中有匹配的記錄,則不允許對父表對應候選鍵進行update/delete操作(操作會失敗,即不做任何操作)

效果同no action,兩者在mysql中,都是立即檢查外來鍵約束

父表有變更時,子表將外來鍵列設定成乙個預設的值 但innodb目前不能識別

以下是**示例:

部門表(主表)

create table if not exists department (

id int(11) primary key auto_increment,

name varchar(32) not null

);

使用者表(子表 / 從表)

create table if not exists user (

id int(11) primary key auto_increment,

name varchar(32) not null,

did int(11),

--新增外來鍵約束(將 主表department中的主鍵id 與 本表的字段did 關聯起來, 本表字段did 將作為外來鍵存在)

constraint fk_did foreign key(did) references department(id)

);

【 fk_did:是外來鍵約束名稱;did:是本表的外來鍵字段; department(id):是關聯的主表(主鍵)】

注:mysql中新建的外來鍵約束預設的約束方式是 restrict

從以下的er圖表,可以看出兩張表的聯絡

若在新建表的時候忘記新增外來鍵約束,沒有關係,可以在表已存在的情況下通過修改表來新增外來鍵約束:

create table if not exists user1 (

id int(11) primary key auto_increment,

name varchar(32) not null,

did int(11)

);--通過修改表來 新增外來鍵約束

alter table user1 add constraint fk1_did foreign key(did) references department(id);

【 fk_did:是外來鍵約束名稱;did:是本表的外來鍵字段; department(id):是關聯的主表(主鍵)】

當然,對於已存在外來鍵約束的表,也可通過修改表來刪除外來鍵約束:

alter table user1 drop foreign key fk1_did;

【fk1_did:外來鍵約束名稱】

在新增外來鍵約束的時候,其實也可以指定約束方式:

alter table user1 add constraint fk1_did foreign key(did) references department(id)

on delete cascade on update set null;

MySQL中 外來鍵約束

alter table yourtablename add constraint 外鍵名 foreign key id index col name,references tbl name index col name,on delete on update 說明 on delete on upda...

MySQL中外鍵約束

外來鍵的好處 可以使得兩張表關聯,保證資料的一致性和實現一些級聯操作 如果在父表中找不到候選鍵,則不允許在子表上進行insert update 外來鍵定義服從下列情況 所有tables必須是innodb型,它們不能是臨時表。在引用表中,必須有乙個索引,外來鍵列以同樣的順序被列在其中作為第一列。這樣乙...

MySQL外來鍵約束方式

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