Должен ли скрипт PHP ждать завершения триггера MySql?
База данных MySQL. Я рассчитываю реализовать триггер, который обновляет таблицу совокупных рейтингов при каждом размещении нового рейтинга. Тогда есть некоторые другие подобные случаи использования, где я ищу реализацию триггеров.
Эти триггеры могут обновлять федеративные таблицы. Итак, мой вопрос: нужно ли сценарию php, который вставляет новый рейтинг, ждать завершения триггера до завершения сценария php?
PS: я понимаю, что триггеры - это плохая идея для логики, и, возможно, мне было бы лучше с некоторыми сообщениями, такими как RabbitMQ.
1 ответ
Триггеры синхронны; INSERT/UPDATE/DELETE, который порождал их, блокирует до тех пор, пока триггер не завершит выполнение, включая любые действия, которые триггер выполняет (и даже любые последующие триггеры, порожденные этими действиями).
Триггеры атомарные. То есть, если какое-либо изменение, выполненное триггером, терпит неудачу, тогда триггер отказывает, и это также отменяет изменение, которое породило триггер.
Триггеры также вносят изменения в область действия той же транзакции, которая породила триггер. Таким образом, изменения, сделанные триггером, могут быть зафиксированы / отменены вместе с изменениями, которые породили триггер. Если триггеры продолжают работать, пока ваше PHP-приложение завершает свою транзакцию и завершает работу, то не будет никакого способа гарантировать, что они произойдут в этой транзакции.
Это относится как к триггерам ДО, так и к триггерам ПОСЛЕ. Ваше приложение блокируется, пока все триггеры не будут завершены.