2012-04-05 50 views
0

在用户留言的论坛表上使用的最佳约束条件是什么?mySQL限制级联无动作设置

假设稍后会删除一些用户。如果我删除了评论的用户,那么表中的用户条目会发生什么变化?

希望有人能解释。

回答

1

有两个部分对这个问题:

  1. 如何最好地实现这一点?您可以“软删除”用户行。这样做的优点是:

    • 没有丢失用户信息
    • 使用户能未删除
    • 保持参照完整性,而不会丢失连接到用户

    软删除可以实现数据通过在用户表中添加另一列,使用dateDeleted列 - 如果它为空,则不删除该用户。我相信SO使用这种机制来删除帖子。

  2. restrict cascade no action是做什么用的?该MySQL docs

  • RESTRICT:拒绝对父表的删除或更新操作。 指定RESTRICT(或NO ACTION)与删除ON或DELETE子句的ON 相同。

  • 无动作:来自标准SQL的关键字。在MySQL中,相当于 RESTRICT。如果引用表中存在相关外键值,InnoDB将拒绝父表 表的删除或更新操作。 某些数据库系统具有延期检查,NO ACTION是延期检查。在MySQL中,外键约束立即被检查 ,所以NO ACTION与RESTRICT相同。

换句话说,如果你使用这个,你就不能删除行,如果这样做会破坏参照完整性。

+0

非常感谢。那么哪个约束最适合用于ON UPDATE和ON DELETE的第一个选项? – JamesBondInBlack 2012-04-05 18:53:09

+0

@olad如果您使用'InnoDB'作为您的存储引擎,则外键将自动执行。所以'ON UPDATE'和'ON DELETE'的默认值是好的,因为你不会(或者至少不应该)改变行的主键。 – 2012-04-05 19:21:37