浅谈MySQL隔离级别

隔离级别:

在SQL标准中定义了四种隔离级别,每一种都规定了一个事务中所做的修改,哪些在事务内和事务间是可见的,哪些是不可见的,较低的隔离通常可以执行更高的并发,系统的开销也更低

Read Uncommitted(未提交读):

在Read Uncommitted 级别, 事务的修改,即使没有提交,对其它事务也是可见的,事务可以读取为提交的数据,这也被称为脏读,这个级别会导致出现很多问题,从性能上来说,Read Uncommitted不会比其它级别的好很多,但却缺乏其它级别的很多好处。所以一般很少人会去使用

Read Committed(提交读,不可重复读):

在Read Committed级别,一个事务从开始到提交之前,所作的所有修改对其他事务是不可见的,这个级别有时候也被称作不可重复读,这是大多数数据库系统的默认隔离级别(MySQL不是)

Repeatable Read(可重复读)

Repeatable Read解决了脏读的问题,该级别保证了在同一事务中多次读取相同的记录是一致的,但是理论上,可重复读还是无法解决另一个幻读的问题,所谓幻读,指的是当某个事务在读取的某个范围内的记录是,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围内的记录时,另一个事务又在该范围内插入了新的记录,当之前的事务在读取该范围的记录时,会产生幻行,InnoDB存储引擎通过多版本并发控制解决了幻读的问题 , (可重复读是MySQL默认隔离级别

Serializable可串行化

最高的隔离级别,通过强制事务串行执行,避免了前面说的幻读的问题,简单来说,可串行化会在读取的每一行数据上面都加上锁,所以可能会导致大量的超时和锁争用的问题, 只有在非常需要数据一致性并且可以接受低并发的情况下,才采用该级别

猜你喜欢

转载自blog.csdn.net/qq_31967241/article/details/107608429