• 隔离级别参数transaction_isolation


    隔离级别参数transaction_isolation

    • 读未提交是指,一个事务还没提交时,它做的变更就能被别的事务看到。
    • 读提交是指,一个事务提交之后,它做的变更才会被其他事务看到。
    • 可重复读是指,一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然在可重复读隔离级别下,未提交变更对其他事务也是不可见的。
    • 串行化,顾名思义是对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。

    read-uncommitted:读未提交,允许脏读;

    read-committed:读提交,不允许脏读,但允许不可重复读;

    repeatable-read:可重复读,不允许脏读、不可重复读,但允许幻读;???

    serializable:串行化,以上都不允许。

    该参数在 mysql 命令行直接动态修改时使用的参数名称是tx_isolation='repeatable-read',必须有中杠连接并带有引号。
    该参数在 my.cnf 的[mysqld]标签下使用的参数名称是transaction_isolation=repeatable-read,必须有中杠连接,引号可有可无。
    该参数也可以使用类似语句 set transaction isolation levelrepeatable read;来间接修改,且不带中杠也不带引号,隔离级别关键字之间是使用空格隔开。
    动态修改隔离级别时,带 global 关键字的语句表示对后来的会话生效,对当前会话不生效,带 session 关键字的语句表示立即对当前会话生效,不带 global 和 session 关键字的表示对当前会话的下一个事务或者说下一个请求生效。注意:使用 begin 或start transaction 语句显式开启一个事务之后,不能在活跃的事务内更改隔离级别。这些关键字的作用范围与修改配置参数时效果是一样的。
    全局,会话,动态变量,枚举类型,默认值为 repeatable-read。
    注意:该参数有个比较尴尬的地方,即在 my.cnf 中只能写作transaction_isolation(这个是 mysqld 的启动选项,但非server system variables),不能写成 tx_isolation(这个是server system variables 但非启动选项),但是在命令行中只能使用 tx_isolation,不能使用 transaction_isolation。

    0 --> 读未提交 (READ-UNCOMMITTED)

    1 --> 读已提交 (READ-COMMITTED)

    2 --> 可重复读 (REPEATABLE-READ)

    3 --> 序列化 (SERIALIZABLE)

    设置隔离级别的方法是:

    SET [SESSION|GLOBAL] transaction_isolation=[0|1|2|3];

    查看隔离级别的方法是:

    SHOW [GLOBAL] VARIABLES LIKE 'transaction_isolation';

  • 相关阅读:
    MVC模式 与 Model2模型 介绍
    通过Servlet获取初始化参数
    《算法竞赛入门经典》学习笔记 2.3 文件操作
    《C++ Primer Plus》学习笔记 2.1.1 main()函数
    Codeforces Round #359 (Div. 2) C. Robbers' watch 搜索
    Github Pages建立个人博客
    《算法竞赛入门经典》第一章 程序设计入门 习题
    《C++ Primer Plus》学习笔记 第1章 预备知识
    在C#代码中应用Log4Net(一)简单使用Log4Net
    NHibernate实例
  • 原文地址:https://www.cnblogs.com/uphold/p/15178127.html
Copyright © 2020-2023  润新知