0

我有用戶,有優惠,和一個路口表users_offers。自動刪除聯合數據以及刪除記錄?

有沒有我可以用外鍵關係執行的設置,可以確保當我刪除任何用戶或優惠時,聯結數據將被自動刪除?

+0

級聯觸發刪除? – Randy 2013-04-21 01:07:23

回答

1

聲明參照動作:ON DELETE CASCADE,例如:

CREATE TABLE user (
    user_id int PRIMARY KEY 
); 

CREATE TABLE offer (
    offer_id int PRIMARY KEY 
); 

CREATE TABLE user_offer (
    user_id int, 
    offer_id int, 
    PRIMARY KEY (user_id, offer_id), 
    FOREIGN KEY (user_id) REFERENCES user (user_id) ON DELETE CASCADE, 
    FOREIGN KEY (user_id) REFERENCES offer (offer_id) ON DELETE CASCADE 
); 

[SQL Fiddle]

有趣的是,似乎在指定 「速記」 外鍵語法不起作用參照動作(確認在MySQL 5.5.30,5.6.6 m9下)。下面被解析,但是當user被刪除,相應user_offer沒有被刪除:

CREATE TABLE user_offer (
    user_id int REFERENCES user (user_id) ON DELETE CASCADE, 
    offer_id int REFERENCES offer (offer_id) ON DELETE CASCADE, 
    PRIMARY KEY (user_id, offer_id) 
); 
1

您可以將模型的創建中指定的:

CREATE TABLE users_offers (user_id INT NOT NULL, 
          offer_id INT NOT NULL, 
          PRIMARY KEY (user_id, offer_id), 
          FOREIGN KEY (user_id) REFERENCES users(id) 
           ON DELETE CASCADE, 
          FOREIGN KEY (offer_id) REFERENCES offers(id) 
           ON DELETE CASCADE); 

你可以看到this Fiddle工作的例子。