Spec-Zone.ru › MySQL 5.7

13.3.3 Операторы, вызывающие неявный коммит

Перечисленные в этом разделе операторы (и любые их синонимы) неявно завершают любую транзакцию, активную в текущем сеансе, как если бы вы выполнили COMMIT перед выполнением оператора.

Большинство из этих операторов также вызывают неявный коммит после выполнения. Цель состоит в том, чтобы обрабатывать каждый такой оператор в отдельной специальной транзакции, поскольку её невозможно отменить. Операторы управления транзакциями и блокировки являются исключениями: если неявный коммит происходит до выполнения, то после него не происходит.

  • Операторы языка определения данных (DDL), определяющие или изменяющие объекты базы данных. ALTER DATABASE ... UPGRADE DATA DIRECTORY NAME, ALTER EVENT, ALTER PROCEDURE, ALTER SERVER, ALTER TABLE, ALTER TABLESPACE, ALTER VIEW, CREATE DATABASE, CREATE EVENT, CREATE INDEX, CREATE PROCEDURE, CREATE SERVER, CREATE TABLE, CREATE TABLESPACE, CREATE TRIGGER, CREATE VIEW, DROP DATABASE, DROP EVENT, DROP INDEX, DROP PROCEDURE, DROP SERVER, DROP TABLE, DROP TABLESPACE, DROP TRIGGER, DROP VIEW, INSTALL PLUGIN, RENAME TABLE, TRUNCATE TABLE, UNINSTALL PLUGIN.

    ALTER FUNCTION, CREATE FUNCTION и DROP FUNCTION также вызывают неявный коммит при использовании с хранимыми функциями, но не с загружаемыми. (ALTER FUNCTION может использоваться только с хранимыми функциями.)

    Операторы CREATE TABLE и DROP TABLE не выполняют коммита транзакции, если используется ключевое слово TEMPORARY. (Это не относится к другим операциям над временными таблицами, таким как ALTER TABLE и CREATE INDEX, которые вызывают коммит.) Однако, хотя неявного коммита не происходит, оператор также нельзя отменить, что означает, что использование таких операторов нарушает транзакционную атомарность. Например, если вы используете CREATE TEMPORARY TABLE, а затем отменяете транзакцию, таблица останется.

    Оператор CREATE TABLE в InnoDB обрабатывается как единая транзакция. Это означает, что ROLLBACK пользователя не отменяет операторы CREATE TABLE, которые пользователь выполнил в рамках этой транзакции.

    Оператор CREATE TABLE ... SELECT вызывает неявный коммит до и после выполнения оператора при создании невременных таблиц. (Коммит не происходит для CREATE TEMPORARY TABLE ... SELECT.)

  • Операторы, неявно использующие или изменяющие таблицы в базе данных mysql. ALTER USER, CREATE USER, DROP USER, GRANT, RENAME USER, REVOKE, SET PASSWORD.

  • Операторы управления транзакциями и блокировки. BEGIN, LOCK TABLES, SET autocommit = 1 (если значение ещё не равно 1), START TRANSACTION, UNLOCK TABLES.

    UNLOCK TABLES выполняет коммит транзакции только если какие-либо таблицы в настоящее время заблокированы с помощью LOCK TABLES для получения не транзакционных блокировок таблиц. Коммит не выполняется для UNLOCK TABLES после FLUSH TABLES WITH READ LOCK, поскольку последний оператор не получает блокировки на уровне таблиц.

    Вложенные транзакции не поддерживаются. Это следствие неявного коммита, выполняемого для любой текущей транзакции при выполнении оператора START TRANSACTION или одного из его синонимов.

    Операторы, вызывающие неявный коммит, не могут использоваться в XA-транзакции, пока транзакция находится в состоянии ACTIVE.

    Оператор BEGIN отличается от использования ключевого слова BEGIN, которое инициирует составной оператор BEGIN ... END. Последний не вызывает неявный коммит. См. Раздел 13.6.1, «Состаной оператор BEGIN ... END».

  • Операторы загрузки данных. LOAD DATA. LOAD DATA вызывает неявный коммит только для таблиц, использующих движок хранения NDB.

  • Административные операторы. ANALYZE TABLE, CACHE INDEX, CHECK TABLE, FLUSH, LOAD INDEX INTO CACHE, OPTIMIZE TABLE, REPAIR TABLE, RESET.

  • Операторы управления репликацией. START SLAVE, STOP SLAVE, RESET SLAVE, CHANGE MASTER TO.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/implicit-commit.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API