我可以不在MySQL中强制引用完整性

时间:2015-02-27 20:03:40

标签: mysql foreign-keys referential-integrity

我有一个名为“user”的SQL表和一个对用户有外键约束的表“login”。我希望能够删除用户表中的一行,即使有引用它的登录行。现在数据库阻止我这样做。

有谁知道我如何改变表格(通过SQL或最好通过PHPmyAdmin来允许我这样做?

这些表是通过Django自动创建的。

编辑:澄清:我不想级联删除。也就是说,我希望Login表中的行保持不变,即使他们引用的用户已经消失了。

2 个答案:

答案 0 :(得分:0)

如果您想要这种行为,则必须使用ON DELETE CASCADE子句创建外键。使用ON DELETE CASCADE外键,将删除引用该用户的所有行。

请参阅:http://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html

编辑:如果要将user_id保留在登录表中,则只需删除外键即可。无论如何,如果你问这是因为你应该进行逻辑删除而不是物理删除:Physical vs. logical / soft delete of database record?

答案 1 :(得分:0)

正确的做法是将违规用户标记为“非活动”,这样他们就无法登录,而您仍然保持数据库的参照完整性。

从主表中删除与从表中某些数据具有参照完整性链接的数据是不好的做法。