Cam*_*ata 17 mysql foreign-keys
我有两个表,一个'用户'和一个'订单',其中订单表具有对用户ID表的外键引用.(在这种情况下,我使用的是电子邮件地址作为用户ID.)
我想要完成的是:
如果更新了用户表ID(=更改了电子邮件地址),则这将反映在引用的订单表user_id字段中.(使用ON UPDATE CASCADE指令可以正常工作 - 这里没问题!)
如果从用户表中删除用户,则订单将保留,保留引用的user_id.
我遇到了第二个目标的问题:
如果我在引用的用户ID字段上使用ON DELETE CASCADE,则当然会删除订单行.
如果我使用ON DELETE NO ACTION,当我尝试删除用户时出现错误.(#1451 - 无法删除或更新父行:外键约束失败)
如果我使用ON DELETE SET NULL,我可以删除用户行,但引用的信息设置为null,所以我无法追踪谁下了订单...
有没有办法允许从用户表中删除用户,同时在订单表中保留引用的user_id信息?
Mar*_*ers 21
两种选择:
deleted字段将其标记为已删除即可.要么:
我会推荐第一个选项.采用第二种选择可能导致数据不一致.此外,只要拥有密钥的值而没有其他表中的相应数据,无论如何都无济于事.
| 归档时间: |
|
| 查看次数: |
13259 次 |
| 最近记录: |