Spec-Zone.ru › MySQL 9.2

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-9.2-en/implicit-commit.html

Spec-Zone.ru

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