我有3个MySQL表(food、apple和orange)。
我想从以下位置删除行:
apple(idapple, iduser, name)
orange(idornge, iduser, name)当使用一个触发器删除food(iduser, name)中的行时?
到目前为止,这是我的触发器:
CREATE TRIGGER `food_before_delete`
AFTER DELETE ON `food`
FOR EACH ROW
DELETE FROM apple, orange
WHERE
apple.iduser=OLD.iduser and
orange.iduser=OLD.iduser但是它不能编译。如何创建一次从两个表中删除的触发器?
发布于 2012-09-05 02:21:03
使用触发器从两个表中一次删除:
触发器用于强制表中的数据完整性。您可以使用触发器一次从任意数量的表中删除。
在初始化触发器之前,我们需要临时更改mysql分隔符运算符,因为触发器使用分号;运算符在触发器中指定多个sql命令。
步骤1更改当前分隔符:
delimiter $$第二步创建触发器:
CREATE TRIGGER `blog_before_delete`
AFTER DELETE ON `blog`
FOR EACH ROW
BEGIN
DELETE FROM blog_tags where blogid = OLD.id;
DELETE FROM blog_comments where blogid = OLD.id;
END
$$步骤3恢复以前的分隔符:
delimiter ;Explanation:
OLD是一个内置关键字,它引用我们要删除的博客表行。每当我们删除博客表中的条目时,Mysql都会运行触发器blog_before_delete。如果触发器失败,则删除操作将回滚。这有助于确保数据库中的Atomicity, Consistency, Isolation, and Durability。
发布于 2011-01-26 05:12:24
CREATE TRIGGER `food_before_delete`
AFTER DELETE ON `food`
FOR EACH ROW
begin
DELETE FROM apple
WHERE apple.iduser=NEW.iduser;
DELETE FROM orange
WHERE orange.iduser=NEW.iduser;
enddelete语句可能需要OLD.iduser,但不支持NEW.iduser。检查你的手册。
发布于 2011-01-26 05:28:48
也许是更简单的东西?
DELETE f,a,o FROM
food AS f
LEFT JOIN apple AS a USING (iduser)
LEFT JOIN orange AS o USING (iduser)
WHERE f.name = ...不需要触发器。
https://stackoverflow.com/questions/4798768
复制相似问题