我有一个带有 2 个外键的表,它们引用另一个表中的相同字段。我知道如何定义外键约束,以便在删除两个外键中至少一个的情况下删除我的表条目。但是,如果至少一个外键仍然存在,我想保留表条目?
CREATE TABLE PrivateMessages
...
INDEX(FromEmail, ToEmail),
FOREIGN KEY(FromEmail, ToEmail)
REFERENCES Users(Email, Email)
ON UPDATE CASCADE
ON DELETE CASCADE,
...
该表存储两个用户之间的消息。仅当两个用户不再存在时,我才想删除消息。也许有更好的方法来实现这一点吗?
最佳答案
... I want to keep the table entry if at least one of the foreign keys still exist
I want to delete messages if both users don't exist any longer, only.
仅仅通过定义约束是无法实现的。
可能的程序:
- 定义一个
marked_for_delete bit not null default 0
列功能。 - 每当您想要删除用户时,请通过 更新通话。
- 定义删除触发器的之前或之后类型 table 。
- 在触发器正文中,检查
fromEmail
和toEmail
的组合是否 被标记为删除,然后在其上执行delete
语句 父表和子组合将根据您的需要删除 条件匹配。
关于mysql - 如果删除了两个外键,则删除表条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22269556/