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有两种读:快照读和当前读。

  • 相关阅读:
    (转)分布式系统原理
    Java常用排序
    19.Java5同步集合类的应用
    18.Java5阻塞队列的应用
    17.Java5的Exchanger同步工具
    16.Java5的CountDownLatch同步工具
    15.Java5的CyclicBarrier同步工具
    14.Java5的Semaphere同步工具
    13.Java5条件阻塞Condition的应用
    Docker部署JavaWeb项目实战
  • 原文地址:https://www.cnblogs.com/3chi/p/11133052.html
Copyright © 2011-2022 走看看