暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL的SQL语句 -事务性语句和锁定语句(6)- SET TRANSACTION 语句

数据库杂货铺 2021-04-12
899
SET TRANSACTION 语句
 
    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
    }
     
    此语句指定事务特性。它接受由逗号分隔的一个或多个特性值的列表。每个特性值设置事务隔离级别或访问模式。隔离级别用于对 InnoDB 表的操作。访问模式指定事务是以读/写还是只读模式运行。
     
    此外,SET TRANSACTION 可以包含可选的 GLOBAL SESSION 关键字来指示语句的范围。
     
    事务隔离级别
     
    要设置事务隔离级别,请使用 ISOLATION LEVEL 层级子句。不允许在同一 SET TRANSACTION 语句中指定多个 ISOLATION LEVEL 子句。
     
    默认的隔离级别是 REPEATABLE READ。其他允许的值有 READ COMMITTEDREAD UNCOMMITTED SERIALIZABLE
     
    事务访问模式
     
    要设置事务访问模式,请使用 READ WRITE 或 READ ONLY 子句。不允许在同一 SET TRANSACTION 语句中指定多个访问模式子句。
     
    默认情况下,事务以读/写模式进行,同时允许对事务中使用的表进行读写操作。可以使用指定 READ WRITE SET TRANSACTION 显式指定此访问模式。
     
    如果事务访问模式设置为 READ ONLY,则禁止更改表。这可能使存储引擎能够在不允许写入时进行性能改进。
     
    在只读模式下,仍然可以使用 DML 语句更改用 TEMPORARY 关键字创建的表。与永久表一样,不允许使用 DDL 语句更改。
     
    也可以使用 START TRANSACTION 语句为单个事务指定 READ WRITE READ ONLY 访问模式。
     
    事务特性范围
     
    可以设置事务特性全局有效,仅限于当前会话,或仅限于下一个事务:
     
    ● 使用 GLOBAL 关键字:
     
    ■ 该语句在全局范围内适用于所有后续会话。
     
    ■ 现有会话不受影响。
    ● 使用 SESSION 关键字:
     
    ■ 该语句适用于当前会话中执行的所有后续事务。
     
    ■ 在事务中允许该语句,但不影响当前正在进行的事务。
     
    ■ 如果在事务之间执行,该语句将覆盖前面任何为下一个事务设置的命名特性值的语句。
     
    ● 没有 SESSION GLOBAL 关键字:
     
    ■ 该语句仅适用于会话中执行的下一个单个事务。
     
    ■ 随后的事务将恢复为使用会话中的命名特性值。
     
    ■ 语句不允许在事务中使用:
     
      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
       
      对全局事务特性的更改需要 CONNECTION_ADMIN 权限(或不推荐使用的 SUPER 权限)。任何会话都可以自由地更改其会话特性(即使在事务中),或用于其下一个事务的特性(在该事务开始之前)。
       
      要在服务器启动时设置全局隔离级别,请在命令行或选项文件中使用 --transaction-isolation=level 选项。此选项的级别值使用破折号而不是空格,因此允许的值为 READ-UNCOMMITTEDREAD-COMMITTEDREPEATABLE-READ SERIALIZABLE
       
      类似地,要在服务器启动时设置全局事务访问模式,请使用 --transaction-read-only 选项。默认值为 OFF(读/写模式),但该值可以设置为 ON(只读模式)。
       
      例如,要将隔离级别设置为 REPEATABLE READ,将访问模式设置为 READ WRITE,请在选项文件的 [mysqld] 部分使用以下行:
       
        [mysqld]
        transaction-isolation = REPEATABLE-READ
        transaction-read-only = OFF
         
        在运行时,可以使用 SET TRANSACTION 语句间接设置全局、会话和下一事务作用域级别的特性,如前所述。也可以使用 SET 语句直接设置这些变量,将值分配给 transaction_isolation transaction_read_only 系统变量:
         
        SET TRANSACTION 允许使用可选的 GLOBAL SESSION 关键字来设置不同作用域级别的事务特性。
         
        将值赋给 transaction_isolation 和 transaction_read_only 系统变量的 SET 语句具有设置这些变量在不同范围级别的语法。
         
        下表显示了由每个 SET TRANSACTION 和变量赋值语法设置的特性范围级别。
         
        用于事务特性的 SET TRANSACTION 语法
        语法
        影响的特性范围
        SET GLOBAL TRANSACTION transaction_characteristic
        Global
        SET SESSION TRANSACTION transaction_characteristic
        Session
        SET TRANSACTION transaction_characteristic
        仅下一个事务
         
        用于事务特性的 SET 语法
        语法
        影响的特性范围
        SET GLOBAL var_name = value
        Global
        SET @@GLOBAL.var_name = value
        Global
        SET PERSIST var_name = value
        Global
        SET @@PERSIST.var_name = value
        Global
        SET PERSIST_ONLY var_name = value
        无运行时影响
        SET @@PERSIST_ONLY.var_name = value
        无运行时影响
        SET SESSION var_name = value
        Session
        SET @@SESSION.var_name = value
        Session
        SET var_name = value
        Session
        SET @@var_name = value
        仅下一个事务
         
        可以在运行时检查事务特性的全局值和会话值:
         
          SELECT @@GLOBAL.transaction_isolation, @@GLOBAL.transaction_read_only;
          SELECT @@SESSION.transaction_isolation, @@SESSION.transaction_read_only;
           
           
           
           
           
           
          官方网址:
          https://dev.mysql.com/doc/refman/8.0/en/set-transaction.html

          文章转载自数据库杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论