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. 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 TABLE,
          ALTER VIEW,
          CREATE DATABASE,
          CREATE EVENT,
          CREATE INDEX,
          CREATE PROCEDURE,
          CREATE TABLE,
          CREATE TRIGGER,
          CREATE VIEW,
          DROP DATABASE,
          DROP EVENT,
          DROP INDEX,
          DROP PROCEDURE,
          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 12.7.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.
        
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.

User Comments
Add your own comment.