2007-10-26

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 則留言:

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

    回覆刪除
  2. 學藝不精!請勿見笑!
    能幫到你是我的榮幸!

    回覆刪除
  3. 我是來自香港的!!

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

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

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

    回覆刪除
  5. google 一下就會有你要的資料

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

    回覆刪除

你好!歡迎你在我的 Blog 上留下你寶貴的意見。