mysql隔离级别的学习分享
看了一下视频然后总结了一下。
隔离级别主要有
读未提交,这会出现脏读
读已提交,这回出现不可重复读,也就是拿到不同的数据在一个事务里面。
可重复读,解决不可重复读,但是会有幻读的情况。
虽然mysql使用可重复读的隔离级别,但是它使用了快照读和mvcc解决了幻读问题。
第四个就是最高级别了,串行化。这个性能有点低,但是非常安全。
那么总的来说就是有
1:Read Uncommited(脏读)
事务1开启 我们都知道mysql事务准寻acid特性,所以事务1开启以后里面的东西只要是查询应该是不会改变的。
那么首先事务1进行了数据的修改,然后事务二上来进行数据的查询,拿到了事务一的数据,但是事务一发生故障回滚了。从而发现事务二读取到的东西是事务一回滚前的数据,脏读数据就出现了。
简而言之:事务1没有提交事务,但是事务二获取到事务一没有提交事务之前的数据,也就是脏读。
2:Read Commited(不可重复读)
我感觉不可重复读有点不好理解,应该把他写成同一操作拿到不同数据。这样就好理解了。
由于事务一第一次读取数据是正常的,但是事务二进行了数据的修改并且提交,那么事务一在进行数据的读取拿到的数据就已经被修改了,所以就出现了问题,也就是不可重复读。
3:Repeatable Read(幻读)
可重复读,也就是拿到了一样的数据,保证了事务的一致性。
一样的数据指的是修改数据内容。而不是数据的数量。
比如说update 多事务进行更改然后查询没有问题。
但是insert这种进行行数修改的,可能就会出现幻读的情况。
所以我们区分与幻读和可重复读,幻读用的是数据行数,可重复读是数据内容。
4:串行化
全部解决,但是花销比较大。