mysql外來鍵和外來鍵約束

2021-10-04 13:04:45 字數 2202 閱讀 3449

1.mysql中「鍵」和「索引」的定義相同,所以外來鍵和主鍵一樣也是索引的一種。不同的是mysql會自動為所有表的主鍵進行索引,但是外來鍵字段必須由使用者進行明確的索引。用於外來鍵關係的字段必須在所有的參照表中進行明確地索引

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

1.外來鍵四種操作

(1) cascade:從父表刪除或更新會自動刪除或更新子表中匹配的行

(2) set null:從父表刪除或更新行,會設定子表中的外來鍵列為null,但必須保證子表列沒有指定not null

(3) restrict:拒絕對父表的刪除或更新操作(如果子表中有匹配的記錄,則不允許對父表對應候選鍵進行update/delete操作,從mysql4.0.8開始支援)

(4) no action:跟restrict一樣,先檢查外來鍵

2.使用時的情況

(1)父表更新時子表也更新,父表刪除時如果子表有匹配的項,刪除失敗;

(2)父表更新時子表也更新,父表刪除時子表匹配的項也刪除

(1)新增主鍵

alter table 表名 add primary key (段名)

自增約束的關鍵字:auto_increment

alter table 表名 modify 主鍵名 int auto_increment;

(2)新增外來鍵約束

alter table 表名 add constraint 外鍵名 foreign key(段名) references 被引用表名 (被引用段名)

(3)刪除主鍵

alter table 表名 drop primary key

(3)刪除外來鍵約束

alter table 表名 drop foreign key 外鍵名

在命令後新增 on delete 操作名 update 操作名

例:on delete restrict on update restrict

(1)級聯關係(cascade)

先看一下我們用於操作的表

兩個表乙個test1,乙個test2,我們讓test1 父表,級聯即是當我們刪除id=1的時候test2中的zid=1的資料也會被刪除

首先新增外來鍵,然後看一下表中資料,然後開始刪除test1中的 id=1(記得設定級聯關係)

我們能看到當我們刪除id=1是,test2中zid=1也被刪除了,當我們刪除test2中zid=2時候,僅僅刪除了test2中的資料,test1中沒變

(2)置空(set null)

這次讓num當 外來鍵,當我們刪除id=1時候,test1中資料被刪除,但是test2中數值為null

注意: 不可以設定not null,否則數值不會變成null的

(3) 限制 (restrict)

當我使用刪除操作時候不可以刪除,因為test2中有zid=1,但是test2中沒有zid=2,試一下刪除id=2

ok了,因為test2中沒有zid=2,所以沒有限制,可以刪除id=2

(4) no action:跟restrict一樣,先檢查外來鍵

沒什麼說的,簡單看一下圖吧,和restrict一樣

mysql 外來鍵和外來鍵約束

1.外來鍵 如果公共關鍵字在乙個關係中是主關鍵字,那麼這個公共關鍵字被稱為另乙個關係的外來鍵。就是a表的主鍵,被用到了b表中,此時它就成了外來鍵 2.外來鍵約束 如果想要插入或者更新外來鍵的值,資料庫會和引用表中字段的資料進行驗證,如果插入或更改的值不在被引用的表中,則插入失敗 外來鍵的作用就是保證...

mysql約束與外來鍵 MySQL 外來鍵與約束

外來鍵的建立 建表如下 create table parent id int not null,primary key id type innodb create table child id int,parent id int,foreign key parent id references pa...

MySQL 外來鍵約束

建立測試主表.id 是主鍵.create table test main id int,value varchar 10 primary key id 建立測試子表.create table test sub id int,main id int,value varchar 10 primary k...