2007-10-26 22:58

InnoDB 實現了 MySQL 的 Foreign Key

記得 MySQL 預設是不支援 Foreign Key 的功能,但其實 MySQL 中有相關的套件了,只是沒有開啟而已,InnoDB 是 MySQL 上第一個提供外鍵約束的表引擎。

如何啟動:請在 my.ini 中將 skip-innodb 這行用 # 號註解掉。

引用範例:

CREATE TABLE parent(
id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE = INNODB;

CREATE TABLE child(
id INT,
parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY(parent_id) REFERENCES parent(id) ON DELETE CASCADE
) ENGINE = INNODB;
-- 參數:
[ON DELETE {CASCADE | SET NULL | NO ACTION | RESTRICT}]
[ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}]


當關聯父資料表的主鍵紀錄行被刪除修改時,InnoDB 對子資料表中紀錄行的處理方式:
CASCADE - 會將有所關聯的紀錄行也會進行刪除或修改。
SET NULL - 會將有所關聯的紀錄行設定成 NULL。
NO ACTION - 有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
RESTRICT - 與 NO ACTION 相同。

詳細的錯誤訊息可以在 MySQL 指令模式下輸入:
SHOW engine innodb status;

由於會列出很多資料,所以要找一下,在訊息中有一组【LATEST FOREIGN KEY ERROR】會有最近錯誤的詳細描述和解决辦法。

6 回應:

匿名 提到...

你好我是元智的學生!
你的foreign key這篇文章真的救了我!!
感謝相助

Jax Hu 提到...

學藝不精!請勿見笑!
能幫到你是我的榮幸!

匿名 提到...

我是來自香港的!!

謝謝你的教學頁, 很有用, 請繼續努力!!

已加入了"我的最愛"中!!

匿名 提到...

請問my.ini在哪呢
正需要用到您提到建立foreign key功能
煩請指教 謝謝

Jax Hu 提到...

google 一下就會有你要的資料

Joy 提到...

你好,這篇文章對我很有用處,希望您不介意我引用。
http://joy0626.pixnet.net/blog