Php 仅在所有行不存在时删除关系行
我正在使用外键尝试检查当用户删除表格Php 仅在所有行不存在时删除关系行,php,mysql,foreign-keys,Php,Mysql,Foreign Keys,我正在使用外键尝试检查当用户删除表格图库图库id0时,是否不存在任何行图库id=0,然后删除表格文章库 我知道它可以使用php检查,如果没有行存在,然后删除,但不知道有没有其他方法可以 做得更聪明吗? 我尝试了外键,但它应该不起作用,它会删除表文章库中的行如果删除表库中的任何库id=0,即使它还有另一行库id=0 CONSTRAINT `article_gallery_ibfk_2` FOREIGN KEY (`gallery_id`) REFERENCES `gallery` (`galler
图库图库id
0
时,是否不存在任何行图库id=0
,然后删除表格文章库
我知道它可以使用php检查,如果没有行存在,然后删除,但不知道有没有其他方法可以
做得更聪明吗?
我尝试了外键,但它应该不起作用,它会删除表文章库中的行如果删除表库中的任何库id=0
,即使它还有另一行库id=0
CONSTRAINT `article_gallery_ibfk_2` FOREIGN KEY (`gallery_id`) REFERENCES `gallery` (`gallery_id`) ON DELETE CASCADE
表格:文章库
id | article_id | gallery_id
---------------------------------------------------------
0 0 0
1 1 0
2 2 1
表格:图库
id | gallery_id
---------------------------------------------------------------------
0 0
1 0
2 0
3 1
使用触发器:
DELIMITER //
CREATE TRIGGER delete_gallery AFTER DELETE ON gallery
FOR EACH ROW BEGIN
DELETE FROM article_gallery AS a
WHERE a.gallery_id = OLD.gallery_id
AND NOT EXISTS (SELECT *
FROM gallery AS g
WHERE g.gallery_id = OLD.gallery_id);
END
//
DELIMITER ;
谢谢回复!如果比较这一点或在php中执行这一点,建议您使用哪一种方法如果在php中执行,则必须在从表中删除行的每个脚本中执行。如果你在一个触发器中做,你只需要在一个地方做它。我觉得谷歌应该把性能放在PHP中更好吗?你经常删除行吗?如果不是,那么性能可能并不重要。谢谢您的帮助!!