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)
邏輯外來鍵: