Ошибка запуска, MySQL - PullRequest
       3

Ошибка запуска, MySQL

2 голосов
/ 01 февраля 2012

Ну, я исследовал и не нашел решения следующей проблемы 'SQL Error (1442): Can not update table' messages' in stored function / trigger because it is already used by statement Which invoked this stored function / trigger. `

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

DELIMITER $$ 
DROP TRIGGER IF EXISTS `onMessage` ;
CREATE TRIGGER `onMessage` BEFORE INSERT ON `messages` FOR EACH ROW 
BEGIN
       UPDATE `users` SET `users`.`messages` = ( `users`.`messages` + 1 ) 
       WHERE `users`.`uid` = NEW.uid ;
       DELETE FROM `messages` WHERE `date` < ( NOW( ) - INTERVAL 1 MINUTE ) ;
END ;
$$
DELIMITER ;

Ответы [ 3 ]

4 голосов
/ 01 февраля 2012

Это ограничение в использовании триггеров.

Из документации MySql :

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

2 голосов
/ 01 февраля 2012

Правильно, для MySQL в любом случае

Вы не можете записать в таблицу, связанную с триггером в этом триггере. Он генерирует всевозможные несоответствия, не в последнюю очередь потому, что триггеры MySQL обрабатываются построчно (RBAR)

В этом случае я бы использовал хранимую процедуру для обработки INSERT на messages

0 голосов
/ 01 февраля 2012

Невозможно обновить таблицу, для которой в триггере создается триггер, так как Mysql выполняет некоторые операции по блокировке этой таблицы. Следовательно, вы не можете вставлять / обновлять / удалять строки одной и той же таблицы, потому что тогда триггер будет вызываться снова и снова, что приведет к рекурсии.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...