1. 程式人生 > >mysql 外來鍵foreign key相關知識及新增刪除外來鍵 sql語句

mysql 外來鍵foreign key相關知識及新增刪除外來鍵 sql語句

外來鍵保證資料的完整性和一致性,被參照的表是主表,外來鍵所在欄位的表是子表,依賴於資料庫中已存在的表的主鍵。外來鍵的作用是建立子表與父表的關聯關係,是約束父表和子表,

1.父表和子表儲存引擎一樣且只能為InnoDB,禁止使用臨時表,

2.外來鍵列和參照列必須具有相似的資料型別,其中數字的長度或是否有符號位必須相同,而字元的長度則可以不同;

3.外來鍵列和參照列必須建立索引,如果外來鍵列不存在索引,mysql將自動建立索引。

如果子表中有和父表相關聯的記錄,對父表操作應該有些限制,

1)預設是restrict:拒絕對父表的刪除或更新操作。

2)No ACTION:標準sql的關鍵字,在mysql中與RESTRICT相同。如果想修改父表,應該先刪除子表中關聯父表的記錄。

3)CASCADE其父表刪除或更新且自動刪除或更新子表中匹配的行。

CONSTRAINT `employee_ibfk_1` FOREIGN KEY (`depId`) REFERENCES `department` (`id`) ON DELETE CASCADE

                         FOREIGN KEY(depId) REFERENCES department(id) ON DELETE CASCADE ON UPDATE CASCADE

                FOREIGN KEY (`depId`) REFERENCES `department` (`id`) ON DELETE CASCADE ON UPDATE CASCADE

4)SET NULL:從父表刪除或更新行,並設定子表中的外來鍵列為NULL。如果使用該選項,必須保證子表列沒有指定NOT NULL.

FOREIGN KEY(depId) REFERENCES department(id) ON DELETE SET NULL ON UPDATE SET NULL

建立表時候指定:

create table if not exists employee(
id smallint unsigned auto_increment key,
username varchar(20) not null unique,
depId TINYINT UNSIGNED,
CONSTRAINT EMP_FK_DEP FOREIGN KEY(depId) REFERENCES department (id)
)ENGINE=INNODB;

刪除外來鍵

alter table employee drop FOREIGN KEY  EMP_FK_DEP

新增外來鍵  如果父表和子表中資料不完整一致性,可能會新增不成功,先保證一致後再操作會成功。

alter table employee add EMP_FK_DEP FOREIGN KEY(depId) REFERENCES department(id)

邏輯外來鍵: