mysql - 我想要一个触发器从 MySQL 中的 2 个表中删除

标签 mysql triggers sql-delete

我有 3 个 MySQL 表(foodappleorange)。

我想从以下位置删除行:

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/

相关文章:

MySQL INSERT DELAYED - 如何找出插入何时完成

php - mysql中的子选择数组

google-apps-script - 过期的基于时间的触发器是自动删除的,还是应该手动删除?

google-apps-script - 拒绝 Google 表单提交或删除回复

postgresql - 删除postgres中的重复项

php - 删除已连接的表

MySQL 查询将列的值增加 10.000

mysql - 创建一个偶数以使用随机数更新表列

Mysql触发器帮助-插入之前

mysql - sql删除除2个重复项之外的所有内容