Foriegn Key 外來鍵
這功能真心好用,當你有兩個資料表的 value
是互相對應的,你希望更動時兩者可以一致,
就替它設定 Foriegn Key, 可以下的參數有:
[ON DELETE {CASCADE | SET NULL | NO ACTION | RESTRICT}]
[ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}]
參數解釋:
- CASCADE : 會將有所關聯的紀錄行也會進行刪除或修改。
- SET NULL : 會將有所關聯的紀錄行設定成 NULL。
- NO ACTION : 有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
- RESTRICT : 與 NO ACTION 相同。
不過預設是不做動作。
例如:
CREATE TABLE parent(
id INT NOT NULL,
PRIMARY KEY (id)
) TYPE = INNODB;
CREATE TABLE child(
id INT,
parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY(parent_id) REFERENCES parent(id) ON DELETE CASCADE ON UPDATE CASADE
) TYPE = INNODB;
不過,在有被其他資料表關聯 Foreign Key 的情況下刪除資料時資料庫會發出警告 :
Cannot delete or update a parent row: a foreign key constraint fails