Нужно ли PHP-скрипту ждать завершения триггера MySql? - PullRequest
2 голосов
/ 05 февраля 2012

База данных MySQL. Я рассчитываю реализовать триггер, который обновляет таблицу совокупных рейтингов при каждом размещении нового рейтинга. Тогда есть некоторые другие подобные случаи использования, где я ищу реализацию триггеров.

Эти триггеры могут обновлять федеративные таблицы . Итак, мой вопрос: нужно ли сценарию php, который вставляет новый рейтинг, ждать завершения триггера до завершения сценария php?

PS: я понимаю, что триггеры не очень хорошая идея для логики, и, возможно, мне было бы лучше с некоторыми сообщениями, такими как RabbitMQ .

1 Ответ

9 голосов
/ 05 февраля 2012

Триггеры синхронны;INSERT / UPDATE / DELETE, который порождал их, блокирует до тех пор, пока триггер не завершит выполнение, включая любые действия, которые триггер выполняет (и даже любые последующие триггеры, порожденные этими действиями).

Триггеры являются атомарными.То есть, если какое-либо изменение, выполненное триггером, дает сбой, то триггер не срабатывает, а также отменяет изменение, которое породило триггер.

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

Это относится как к триггерам BEFORE, так и к триггерам AFTER.Ваше приложение блокируется, пока все триггеры не будут завершены.

...