从表中删除1条记录,并自动删除与mysql中的user_id关联的所有记录

时间:2011-09-08 19:39:56

标签: mysql sql

我一直在尝试从在线阅读教程和其他东西中学习,但我不能指责它。

目前我有2个表(我在构建应用程序后会有更多的表)所以我想在扩展和编码之前解决这个问题。

我将我的表设置为使用InnoDB,并使用user_id作为外键使每个表彼此相关。

如果我在主用户​​表上发出DELETE查询,我怎样才能从其他表中链接到user_id字段的所有记录也被删除?

我知道这很简单,但我想我只需要自己提问,这样我就能理解答案,而不是阅读答案......嘿

非常感谢你的帮助。

3 个答案:

答案 0 :(得分:5)

由于它们是具有适当FK关系的InnoDB表,因此您只需在外键定义中使用ON DELETE CASCADE即可。例如,在其中一个相关表格中:

FOREIGN KEY (user_id) REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE CASCADE

但是,这需要更改现有架构以修改外键。

有关完整信息,请参阅the MySQL FOREIGN KEY docs

答案 1 :(得分:0)

您可以使用DELETE触发器或使用Michael建议的技术级联DELETE,或者您可以手动编写足够的DELETE语句(从层次结构底部删除实体,这样您就不会违反外键约束)后者显然不是维护方面的理想解决方案。

如果您想微调删除过程,您可能希望使用TRIGGER方法(例如,如果您不想销毁与外键相关的某些数据,或者您想将其移动到别处或关联它)到另一个ID)。

答案 2 :(得分:0)

这是mysql示例

 ALTER TABLE  table_with_foregin_key ADD FOREIGN KEY (  foreign_key_column )
 REFERENCES  table_name (
 user_id
 ) ON DELETE CASCADE ON UPDATE CASCADE;