我有 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
但它不会编译。如何创建一个同时从两个表中删除的触发器?
最佳答案
使用触发器一次从两个表中删除:
触发器用于强制表中的数据完整性。您可以使用触发器一次从任意数量的表中删除。
在初始化触发器之前,我们需要临时更改 mysql 分隔符运算符,因为触发器使用分号 ;
运算符在触发器中指定多个 sql 命令。
第 1 步更改当前分隔符:
delimiter $$
第 2 步创建触发器:
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 ;
说明:
OLD
是内置关键字,指的是我们要删除的博客表行。每当我们删除 blog 表中的条目时,Mysql 都会运行触发器 blog_before_delete
。如果触发器失败,则回滚删除。这有助于确保 Atomicity, Consistency, Isolation, and Durability在我们的数据库中。
关于mysql - 我想要一个触发器从 MySQL 中的 2 个表中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4798768/