1

我有两个 MySQL (MyISAM) 表:

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

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

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

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

4

3 回答 3

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

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

于 2009-07-14T15:37:41.607 回答
1

即使没有可执行的外键,删除的方法还是一样的。post_id假设您的 Comments 表中有类似的列

DELETE FROM Comments
 WHERE post_id = [Whatever Id];

DELETE FROM Posts
 WHERE PostID = [Whatever Id];

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

于 2009-07-14T15:41:15.750 回答
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 ;
于 2009-07-14T15:45:15.010 回答