Предположим, что у меня есть некоторая операция (пусть это будет INSERT) в таблице MyISAM с подключенным к ней триггером.
Я знаю, что MySQL выполняет неявные блокировки таблиц во время запуска этого INSERT.
Вопрос: Будет ли запущен триггер внутри этой неявной блокировки? Будут ли блокировки таблиц, используемых в триггере, блокировкой?
Другими словами, выполнение триггера является частью атомной операции (например, мой INSERT)?
Кстати, как насчет InnoDB? тот же самый? это триггер, заключенный в явную транзакцию?
Запрос InnoDB выполняется в неявной транзакции.
На самом деле это все работает в транзакции. Режим "без транзакций" эмулируется неявным фиксацией после каждого оператора ("запуск транзакции" отключает автоматическое неявное совершение).
Эта транзакция включает в себя все триггеры, которые запускаются для запроса, а также блокировки общего режима для внешних ключей.
С MyISAM триггер заблокирует любую таблицу, которую он изменяет, так же, как и обычный запрос. Независимо от того, атомарно это или нет, я не знаю.