The statements listed in this section (and any synonyms for them)
implicitly end a transaction, as if you had done a
COMMIT
before executing the
statement.
Data definition language (DDL)
statements that define or modify database objects.
ALTER DATABASE ... UPGRADE DATA DIRECTORY
NAME
, ALTER EVENT
,
ALTER PROCEDURE
,
ALTER TABLE
,
CREATE DATABASE
,
CREATE EVENT
,
CREATE INDEX
,
CREATE PROCEDURE
,
CREATE TABLE
,
DROP DATABASE
,
DROP EVENT
,
DROP INDEX
,
DROP PROCEDURE
,
DROP TABLE
,
RENAME TABLE
,
TRUNCATE
TABLE
.
ALTER FUNCTION
,
CREATE FUNCTION
and
DROP FUNCTION
also cause an
implicit commit when used with stored functions, but not with
UDFs. (ALTER FUNCTION
can only
be used with stored functions.)
ALTER TABLE
,
CREATE TABLE
, and
DROP TABLE
do not commit a
transaction if the TEMPORARY
keyword is
used. (This does not apply to other operations on temporary
tables such as CREATE INDEX
,
which do cause a commit.) However, although no implicit commit
occurs, neither can the statement be rolled back. Therefore,
use of such statements will violate transaction atomicity: For
example, if you use
CREATE TEMPORARY
TABLE
and then roll back the transaction, the table
remains in existence.
The CREATE TABLE
statement in
InnoDB
is processed as a single
transaction. This means that a
ROLLBACK
from the user does not undo CREATE
TABLE
statements the user made during that
transaction.
Beginning with MySQL 5.1.3, ALTER
VIEW
, CREATE TRIGGER
,
CREATE VIEW
,
DROP TRIGGER
, and
DROP VIEW
cause an implicit
commit.
Beginning with MySQL 5.1.15,
CREATE TABLE ...
SELECT
causes an implicit commit before and after
the statement is executed when you are creating nontemporary
tables. (No commit occurs for CREATE TEMPORARY TABLE
... SELECT
.) This is to prevent an issue during
replication where the table could be created on the master
after a rollback, but fail to be recorded in the binary log,
and therefore not replicated to the slave. For more
information, see Bug#22865.
Statements that implicitly use or modify
tables in the mysql
database.
Beginning with MySQL 5.1.3, CREATE
USER
, DROP USER
, and
RENAME USER
cause an implicit
commit. Beginning with MySQL 5.1.23,
GRANT
,
REVOKE
, and
SET PASSWORD
statements cause
an implicit commit.
Transaction-control and locking
statements.
BEGIN
,
LOCK TABLES
, SET
autocommit = 1
(if the value is not already 1),
START
TRANSACTION
,
UNLOCK
TABLES
.
UNLOCK
TABLES
commits a transaction only if any tables
currently have been locked with LOCK
TABLES
. This does not occur for
UNLOCK
TABLES
following
FLUSH TABLES WITH READ
LOCK
because the latter statement does not acquire
table-level locks.
Transactions cannot be nested. This is a consequence of the
implicit commit performed for any current transaction when you
issue a START
TRANSACTION
statement or one of its synonyms.
Statements that cause an implicit commit cannot be used in an
XA transaction while the transaction is in an
ACTIVE
state.
The BEGIN
statement differs from the use of the BEGIN
keyword that starts a BEGIN ... END
compound statement. The latter does not cause an implicit
commit. See Section 12.8.1, “BEGIN ... END
Compound Statement Syntax”.
Data loading statements.
LOAD DATA
INFILE
. Before MySQL 5.1.12,
LOAD DATA
INFILE
caused an implicit commit for all storage
engines. As of MySQL 5.1.12, it causes an implicit commit only
for tables using the NDB
storage
engine. For more information, see Bug#11151.
Administrative statements.
CACHE INDEX
,
LOAD INDEX INTO
CACHE
. Beginning with MySQL 5.1.10,
ANALYZE TABLE
,
CHECK TABLE
,
OPTIMIZE TABLE
, and
REPAIR TABLE
cause an implicit
commit.
User Comments
Add your own comment.