SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 19.03.2010 18:26:21

Fajn
Участник
Зарегистрирован: 12.06.2009
Сообщений: 3

Триггер

Приветствую всех!
У меня возникли проблемы с триггером.
В общем задача такова - нужно для того поля таблици t, которое менялось (редактировалось), значение параметра m сделать нулевым.
Триггер:
CREATE TRIGGER r.update_t
AFTER UPDATE ON r.t
FOR EACH ROW
BEGIN
UPDATE r.t
SET NEW.m = 0
WHERE k = NEW.k OR p= NEW.p OR n= NEW.n;
END;

В результате, выводит такую ошибку:
#1442 - Can't update table 't' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

Может у кого-то были похожие проблемы или есть какие-то идеи, буду очень благодарна за помощь.

Отредактированно Fajn (19.03.2010 19:24:07)

Неактивен

 

#2 19.03.2010 18:44:34

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Триггер

Если m — это колонка, то хватит и простого
SET NEW.m = 0;

Неактивен

 

#3 19.03.2010 19:31:28

Fajn
Участник
Зарегистрирован: 12.06.2009
Сообщений: 3

Re: Триггер

paulus написал:

Если m — это колонка, то хватит и простого
SET NEW.m = 0;

Да, m — это колонка, но такое действие неприемлемо. Дело в том, что триггер должен срабатывать лиш в тех случаях, когда редактируются поля k ИЛИ p ИЛИ n. Во всех других (в таблице 7 полей) информация записуется без изменения значения параметра m.

Неактивен

 

#4 20.03.2010 00:12:19

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Триггер

CREATE TRIGGER r.update_t
BEFORE UPDATE ON r.t
FOR EACH ROW
BEGIN
IF (new.k <>old.k OR new.p <>old.p OR new.n <>old.n)
THEN SET NEW.m = 0;
END IF;
END;

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson