2015-04-30 3 views
1

Я пытался вызвать обновление chatroompost.view от 1 до 0, когда произошло обновление и chatroompost.likecount <= -5Got Ошибка 1442 пытается вызвать изменение

CREATE TRIGGER `chatroompost_AFTER_UPDATE` 
AFTER UPDATE ON `chatroompost` 
FOR EACH ROW BEGIN 
    IF (NEW.likecount <= -5) THEN 
     UPDATE `chatroompost` SET NEW.`view`='0' WHERE `chatroompost`.`idchatroompost` = OLD.`idchatroompost`; 
    END IF; 
END $$ 
DELIMITER ; 

Запрос:

UPDATE `chatroompost` SET likecount='-11' WHERE idchatroompost=1; SELECT *FROM chatroompost; 

, но я получил

Код ошибки: 1442. Невозможно обновить таблицу «chatroompost» в хранимой функции/триггере, поскольку она уже используется stateme nt, который вызвал эту хранимую функцию/триггер.

Я попытался REPLACE все AFTER к BEFORE, но все-таки получил ту же ошибку.

+0

http://stackoverflow.com/questions/12203859/mysql-trigger-cannot-update-table-getting-error-1442 – Sush

+0

Я Тринга чтобы вызвать обновление chatroompost.view от 1 до 0 при обновлении и chatroompost.likecount <= - 5 , но я получил код ошибки: 1442. Не удается обновить таблицу «chatroompost» в хранимой функции/триггере, поскольку она уже используется который вызывается этой хранимой функцией/триггером. Я попытался ЗАМЕНИТЬ ВСЕ ПОСЛЕ ПЕРЕД, но все равно получил то же самое 1442. – user3916122

+0

Вы проверили выше ссылку? – Sush

ответ

0

Решение: сделайте его ПЕРЕД ДОПОЛНИТЕЛЬНЫМ триггером и используйте оператор NEW, он выполнит эту работу.

DROP TRIGGER IF EXISTS`chatroompost_AFTER_UPDATE` ; 
DELIMITER $$ 
use mydb $$ 

CREATE TRIGGER `chatroompost_AFTER_UPDATE` 
BEFORE UPDATE ON `chatroompost` 
FOR EACH ROW BEGIN 
    IF (NEW.likecount <= -5) THEN 
     NEW.view='0'; 
    END IF; 
END $$ 
DELIMITER ; 

Причина: Вы не можете обновить таблицу (chatroompost), где вызывается триггер:

В сохраненной функции или триггера, не разрешается изменять таблицу, которая уже (для чтения или записи) оператором , вызывающим функцию или триггер.

Это будет генерировать ошибку 1442:

Error Code: 1442 
Can't update table 'chatroompost' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. 
Смежные вопросы