【问题标题】:Deleting related records in MySQL删除 MySQL 中的相关记录
【发布时间】:2010-11-10 16:55:55
【问题描述】:

我有两个 MySQL (MyISAM) 表:

Posts: PostID(primary key), post_text, post_date, etc. 

Comments: CommentID(primary key), comment_text, comment_date, etc.  

当从“帖子”表中删除相应的帖子记录时,我想删除“评论”表中属于特定帖子的所有 cmets。

我知道这可以通过使用 InnoDB 的级联删除来实现(通过设置外键)。但是我将如何使用 PHP 在 MyISAM 中做到这一点?

【问题讨论】:

    标签: php mysql database myisam


    【解决方案1】:
    DELETE
        Posts,
        Comments
    FROM Posts
    INNER JOIN Comments ON
        Posts.PostID = Comments.PostID
    WHERE Posts.PostID = $post_id;
    

    假设您的 Comments 表有一个字段 PostID,它指定 Comment 所属的 Post。

    【讨论】:

      【解决方案2】:

      即使没有可执行的外键,删除的方法仍然相同。假设您的 Comments 表中有 post_id 之类的列

      DELETE FROM Comments
       WHERE post_id = [Whatever Id];
      
      DELETE FROM Posts
       WHERE PostID = [Whatever Id];
      

      真正失去的是在一个事务中执行这两个查询的能力。

      【讨论】:

        【解决方案3】:

        我从未尝试过,但您可以设置一个触发器来执行级联删除(如果您使用 >=5.0)

        DELIMITER $$
        CREATE TRIGGER Posts_AD AFTER DELETE ON Posts
        FOR EACH ROW
        BEGIN
          DELETE FROM Comments WHERE post_id = OLD.PostID;
        END $$
        DELIMITER ;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-12-02
          • 1970-01-01
          • 1970-01-01
          • 2021-10-04
          • 1970-01-01
          • 2023-03-26
          • 1970-01-01
          相关资源
          最近更新 更多