Неявный commit.

Неявный 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 уже невозможно.

Leave a Reply

Your email address will not be published. Required fields are marked *