首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mySQL8.0触发器语句

mySQL8.0触发器语句
EN

Stack Overflow用户
提问于 2019-08-05 03:22:20
回答 3查看 277关注 0票数 0

我正在努力创造以下情况:

在更新后在“公司”表上创建一个触发器,如果该更新将公司的预算设置为0,如果该预算小于0。

但是,我与诸如无法更新、设置表等错误作斗争。我知道这是因为我需要从“更新后”改为“更新前”。但我不能忽视预期的代码。我能做什么?

我拥有的mySQL代码是:

代码语言:javascript
复制
 delimiter $$

 drop procedure if exists after_company_update $$ 

 create trigger after_company_update after update on Company 

 for each row begin 

 update Company set budget = 0 where budget < 0; 

 end $$ 

 delimiter ;

错误: ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG:无法更新存储函数/触发器中的表'Company‘,因为它已经被调用此存储函数/触发器的语句所使用。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-08-05 11:53:14

这种触发应该在更新之前进行,而不是在更新之后进行:

代码语言:javascript
复制
delimiter $$

drop trigger if exists before_company_update $$ 

create trigger before_company_update after update on Company 
for each row
begin 
    if old.budget < 0 then
        set new.budget := 0
    end if;
end $$ 

delimiter ;

您可以将其表示为“update后触发器”:

代码语言:javascript
复制
create trigger after_company_update after update on Company 
for each row
    update Company
        set budget = 0
        where Company.Id = new.Id;

语法有效,但触发器不起作用。它返回错误:

无法更新存储函数/触发器中的表“Company”,因为它已经被调用此存储函数/触发器的语句所使用。

你可以看到这个这里

票数 0
EN

Stack Overflow用户

发布于 2019-08-05 06:08:47

不能更新触发器已经使用的整个表,但可以更新已被修改的列。

假设您的表有主键,即company_id

代码语言:javascript
复制
update Company 
set budget = 0 
where company_id=new.company_id and budget < 0;
票数 0
EN

Stack Overflow用户

发布于 2019-08-05 06:22:53

‘在更新触发器中,可以在行更新之前使用OLD.col_name引用行的列,在行更新后使用NEW.col_name引用行的列’- https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html

以前的触发器可以工作,但我不确定是否应该有一个触发器--您真的想在每次公司发生更新时(或者仅在特定的情况下)这样做吗?例如,如果您更改了地址(假设地址在公司表中),是否合适?

代码语言:javascript
复制
delimiter $$
 drop trigger if exists after_company_update $$ 
 create trigger after_company_update BEFORE update on Company 
 for each row begin 
   set NEW.budget = 0 where OLD.budget < 0; 
 end $$ 
DELIMITER ;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57351834

复制
相关文章

相似问题

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