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 可以帮我想个办法不???同样效果的
所以,你上面是在表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的主要内容,如果未能解决你的问题,请参考以下文章