mysql事务隔离级别另类解释

MySQL事务隔离级别老生常谈,老是理解不到位,今天以特定的角度理解一下

1.前提:MySQL为了多用户同时操作数据时避免相互干扰所以产生了事物的隔离级别

2.有这么几种:read-uncommitted(读未提交) 、read-committed(读已提交)、read-repeated(可重复读)、serializable(串读)

我们这么理解:

将前三种种拆成两部分,每一部分表示一个事务,两部分就表示两个事务,两部分表示两种操作,当然都针对的是同一个变量,

例如

(1)read-uncommitted,可以表示为事务1正在读操作变量A=1,事务2对变量A=2的操作还未commit,事务1读取到了事务2未提交的数据A=2,想想,如果事务2在事务最后进行了回滚A=1,那事务1就会读取到没有意义的数据A=2,这就是脏读

(2)read-committed,事务1读到了事务2已经commit的数据,但是设想这么一个场景,事务1刚开始读取A=1,然后事务2将A=2commit,但是事务1还没有commit,再来读取A,就读到了A=2,这就是不可重复读,就是在一个事务1里面前后读取的数据不一致,解决这个问题的办法就是read-repeated(可重复读)

(3)read-repeated(可重复读),表示在事务1执行过程中一直读取A=1,即使事务2修改A=2commit,事务1也是读取的A=1,只有事务1也commit,事务1才读取到新的值A=2,但是设想一个场景,事务1先读取A=1,然后事务2修改A=2commit,然后事务1没有结束,后边一直使用A=1,这就是幻读,就是读取到了不真实的数据,只是幻影数据,解决这个问题的办法就是serializable(串读)

(4)串读有一个问题就是并发量不高,它通过写锁和读锁来实现并发的控制,这里就不描述了,比较简单

 

推荐一个博客,讲的比较人性化

http://blog.51cto.com/changeflyhigh/1881614

另外一个随手看到的:

https://blog.csdn.net/lpp_dd/article/details/83183816

你可能感兴趣的:(数据库,高并发)