хорошо Я искал много мест в Интернете, чтобы найти причину ошибки mysql # 1442
, в которой говорится:
Невозможно обновить таблицу unlucky_table в сохраненной функции / триггере, потому что он уже используется оператором, который вызвал это сохраненное function / trigger
Некоторые говорят, что это ошибка mysql или функция, которую он не предоставляет.
Некоторые утверждают, что это связано с рекурсивным поведением когда вы вставляете запись, mysql выполняет некоторую блокировку. вы не можете вставлять / обновлять / удалять строки той же таблицы, в которую вы вставляете ... потому что тогда триггер будет вызываться снова и снова ... заканчивая рекурсией
now i не могу понять, почему это рекурсивно. У меня есть случай, когда у меня есть 2 таблицы table1
и table2
, и я запускаю запрос sql как
update table1 set avail = 0 where id in (select id from table2 where duration < now() - interval 2 hour);
, теперь у меня есть после триггера обновления
на table1
как
CREATE TRIGGER trig_table1 AFTER UPDATE ON table1
FOR EACH ROW begin
if old.avail=1 and new.avail=0 then
delete from table2 where id=new.id;
end if;
теперь, когда я выполняю запрос на обновление, я получаю ошибку 1442. что рекурсивно в этом случае?
is this error a lack of feature in mysql?
OR
does this have to do with how mysql executes queries?
OR
is there something logically wrong with executing such queries?