关系数据库中的链修改

时间:2011-06-17 13:51:57

标签: mysql sql relational-database

假设我们在MySQL中以这种方式有3个相关表:

Table 1:         Table 2:          Table 3:
-------------    -------------     -------------
UserID      |    ProfileID   |     ArticleID   |
-------------    -------------     -------------
Username    |    UserID      |     UserID      |
-------------    -------------     -------------
Password    |    UserAvatar  |     Article     |
-------------    -------------     -------------

我需要删除Table1上删除操作后的所有相关记录。换句话说,当用户在表1上执行删除操作时,必须自动删除来自其他相关表的相关记录,而不是写入大量查询来实现此目的,或者我们有没有其主记录的孤立记录。

我该怎么办? 什么是最佳实践?

感谢。

2 个答案:

答案 0 :(得分:1)

你想要的是执行级联删除。这是你要做的:

  • 使用UserID作为链接
  • 在表之间创建foreign keys
  • 外键必须定义为ON DELETE CASCADE

你已经完成了。

<强>更新

不会给你 teh codez 。您需要阅读的只是here。不会给你鱼,我教你如何捕捉自己的鱼。

答案 1 :(得分:1)

Manual?特别是ON UPDATE和ON DELETE。

如果你想把你的表保存在不同的引擎中,那就是innodb(这是唯一一个支持FK约束的引擎),然后在程序中包装DML访问(具有SECURITY DEFINER权限并确保你阻止直接UPDATE / DELETE用户的权限)或关联triggers