Spec-Zone.ru › MySQL 8.4

15.3.3 Операторы, вызывающие неявное подтверждение

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

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

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

    Операторы 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. Последний не вызывает неявного подтверждения. См. Раздел 15.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 (но не RESET PERSIST).

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

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

Spec-Zone.ru

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