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在事务开始时记录当前的序列号,这样在该查询事务内,多次查询都是查记录的序列号之前的数据,所以不会重复,保证前后多次查询的数据一致。

扫描二维码关注公众号,回复: 6724811 查看本文章

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

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

猜你喜欢

转载自www.cnblogs.com/3chi/p/11133052.html
今日推荐