首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我想要一个触发器从MySQL中的2个表中删除

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

Stack Overflow用户
提问于 2011-01-26 05:02:12
回答 5查看 29.1K关注 0票数 12

我有3个MySQL表(food、apple和orange)。

我想从以下位置删除行:

代码语言:javascript
复制
apple(idapple, iduser, name) 
orange(idornge, iduser, name)

当使用一个触发器删除food(iduser, name)中的行时?

到目前为止,这是我的触发器:

代码语言:javascript
复制
  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

但是它不能编译。如何创建一次从两个表中删除的触发器?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-09-05 02:21:03

使用触发器从两个表中一次删除:

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

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

步骤1更改当前分隔符:

代码语言:javascript
复制
delimiter $$

第二步创建触发器:

代码语言:javascript
复制
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恢复以前的分隔符:

代码语言:javascript
复制
delimiter ;

Explanation:

OLD是一个内置关键字,它引用我们要删除的博客表行。每当我们删除博客表中的条目时,Mysql都会运行触发器blog_before_delete。如果触发器失败,则删除操作将回滚。这有助于确保数据库中的Atomicity, Consistency, Isolation, and Durability。

票数 28
EN

Stack Overflow用户

发布于 2011-01-26 05:12:24

代码语言:javascript
复制
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;
end

delete语句可能需要OLD.iduser,但不支持NEW.iduser。检查你的手册。

票数 3
EN

Stack Overflow用户

发布于 2011-01-26 05:28:48

也许是更简单的东西?

代码语言:javascript
复制
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 = ...

不需要触发器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4798768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档