上一篇文章我们说了四种并发的问题:脏写,脏读,不可重复读,幻读。 今天这篇文章就来讲一下mysql是怎么样解决这四个问题的,也就是我们在面试和开发中常常用到的mysql的四种事物隔离级别。
这四种隔离级别分别是:
(1)Read Uncommitted(读取未提交内容)
见名知意,这个的意思就是能够读取到未提交的内容,也就是我们说的脏读,不可重复读,幻读他都不能解决,但是脏写的问题是所有事物隔离级别都解决了的,这里不再列举。
(2)Read Committed(读取提交内容)
见名知意,这个的意识就是只能读取到已经提及过的内容,也就是commit之后的内容,这个的目的就是为了解决脏读的可能性,就像我们上面的图中所说到的一样。
(3)Repeatable Read(可重读)
见名知意,可重复读就是为了解决不可重复读的问题的,关于什么叫不可重复读可以参考我上一篇文章,里面已经写的很详细了,这里就不一一赘述。 脏写,脏读,不可重复读,幻读超级详细解读
(4)Serializable(可串行化)
可串行话的目的就是为了解决幻读的可能性,这里面很复杂,用到了锁的知识,而且听名字就知道,串行加上锁,意味着他的性能是四种隔离基本中最低的,所以mysql的默认隔离级别就是Repeatable Read(可重读)
我们可以用命令行看一下:
show variables like 'transaction_isolation';
总结:
事务隔离级别是数据库系统中非常重要的一个概念,它定义了多个事务之间的隔离程度,直接关系到数据的一致性和并发性。MySQL提供了四种事务隔离级别:读未提交(read uncommitted)、读已提交(read committed)、可重复读(repeatable read)和串行化(serializable)。其中,可重复读是MySQL默认的隔离级别。
在使用MySQL进行并发读写操作时,需要根据实际情况选择不同的事务隔离级别。如果对数据一致性要求不高,可以选择读未提交或读已提交;如果对数据一致性要求较高,可以选择可重复读或串行化。但是,不同的隔离级别也会带来不同的性能损耗和锁竞争,需要根据具体情况进行权衡。
结尾:
MySQL的事务隔离级别是一个非常复杂的话题,需要结合具体的场景和需求进行选择。在实际应用中,需要根据数据的一致性要求、并发访问量、性能表现等多方面因素进行综合考虑,并做好相关的优化工作。同时,也需要注重事务的正确使用,避免由于事务处理不当导致数据异常或性能问题。