MySQL:用外键自动更新另一个表中的列,触发器还是什么?

时间:2017-02-11 14:43:37

标签: mysql foreign-keys database-trigger

我想在MySQL很多表之间做一些自动更新,但我想知道如何做得很好。这是一个例子:

Table `articles` : ID, TEXT, DATE, DELETED

Table `comments` : ID, TEXT, DATE, DELETED

Table `users` : ID, NAME, AGE, DELETED

Table `link` : ID, ARTICLE_ID, COMMENT_ID, USER_ID, DELETED

正如您所猜测的,link表包含其他人的ID。 我已经像这样设计了我的数据库,以保持表格尽可能低的列。

我知道这里有很多问题,但我不知道什么是最好的解决方案。所以这就是我想要做的事情:

删除评论后(更新comments设置DELETED = 1,其中ID = ...),我想更新列link。DELETED(=> 1)。

当用户被删除时(更新users设置DELETED = 1,其中ID = ...),我想更新列link。DELETED(=> 1)和{{1 TEXT(=> NULL)。

我知道我可以在articles。ARTICLE_ID和link。ID之间使用外键,例如,只需删除行。但我对我的网站使用的用户提出了有限的权利。我将使用更强大的用户来批量删除标记为DELETED的行以清理数据库。

是否有可能用FK做,或者我应该使用触发器(我真的不知道如何使用它们)或其他什么?

我试图将FK放在DELETED列之间,但是当我更新注释行时,所有链接都会更新:/

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我已经用2种解决方案做了我想要的事情:

  • 使用触发器:伪删除(更新DELETED = 1 ...)会在我的link表中导致伪删除。
  • 使用外键:true delete(从...中删除)会导致link表中的真正删除。

因此,我可以使用基本用户从我的网站伪删除行。 我可以使用具有删除权限的用户清理我的基础。