mysql - 自动删除连接数据以及删除记录?

标签 mysql sql foreign-keys foreign-key-relationship junction-table

我有用户、优惠和联结表 users_offers。

是否可以使用外键关系进行设置,以确保在删除任何用户或优惠时自动删除联结数据?

最佳答案

声明一个引用操作: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)
);

关于mysql - 自动删除连接数据以及删除记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16126945/

相关文章:

php - 从 MySQL 到 XML 再到 HTML 的编码问题

mysql - #1271 - 操作 'UNION' 的排序规则混合非法

mysql - 使用两个表的主键的外键关系

mysql - 如何从重复计数大于但保留一个的表中删除

MYSQL 5.7 ERROR 1215 外键 + 全文键

mysql - 使用外键在数据库中重新输入旧数据

PHP 面向对象 : mysql_connect not returning false when wrong information passed

php - 如果在移动应用程序中使用 SSL,我是否必须清理和/或验证发布数据服务器端?

网站登录 MySQL 错误

sql - 在 MonetDB 中创建表时出现语法错误