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.