mysql - 如果删除了两个外键,则删除表条目

标签 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,
  ...

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

最佳答案

... 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.

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

可能的程序:

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

关于mysql - 如果删除了两个外键,则删除表条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22269556/

相关文章:

python - 通过Python CSV到SQL : passing multiple arguments

sql - SQL 2005中检查外键是否存在的方法

php - MySQL回调到网络应用程序

MySQL INSERT INTO 使用 WHERE 子句

PHP mySQL 结果到变量

mysql - 从用户和关注用户中选择帖子的 SQL 查询不包括自己的帖子

phpmyadmin 触发器

python - 使用 LAST_INSERT_ID() 将最后创建的 auto_increment 值插入到表中

mysql - 插入数据时如何确保外键作为主键存在于另一个表中?

php - 找到 0 条记录