記得 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 相同。

arrow
arrow

    ChouAndy 發表在 痞客邦 留言(0) 人氣()