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工作的例子。