Неявный commit (implicit commit).
Если команда COMMIT всегда явным образом завершает текущую транзакцию, то существует целый ряд команд, которые также могут прервать текущую транзакцию посредством так называемого неявного (implicit) commit. К таким командам относятся следующие:
- Команды DDL (data definition language) или команды модифицирующие или создающие какие-то объекты в базе данных (например, процедуры, функции, триггеры и т.п.): ALTER, CREATE, DROP, TRUNCATE TABLE.
- Административные команды и команды использующие и изменяющие таблицы в базе данных mysql: GRANT, REVOKE, CREATE USER, DROP USER, SET PASSWORD, ANALYZE TABLE, REPAIR TABLE и т.д.
- Команды управляющие блокировками таблиц: LOCK TABLES, UNLOCK TABLES.
- Команды управляющие транзакциями: START TRANSACTION или BEGIN (если эта команда исполняется, когда предыдущая транзакции не завершена, т.к. транзакции не могут быть вложенными), SET AUTOCOMMIT=1 (если текущее значение переменной autocommit не равно 1).
- Команды по загрузке данных: LOAD DATA INFILE.
Полный список команд, вызывающих неявный commit, зависит от конкретной версии MySQL. Посмотреть его можно на сайте разработчиков.
Выполнение какой-либо из выше перечисленных команд будет иметь такой же эффект, как будто была выполнена команда commit. Если неявный commit прошел, откатить его с помощью команды ROLLBACK уже невозможно.