Сначала запустите show triggers;
из cli или из MySQL Workbench , чтобы увидеть, есть ли у вас триггер с именем example_trigger
или есть какие-либо триггеры, установленные для AFTER UPDATE ON example_table
.
У вас может быть только 1 триггер с именем 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
вместо того, чтобы выполнять весь оператор UPDATE
.
Кроме того, вы неправильно написали "клиент":)
Обновление
Вы можете использовать оператор CASE
для достижения этого с помощью одного запроса UPDATE
. Обратите внимание, что для этого вам придется отключить «безопасные обновления».
SET SQL_SAFE_UPDATES = 0;
UPDATE example_table
SET result = CASE
WHEN id=4 THEN 1
WHEN result=0 THEN 2
ELSE result
END WHERE customer_id = 12;