我有两个MySQL(MyISAM)表:
Posts: PostID(primary key), post_text, post_date, etc.
Comments: CommentID(primary key), comment_text, comment_date, etc.
当从“帖子”表中删除相应的帖子记录时,我想删除属于特定帖子的“评论”表中的所有评论。
我知道这可以通过使用InnoDB的级联删除(通过设置外键)来实现。但是我如何使用PHP在MyISAM中完成它?
答案 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 ;