如果删除了BOTH外键,则删除表项

时间:2014-03-08 12:51:53

标签: mysql sql foreign-keys onupdate

我有一个带有2个外键的表,它引用另一个表中的同一个字段。我知道如果至少有两个外键中的一个被删除,如何定义外键约束来删除我的表项。但是,如果至少有一个外键仍然存在,我想保留表项?

CREATE TABLE PrivateMessages
  ...
  INDEX(FromEmail, ToEmail),
  FOREIGN KEY(FromEmail, ToEmail) 
    REFERENCES Users(Email, Email) 
    ON UPDATE CASCADE 
    ON DELETE CASCADE,
  ...

该表存储两个用户之间的消息。如果两个用户不再存在,我想删除邮件。也许,有没有更好的方法来实现这个目标?

1 个答案:

答案 0 :(得分:1)

  

...如果至少有一个外键仍然存在,我想保留表项

     

如果两个用户不再存在,我想删除邮件。

仅通过定义约束无法实现。

可能的程序:

  1. 定义marked_for_delete bit not null default 0列功能。
  2. 每当您想要删除用户时,请将其标记为删除 更新电话。
  3. 定义之前的之后的 删除触发器 桌子。
  4. 在触发器正文中,检查fromEmailtoEmail的组合 标记为删除,然后执行delete语句 父表和子组合将根据您的要求删除 条件匹配。