zoukankan      html  css  js  c++  java
  • mysql隔离级别相关

    1.原子性、隔离性、一致性、持久性

    2.mysql并发控制可能出现的问题:

    脏读(A事务读取到B事务未commit的数据后,B事务回滚)

    不可重复读(A事务第一次读到的数据,被B事务更新数据后,第二次读到的数据跟第一次的不一致)

    幻读(A事务第一次读取的列表后,B事务新增或者删除掉后,A事务第二次的列表跟第一次不一致)

    3.事务隔离级别:串行、读未提交(ru)、读已提交(rc,会有幻读、不可重复读)、可重复读(rr,幻读)

    4.可重复读隔离级别下,解决幻读的方式:快照读【不加锁,普通的select】用mvcc机制,当前读【加锁,通过间隙锁解决幻读】。

    5.

    • 快照读:简单的select操作,属于快照读,不加锁。(当然,也有例外,下面会分析)
      • select * from table where ?;
    • 当前读:特殊的读操作,插入/更新/删除操作,属于当前读,需要加锁。
      • select * from table where ? lock in share mode;
      • select * from table where ? for update;
      • insert into table values (…);
      • update table set ? where ?;
      • delete from table where ?;

      所有以上的语句,都属于当前读,读取记录的最新版本。并且,读取之后,还需要保证其他并发事务不能修改当前记录,对读取记录加锁。其中,除了第一条语句,对读取记录加S锁 (共享锁)外,其他的操作,都加的是X锁 (排它锁)。

    6.mvcc机制:有表后加两个隐形的字段:一个是创建时间,一个是删除时间(都只是一个序列号),insert和delete新增创建时间,select在事务开始时记录当前的序列号,这样在该查询事务内,多次查询都是查记录的序列号之前的数据,所以不会重复,保证前后多次查询的数据一致。

    7.for update如果where条件后主键或者索引,锁的是行,否则锁的是表

    8.mysql有两种读:快照读和当前读。

  • 相关阅读:
    n!末尾有几个零
    NYOJ 14(会场安排)
    使用dynamic来简化反射实现,并且提高了性能。
    VB.NET 、Java 与 C# 语法对比。
    你不得不使用的XML代码生成器,那就是XmlFactory
    C# 和vb.net事件
    SQL Server 2008中的hierarchyid
    系统架构师基础到企业应用架构客户端/服务器
    Asp.Net在IIS上运行不了,就试下下面方法应该可以你的问题
    为你的博客添加几分色彩
  • 原文地址:https://www.cnblogs.com/3chi/p/11133052.html
Copyright © 2011-2022 走看看