START TRANSACTION
    [transaction_characteristic [, transaction_characteristic] ...]
transaction_characteristic: {
    WITH CONSISTENT SNAPSHOT
  | READ WRITE
  | READ ONLY
}
BEGIN [WORK]
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
SET autocommit = {0 | 1}These statements provide control over use of transactions:
- START TRANSACTIONor- BEGINstart a new transaction.
- COMMITcommits the current transaction, making its changes permanent.
- ROLLBACKrolls back the current transaction, canceling its changes.
- SET autocommitdisables or enables the default autocommit mode for the current session.
      By default, MySQL runs with
      autocommit mode enabled.
      This means that, when not otherwise inside a transaction, each
      statement is atomic, as if it were surrounded by START
      TRANSACTION and COMMIT. You cannot
      use ROLLBACK to undo the effect; however, if an
      error occurs during statement execution, the statement is rolled
      back.
    
      To disable autocommit mode implicitly for a single series of
      statements, use the START TRANSACTION
      statement:
    
START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;
      With START TRANSACTION, autocommit remains
      disabled until you end the transaction with
      COMMIT or ROLLBACK. The
      autocommit mode then reverts to its previous state.
    
      START TRANSACTION permits several modifiers
      that control transaction characteristics. To specify multiple
      modifiers, separate them by commas.
- The - WITH CONSISTENT SNAPSHOTmodifier starts a consistent read for storage engines that are capable of it. This applies only to- InnoDB. The effect is the same as issuing a- START TRANSACTIONfollowed by a- SELECTfrom any- InnoDBtable. See Section 17.7.2.3, “Consistent Nonlocking Reads”. The- WITH CONSISTENT SNAPSHOTmodifier does not change the current transaction isolation level, so it provides a consistent snapshot only if the current isolation level is one that permits a consistent read. The only isolation level that permits a consistent read is- REPEATABLE READ. For all other isolation levels, the- WITH CONSISTENT SNAPSHOTclause is ignored. A warning is generated when the- WITH CONSISTENT SNAPSHOTclause is ignored.
- The - READ WRITEand- READ ONLYmodifiers set the transaction access mode. They permit or prohibit changes to tables used in the transaction. The- READ ONLYrestriction prevents the transaction from modifying or locking both transactional and nontransactional tables that are visible to other transactions; the transaction can still modify or lock temporary tables.- MySQL enables extra optimizations for queries on - InnoDBtables when the transaction is known to be read-only. Specifying- READ ONLYensures these optimizations are applied in cases where the read-only status cannot be determined automatically. See Section 10.5.3, “Optimizing InnoDB Read-Only Transactions” for more information.- If no access mode is specified, the default mode applies. Unless the default has been changed, it is read/write. It is not permitted to specify both - READ WRITEand- READ ONLYin the same statement.- In read-only mode, it remains possible to change tables created with the - TEMPORARYkeyword using DML statements. Changes made with DDL statements are not permitted, just as with permanent tables.- For additional information about transaction access mode, including ways to change the default mode, see Section 15.3.7, “SET TRANSACTION Statement”. - If the - read_onlysystem variable is enabled, explicitly starting a transaction with- START TRANSACTION READ WRITErequires the- CONNECTION_ADMINprivilege (or the deprecated- SUPERprivilege).
        Many APIs used for writing MySQL client applications (such as
        JDBC) provide their own methods for starting transactions that
        can (and sometimes should) be used instead of sending a
        START TRANSACTION statement from the client.
        See Chapter 31, Connectors and APIs, or the documentation for
        your API, for more information.
