Есть ли решение для MYSQL Код ошибки: 1442? - PullRequest
0 голосов
/ 15 января 2012

мой код очень длинный, поэтому я сделаю все просто. у меня есть следующее:

table1 --> have a trigger on insert (call function1 to insert into table2)
table2 --> have a trigger on insert (call function2)

function2()
update table1 depending on a query that table1 is related to.

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

так есть ли решение или обходной путь для этого ...

1 Ответ

1 голос
/ 16 января 2012

В триггерах нужно понимать, что они являются частью транзакции.

Таким образом, Insert Table 1, триггеры вставки table 2, которые обновляют table1, могут вызвать исходную вставку врезаться в себя. Не выполненные триггеры с MySQl, теоретически это может быть нормально, если он пытается обновить первоначально вставленную запись, которая еще не была зафиксирована ....

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

например. вместо этого при вставке Table1 = A, что приводит к тому, что Table2 = B приводит к тому, что Table1 (A) становится C и SP, который ищет, что B сделал бы с A, и вставил это в A (c) и соответствующую запись в B.

Триггеры великолепны, но не сходите с ума от них.

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