MySQL事务和锁05

  官网地址:MySQL :: MySQL 5.7 Reference Manual :: 13.3.6 SET TRANSACTION Statement

欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯.

Mysql5.7参考手册  /  ...  /  集事务语句

13.3.6设定交易报表

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 levelISOLATION LEVELSET TRANSACTION

默认隔离级别是 REPEATABLE READ .其他认可值READ COMMITTED ,READ UNCOMMITTED ,以及 SERIALIZABLE .有关这些隔离级别的信息,请参阅 14.7.2.1节,"事务隔离级别" .

交易存取模式

要设置事务访问模式,请使用READ WRITE 或READ ONLY 条款。不允许在同一场合指定多个存取模式条款SET TRANSACTION 声明。

默认情况下,事务以读写方式进行,允许对事务中使用的表进行读写。此模式可明确指定使用 SET TRANSACTION 有进入模式的READ WRITE .

如果事务访问模式设置为READ ONLY )禁止更改表格。这可能使存储引擎能够在不允许写入时进行性能改进。

在只读模式下,仍然可以更改使用TEMPORARY 使用DML语句的关键词。不允许对DDL语句进行更改,就像对永久表一样。

READ WRITE 和READ ONLY 还可为使用 START TRANSACTION 声明。

交易特征范围

您可以为当前会话或下一个事务设置全局事务特性:

  • 与…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

改变全局交易特性需要 SUPER 特权。任何会话都可以自由地更改其会话特性(即使在事务的中间),或其下一个事务的特性(在事务开始之前)。

要在服务器启动时设置全局隔离级别,请使用 选项在命令行或一个选项文件中.价值观 对于这个选项,使用破折号而不是空格,所以允许值是 , , ,或 . --transaction-isolation=levellevelREAD-UNCOMMITTEDREAD-COMMITTEDREPEATABLE-READSERIALIZABLE

同样,要在服务器启动时设置全局事务访问模式,请使用 --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 在不同范围级别设置事务特性的关键词。

  • … SET 分配价值给 transaction_isolation 和 transaction_read_only 系统变量具有在不同的范围级别设置这些变量的语法。

下表显示每个系统设置的特征范围级别SET TRANSACTION 以及可变分配语法。

表13.6对事务特性的一套事务语法

语法的 受影响特征范围
SET GLOBAL TRANSACTION transaction_characteristic 全球的
SET SESSION TRANSACTION transaction_characteristic 会议
SET TRANSACTION transaction_characteristic 下一次交易
 

关于事务特性的一套语法

语法的 受影响特征范围
SET GLOBAL var_name = value 全球的
SET @@GLOBAL.var_name = value 全球的
SET SESSION var_name = value 会议
SET @@SESSION.var_name = value 会议
SET var_name = value 会议
SET @@var_name = value 下一次交易
 

可以在运行时检查事务特性的全局值和会话值:

SELECT @@GLOBAL.transaction_isolation, @@GLOBAL.transaction_read_only;
SELECT @@SESSION.transaction_isolation, @@SESSION.transaction_read_only;

在mysql5.7.20之前,使用 tx_isolation 和 tx_read_only 与其说 transaction_isolation 和 transaction_read_only .

你可能感兴趣的:(mysql,数据库)