bash.org:

Следуй за мной:

twiby

Адовый чад кутежа и трэш в комплекте

MySQL Trigger update для текущей таблицы

Пришло на ум: 11 июня 2012


Попытался написать триггер для апдейта текущей таблицы и получил "Can’t update table ‘tbl_name’ in stored function/trigger because it is already used by statement which invoked this stored function/trigger."

Итак начнем с начала:

DELIMITER $$
USE `db`$$

CREATE TRIGGER update_modificationa_date BEFORE UPDATE ON tbl_name
FOR EACH ROW BEGIN
    UPDATE tbl_name SET NEW.last_mod = NOW() WHERE id = OLD.id;
END;

Такой код естественно вернет ошибку, поскольку можно получить так называемый рекурсивный редирект(recursive redirect), когда апдейт дергает триггер, а триггер делает апдейт и так по кругу

Решение на самом деле простое - убрать конструкцию UPDATE

-- Trigger DDL Statements
DELIMITER $$
USE `db`$$

CREATE TRIGGER update_modificationa_date BEFORE UPDATE ON tbl_name
FOR EACH ROW BEGIN
    SET NEW.last_mod = NOW();
END;

Если мой пост помог вам сэкономить пару часов времени или показался полезным, думаю не лишним будет показать его друзьям через социальные сети или упомянуть в своем блоге.


Ваше мнение:

Имя

cool : 2014-12-02 07:11:56

Большое спасибо!

Boolean_Type : 2015-03-19 17:33:29

Здравствуйте!) Что есть NEW в этом коде?

Александр : 2017-11-15 05:33:21

Спасибо огромное!
   другие статьи с тегом MySQL

Случайная мысль:

Богатство главным образом зависит от двух вещей: от трудолюбия и умеренности, иначе говоря - не теряй ни времени, ни денег, и используй и то и другое наилучшим образом.
Бенджамин Франклин
drcreazy © 2008-2012 all rights reserved