Spec-Zone .ru
спецификации, руководства, описания, API
|
The statements listed in this section (and any synonyms for them) implicitly end any transaction active in the
current session, as if you had done a COMMIT
before executing the statement. As of MySQL 5.5.3, most of these
statements also cause an implicit commit after executing; for additional details, see the end of this section.
Data definition language (DDL) statements that define or
modify database objects. ALTER DATABASE ... UPGRADE DATA DIRECTORY
NAME
, ALTER EVENT
, ALTER PROCEDURE
, ALTER SERVER
, ALTER TABLE
, ALTER
VIEW
, CREATE DATABASE
,
CREATE EVENT
, CREATE INDEX
, CREATE PROCEDURE
, CREATE SERVER
, CREATE TABLE
, CREATE TRIGGER
, CREATE VIEW
, DROP DATABASE
, DROP EVENT
, DROP INDEX
, DROP PROCEDURE
, DROP SERVER
, DROP TABLE
, DROP TRIGGER
, DROP VIEW
, 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.
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. CREATE USER
, DROP
USER
, GRANT
, RENAME
USER
, REVOKE
, SET
PASSWORD
.
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
to acquire nontransactional table locks. A commit 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 13.6.1,
"BEGIN ... END
Compound-Statement Syntax".
Data loading statements. LOAD DATA INFILE
. LOAD DATA INFILE
causes an implicit commit only for tables using the NDB
storage engine. For more information, see Bug #11151.
Administrative statements. ANALYZE TABLE
, CACHE INDEX
, CHECK TABLE
, LOAD INDEX INTO CACHE
, OPTIMIZE TABLE
, REPAIR TABLE
.
Replication control statements. Beginning
with MySQL 5.6.7: START SLAVE
,
STOP SLAVE
, RESET SLAVE
, CHANGE MASTER TO
. (Bug #13858841)
As of MySQL 5.5.3, most statements that previously caused an implicit commit before executing also do so after executing. The intent is to handle each such statement in its own special transaction because it cannot be rolled back anyway. The following list provides additional details pertaining to this change:
The CREATE
TABLE
variants (CREATE
TABLE
for InnoDB
tables and CREATE TABLE ... SELECT
) that previously were special cases no longer are
so because CREATE TABLE
uniformly causes an implicit commit before and after executing.
Transaction-control and locking statements behave as before.