删除MySQL中的相关记录

时间:2009-07-14 15:35:22

标签: php mysql database myisam

我有两个MySQL(MyISAM)表:

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

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

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

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

3 个答案:

答案 0 :(得分:3)

DELETE
    Posts,
    Comments
FROM Posts
INNER JOIN Comments ON
    Posts.PostID = Comments.PostID
WHERE Posts.PostID = $post_id;

假设您的评论表有一个字段PostID,用于指定评论所属的帖子。

答案 1 :(得分:1)

即使没有可强制执行的外键,执行删除的方法仍然相同。假设您的评论表中有一个类似post_id的列

DELETE FROM Comments
 WHERE post_id = [Whatever Id];

DELETE FROM Posts
 WHERE PostID = [Whatever Id];

您使用MyISAM 真正失去的是能够在交易中执行这两个查询。

答案 2 :(得分:0)

我从来没有尝试过,但您可以设置触发器来执行级联删除(如果您使用> = 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 ;