SET [GLOBAL | SESSION] TRANSACTION
    transaction_characteristic [, transaction_characteristic] ...
transaction_characteristic: {
    ISOLATION LEVEL level
  | access_mode
}
level: {
     REPEATABLE READ
   | READ COMMITTED
   | READ UNCOMMITTED
   | SERIALIZABLE
}
access_mode: {
     READ WRITE
   | READ ONLY
}
      This statement specifies
      transaction
      characteristics. It takes a list of one or more characteristic
      values separated by commas. Each characteristic value sets the
      transaction isolation
      level or access mode. The isolation level is used for
      operations on InnoDB tables. The
      access mode specifies whether transactions operate in read/write
      or read-only mode.
    
      In addition, SET TRANSACTION can
      include an optional GLOBAL or
      SESSION keyword to indicate the scope of the
      statement.
        To set the transaction isolation level, use an
        ISOLATION LEVEL
         clause. It is not
        permitted to specify multiple levelISOLATION LEVEL
        clauses in the same SET
        TRANSACTION statement.
      
        The default isolation level is
        REPEATABLE READ. Other
        permitted values are READ
        COMMITTED, READ
        UNCOMMITTED, and
        SERIALIZABLE. For information
        about these isolation levels, see
        Section 17.7.2.1, “Transaction Isolation Levels”.
        To set the transaction access mode, use a READ
        WRITE or READ ONLY clause. It is
        not permitted to specify multiple access-mode clauses in the
        same SET TRANSACTION statement.
      
        By default, a transaction takes place in read/write mode, with
        both reads and writes permitted to tables used in the
        transaction. This mode may be specified explicitly using
        SET TRANSACTION with an access
        mode of READ WRITE.
      
        If the transaction access mode is set to READ
        ONLY, changes to tables are prohibited. This may
        enable storage engines to make performance improvements that are
        possible when writes are not permitted.
      
        In read-only mode, it remains possible to change tables created
        with the TEMPORARY keyword using DML
        statements. Changes made with DDL statements are not permitted,
        just as with permanent tables.
      
        The READ WRITE and READ
        ONLY access modes also may be specified for an
        individual transaction using the
        START
        TRANSACTION statement.
You can set transaction characteristics globally, for the current session, or for the next transaction only:
- With the - GLOBALkeyword:- The statement applies globally for all subsequent sessions. 
- Existing sessions are unaffected. 
 
- With the - SESSIONkeyword:- The statement applies to all subsequent transactions performed within the current session. 
- The statement is permitted within transactions, but does not affect the current ongoing transaction. 
- If executed between transactions, the statement overrides any preceding statement that sets the next-transaction value of the named characteristics. 
 
- Without any - SESSIONor- GLOBALkeyword:- The statement applies only to the next single transaction performed within the session. 
- Subsequent transactions revert to using the session value of the named characteristics. 
- The statement is not permitted within transactions: - mysql> START TRANSACTION; Query OK, 0 rows affected (0.02 sec) mysql> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; ERROR 1568 (25001): Transaction characteristics can't be changed while a transaction is in progress
 
        A change to global transaction characteristics requires the
        CONNECTION_ADMIN privilege (or
        the deprecated SUPER privilege).
        Any session is free to change its session characteristics (even
        in the middle of a transaction), or the characteristics for its
        next transaction (prior to the start of that transaction).
      
        To set the global isolation level at server startup, use the
        --transaction-isolation=
        option on the command line or in an option file. Values of
        levellevel for this option use dashes
        rather than spaces, so the permissible values are
        READ-UNCOMMITTED,
        READ-COMMITTED,
        REPEATABLE-READ, or
        SERIALIZABLE.
      
        Similarly, to set the global transaction access mode at server
        startup, use the
        --transaction-read-only option.
        The default is OFF (read/write mode) but the
        value can be set to ON for a mode of read
        only.
      
        For example, to set the isolation level to
        REPEATABLE READ and the
        access mode to READ WRITE, use these lines in
        the [mysqld] section of an option file:
      
[mysqld]
transaction-isolation = REPEATABLE-READ
transaction-read-only = OFF
        At runtime, characteristics at the global, session, and
        next-transaction scope levels can be set indirectly using the
        SET TRANSACTION statement, as
        described previously. They can also be set directly using the
        SET
        statement to assign values to the
        transaction_isolation and
        transaction_read_only system
        variables:
- SET TRANSACTIONpermits optional- GLOBALand- SESSIONkeywords for setting transaction characteristics at different scope levels.
- The - SETstatement for assigning values to the- transaction_isolationand- transaction_read_onlysystem variables has syntaxes for setting these variables at different scope levels.
        The following tables show the characteristic scope level set by
        each SET TRANSACTION and
        variable-assignment syntax.
Table 15.9 SET TRANSACTION Syntax for Transaction Characteristics
| Syntax | Affected Characteristic Scope | 
|---|---|
| SET GLOBAL TRANSACTION
               | Global | 
| SET SESSION TRANSACTION
               | Session | 
| SET TRANSACTION
               | Next transaction only | 
Table 15.10 SET Syntax for Transaction Characteristics
| Syntax | Affected Characteristic Scope | 
|---|---|
| SET GLOBAL  | Global | 
| SET @@GLOBAL. | Global | 
| SET PERSIST  | Global | 
| SET @@PERSIST. | Global | 
| SET PERSIST_ONLY  | No runtime effect | 
| SET @@PERSIST_ONLY. | No runtime effect | 
| SET SESSION  | Session | 
| SET @@SESSION. | Session | 
| SET  | Session | 
| SET @@ | Next transaction only | 
It is possible to check the global and session values of transaction characteristics at runtime:
SELECT @@GLOBAL.transaction_isolation, @@GLOBAL.transaction_read_only;
SELECT @@SESSION.transaction_isolation, @@SESSION.transaction_read_only;