我想在MySQL中从2个表中删除一个触发器

Ale*_*ack 11 mysql triggers sql-delete

我有3个MySQL表(food,apple,和orange).

我想删除以下行:

apple(idapple, iduser, name) 
orange(idornge, iduser, name)
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

但它不会编译.如何制作一次从两个表中删除的触发器?

小智 27

使用Trigger一次从两个表中删除:

触发器用于强制表中的数据完整性.您可以使用触发器一次删除任意数量的表.

在初始化触发器之前,我们需要临时更改mysql定界符运算符,因为触发器使用分号;运算符在触发器中指定多个sql命令.

步骤1更改当前分隔符:

delimiter $$
Run Code Online (Sandbox Code Playgroud)

步骤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
$$
Run Code Online (Sandbox Code Playgroud)

步骤3恢复以前的分隔符:

delimiter ;
Run Code Online (Sandbox Code Playgroud)

说明:

OLD是一个内置关键字,指的是我们正在删除的博客表行.blog_before_delete每当我们删除博客表中的条目时,Mysql都会运行触发器.我的触发器失败,然后回滚删除.这有助于确保数据库中的原子性,一致性,隔离性和持久性.