MySQL 建立Foreign Key ( InnoDB ) 時要注意的一件事
今天在測試資料庫刪除資料時,發現了一件事
在有被其他資料表 Reference 成 Foreign Key 的情況下刪除資料時資料庫會發出:
Cannot delete or update a parent row: a foreign key constraint fails
後來才發現在建立資料庫時,如果不會自己的 Foreign Key 設定動作的話,資料庫預設是不會做連動的更改( 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;
—————————————
可以下的參數有:
[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 相同。
詳細的錯誤訊息可以在 MySQL 指令模式下輸入:
SHOW engine innodb status;
由於會列出很多資料,所以要找一下,在訊息中有一组【LATEST FOREIGN KEY ERROR】會有最近錯誤的詳細描述和解决辦法。
REF:http://jax-work-archive.blogspot.com/2007/10/innodb-mysql-foreign-key.html