mySQL Restrict Cascade No Action设置

时间:2012-04-05 16:08:54

标签: mysql cascade restrict

在用户发表评论的论坛表格上使用的最佳约束是什么?

假设某些用户将在稍后阶段删除。如果我删除已注释的用户,表中的用户条目会发生什么?

希望有人能解释。

1 个答案:

答案 0 :(得分:1)

这个问题分为两部分:

  1. 如何最好地实现这个?您可以“软删除”用户行。这有以下优点:

    • 不会丢失用户信息
    • 允许用户取消删除
    • 维护参照完整性而不会丢失与用户关联的数据

    可以通过向users表添加另一列并使用dateDeleted列来实现软删除 - 如果它是Null,则不会删除用户。我相信SO使用这种机制来删除帖子。

  2. restrict cascade no action做了什么? MySQL docs

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

    •   
    • NO ACTION:标准SQL中的关键字。在MySQL中,相当于   限制。 InnoDB拒绝父进程的删除或更新操作   表,如果引用的表中有相关​​的外键值。   有些数据库系统有延迟检查,NO ACTION是   延期检查。在MySQL中,检查外键约束   立即,所以NO ACTION与RESTRICT相同。

    •   

    换句话说,如果你使用它,你将无法删除行,如果这样做会破坏参照完整性。