zoukankan      html  css  js  c++  java
  • mysql事务隔离级别

    准备命令:

    //查看隔离级别

    select @@global.tx_isolation, @@tx_isolation; 

    //修改当前会话隔离级别

    set session tx_isolation='read-uncommitted';

    set session tx_isolation='read-committed';

    set session tx_isolation='repeatable-read';

    Read Uncommitted

    在两个会话执行如下操作,

    会话一:未提交 

    会话二:可以看到未提交的结果

    Read Committed

    修改会话隔离级别如上(略)

    会话一:第一步,开启事务,查询数据

    会话二:第一步,开启事务,更新数据,但不提交

    会话一:第二步,在同一事务下,再次执行查询,看不到会话二未提交的数据

    当会话二提交后,会话一方可看到修改后的结果。

    但会出现"不可重复读",如下:

    会话一:开启事务,先执行第一次查询

    会话二:开启事务,执行update操作并提交

    会话一:保持之前开启的事务,执行第二次查询,和第一次的结果不一样,查询到了中间会话二提交的内容(行级锁,不锁间隙)

    Repeatable Read(可重读)

    解决"可重复读"

    会话一:开启事务,先执行第一次查询

    会话二:开启事务,执行update操作并提交

    会话一:保持之前开启的事务,执行第二次查询,和第一次的结果一样,查询不到中间会话二提交的内容(行级锁且是锁间隙)

    如下:

    幻读:指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行时,会发现有新的“幻影” 行。

    InnoDB和Falcon存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)机制解决了该问题。

    Serializable(可串行化) 

  • 相关阅读:
    DTO vs. Assembly(转载)
    DDD:整理了一些关于验证方面的文章
    幸福框架:模块化开发
    .NET:异常以及异常处理框架探析(转载)
    Azure 基础:Queue Storage
    Azure 基础:File Storage
    Azure 基础:Blob Storage
    Azure 基础:Table storage
    用 IIS 搭建 mercurial server
    Azure 基础:使用 powershell 创建虚拟网络
  • 原文地址:https://www.cnblogs.com/liuxinan/p/5532926.html
Copyright © 2011-2022 走看看