mysql 触发器 update

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 触发器 update相关的知识,希望对你有一定的参考价值。

DELIMITER $$

CREATE
/*[DEFINER = user | CURRENT_USER ]*/
TRIGGER `eerp`.`order_update`
AFTER UPDATE
ON `eerp`.`bn_order`
FOR EACH ROW
BEGIN
DECLARE v_i INT;
SET v_i = old.no;
IF UPDATE(fhamount) THEN BEGIN
IF new.fhamount >= old.poamount THEN BEGIN
UPDATE bn_order
SET finish ='Y'
WHERE bn_order.no = v_i ;

END;

END;

END$$

DELIMITER ;

高手帮我看下
vinson_shen 可以帮我想个办法不???同样效果的

参考技术A mysql下,不能在触发器内部对表本身(即建立触发器的表)进行update、delete等引用的。

所以,你上面是在表bn_order 上面建立的触发器,而在触发器内部也有SQL语句对表bn_order 的引用,这是不允许的。

可以帮我想个办法不???同样效果的
-----------------
考虑存在另外一个表吧
参考技术B ...你用下面这个,可以实现你的需求,已经测试,你也可自己再测:
DELIMITER $$
CREATE
TRIGGER `eerp`.`order_update`
BEFORE UPDATE
ON `eerp`.`bn_order`
FOR EACH ROW
BEGIN
IF new.fhamount >= old.poamount THEN
SET new.finish ='Y';
END IF;
END$$
DELIMITER;本回答被提问者采纳

mysql 触发器的使用(备忘)

触发器创建语法四要素:

1.监视地点(table) 

2.监视事件(insert/update/delete) 

3.触发时间(after/before) 

4.触发事件(insert/update/delete)

 

语法:

create trigger 触发器名称

after/before insert/update/delete on 表名

for each row   

begin

sql语句;

end;

 

不难理解,例如 before insert on 表名,是在insert操作之前触发。

注意old和new的用法,old表示原来行的数据,new表示新行的数据。

insert只有new —— 插入操作,不难理解,只有新的数据

delete只有old —— 同样的道理,删除操作只有原始数据

update同时拥有new和old —— 分别表示更新之后和更新之前的数据

 

以上是关于mysql 触发器 update的主要内容,如果未能解决你的问题,请参考以下文章