前言
了解mysql都会I知道的事务的四大特性,原子性、隔离性、一致性、持久性。隔离性又分了好几个级别,隔离性中又有三个问题,四个隔离级别就是为了解决这三个问题的。
四个隔离级别
读未提交(Read uncommitted)
读已提交(Read committed),默认值
可重复读(Repeatable Read)
串行(Serializable)
三个问题
脏读:就是两个事务,如果a中的修改未提交,b读取了,但是a遇到问题回滚了。事务b读到的数据就是脏数据。
为了解决脏读问题,可是使用RC的隔离级别,只能读到已提交的数据,解决了脏读问题。
不可重复读:就是两个并发事务,事务b在事务a提交之前读取到的数据和事务a提交之后读到的数据不同,这就是不可重复读取,可以使用对记录进行行锁定。
也可以用RR可重复读解决这个问题,在一个事务中读取到的数据是相同的。
幻读:同一个事务中读取到的数据记录数不相同,中间其他事务有新增记录。这就是幻读。
只能使用串行的隔离级别来处理这个问题,但是这个级别对就不能进行并发操作了,性能太低了。
总结
正常情况就是隔离的级别越低,锁的时间就越短,并发时性能更好。