我正在尝试编写一个非常简单的查询。我无法解决这个问题。
我的触发器
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package python3-pip
当我将结果更新为1时,我想将属于该客户的其他记录的结果更新为2。 但是我得到这个错误:
CREATE TRIGGER `example_trigger` AFTER UPDATE ON `example_table`
FOR EACH ROW
if (new.result = 1) THEN
update example_table set result = 2 where result=0 and costumer_id = new.costumer_id;
end if;
我尝试编写该过程,但此过程不再起作用。
我该如何解决这个问题?
编辑:
示例表:
Can't update table 'example_table' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
查询:
id customer_id result
1 12 0
2 12 5
3 14 4
4 12 3
5 12 0
6 12 0
7 16 3
然后触发器将起作用。
我需要:
UPDATE example_table SET result=1 WHERE customer_id=12 AND id=4
答案 0 :(得分:0)
首先,从cli或MySQL Workbench运行show triggers;
,以查看是否有名为example_trigger
的触发器,或者是否为{设置了任何个触发器{1}}。
您只能有1个名为AFTER UPDATE ON example_table
的触发器,而对于example_trigger
则只有1个触发器。
然后,将代码更改为以下代码应该可以解决您的问题:
AFTER UPDATE ON example_table
在您的代码中,先给出DROP TRIGGER example_trigger;
DELIMITER $$
CREATE TRIGGER `example_trigger` BEFORE UPDATE ON `example_table`
FOR EACH ROW
BEGIN
IF (NEW.result = 1) THEN
SET NEW.result = 2;
END IF;
END $$
DELIMITER ;
条件,然后在更新语句中给出IF result=1
。这将导致触发器从不更新任何内容(或给出错误)。另外,可以像我的示例一样使用WHERE result=0
来简化代码,因为您可以简单地BEFORE UPDATE
而不用运行整个SET NEW.col = x
语句。
而且,您拼写了“ customer”:)
您可以使用UPDATE
语句通过单个CASE
查询来实现此目的。请注意,您必须禁用“安全更新”才能做到这一点。
UPDATE