0

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

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

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

4

1 回答 1

1

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

如果两个用户不再存在,我只想删除消息。

它不能仅仅通过定义一个约束来实现。

可能的程序:

  1. 定义marked_for_delete bit not null default 0柱特征。
  2. 每当您想删除用户时,通过 更新调用将其标记为删除。
  3. 在表上定义之前之后类型的删除触发器
  4. 在触发器主体中,检查fromEmail和的组合toEmail 是否被标记为删除,然后delete在父表上执行一条语句,子组合将在符合您要求的条件时被删除。
于 2014-03-08T13:42:23.357 回答