To disable autocommit mode explicitly, use the following statement:
SET autocommit=0;
      After disabling autocommit mode by setting the
      autocommit variable to zero,
      changes to transaction-safe tables (such as those for
      InnoDB or
      NDB) are not made permanent
      immediately. You must use COMMIT to
      store your changes to disk or ROLLBACK to
      ignore the changes.
    
      autocommit is a session variable
      and must be set for each session. To disable autocommit mode for
      each new connection, see the description of the
      autocommit system variable at
      Section 7.1.8, “Server System Variables”.
    
      BEGIN and BEGIN WORK are
      supported as aliases of START TRANSACTION for
      initiating a transaction. START TRANSACTION is
      standard SQL syntax, is the recommended way to start an ad-hoc
      transaction, and permits modifiers that BEGIN
      does not.
    
      The BEGIN statement differs from the use of the
      BEGIN keyword that starts a
      BEGIN ... END
      compound statement. The latter does not begin a transaction. See
      Section 15.6.1, “BEGIN ... END Compound Statement”.
        Within all stored programs (stored procedures and functions,
        triggers, and events), the parser treats BEGIN
        [WORK] as the beginning of a
        BEGIN ...
        END block. Begin a transaction in this context with
        START
        TRANSACTION instead.
      The optional WORK keyword is supported for
      COMMIT and ROLLBACK, as are
      the CHAIN and RELEASE
      clauses. CHAIN and RELEASE
      can be used for additional control over transaction completion.
      The value of the completion_type
      system variable determines the default completion behavior. See
      Section 7.1.8, “Server System Variables”.
    
      The AND CHAIN clause causes a new transaction
      to begin as soon as the current one ends, and the new transaction
      has the same isolation level as the just-terminated transaction.
      The new transaction also uses the same access mode (READ
      WRITE or READ ONLY) as the
      just-terminated transaction. The RELEASE clause
      causes the server to disconnect the current client session after
      terminating the current transaction. Including the
      NO keyword suppresses CHAIN
      or RELEASE completion, which can be useful if
      the completion_type system
      variable is set to cause chaining or release completion by
      default.
    
Beginning a transaction causes any pending transaction to be committed. See Section 15.3.3, “Statements That Cause an Implicit Commit”, for more information.
      Beginning a transaction also causes table locks acquired with
      LOCK TABLES to be released, as
      though you had executed
      UNLOCK
      TABLES. Beginning a transaction does not release a
      global read lock acquired with FLUSH TABLES
      WITH READ LOCK.
    
For best results, transactions should be performed using only tables managed by a single transaction-safe storage engine. Otherwise, the following problems can occur:
- If you use tables from more than one transaction-safe storage engine (such as - InnoDB), and the transaction isolation level is not- SERIALIZABLE, it is possible that when one transaction commits, another ongoing transaction that uses the same tables sees only some of the changes made by the first transaction. That is, the atomicity of transactions is not guaranteed with mixed engines and inconsistencies can result. (If mixed-engine transactions are infrequent, you can use- SET TRANSACTION ISOLATION LEVELto set the isolation level to- SERIALIZABLEon a per-transaction basis as necessary.)
- If you use tables that are not transaction-safe within a transaction, changes to those tables are stored at once, regardless of the status of autocommit mode. 
- If you issue a - ROLLBACKstatement after updating a nontransactional table within a transaction, an- ER_WARNING_NOT_COMPLETE_ROLLBACKwarning occurs. Changes to transaction-safe tables are rolled back, but not changes to nontransaction-safe tables.
      Each transaction is stored in the binary log in one chunk, upon
      COMMIT. Transactions that are
      rolled back are not logged.
      (Exception: Modifications to
      nontransactional tables cannot be rolled back. If a transaction
      that is rolled back includes modifications to nontransactional
      tables, the entire transaction is logged with a
      ROLLBACK
      statement at the end to ensure that modifications to the
      nontransactional tables are replicated.) See
      Section 7.4.4, “The Binary Log”.
    
      You can change the isolation level or access mode for transactions
      with the SET TRANSACTION statement.
      See Section 15.3.7, “SET TRANSACTION Statement”.
    
      Rolling back can be a slow operation that may occur implicitly
      without the user having explicitly asked for it (for example, when
      an error occurs). Because of this, SHOW
      PROCESSLIST displays Rolling back in
      the State column for the session, not only for
      explicit rollbacks performed with the
      ROLLBACK
      statement but also for implicit rollbacks.
        In MySQL 8.4, BEGIN,
        COMMIT, and ROLLBACK are
        not affected by --replicate-do-db
        or --replicate-ignore-db rules.
      When InnoDB performs a complete rollback of a
      transaction, all locks set by the transaction are released. If a
      single SQL statement within a transaction rolls back as a result
      of an error, such as a duplicate key error, locks set by the
      statement are preserved while the transaction remains active. This
      happens because InnoDB stores row locks in a
      format such that it cannot know afterward which lock was set by
      which statement.
    
      If a SELECT statement within a
      transaction calls a stored function, and a statement within the
      stored function fails, that statement rolls back. If
      ROLLBACK is
      executed for the transaction subsequently, the entire transaction
      rolls back.