事务的隔离性就是指,多个并发的事务同时访问一个数据库时,一个事务不应该被另一个事务所干扰,每个并发的事务间要相互进行隔离。
事务的并发问题:
1.脏读,读取了其他事务未提交的数据
2.不可重复读,A事务,第一次读取数据后,B事务更新了数据(update),A事务再次读取数据不一致
3.幻读,A事务,第一次读取数据后,B事务新增或删除了数据(create、delete),A事务再次读取数据不一致
为了解决事务的并发问题,数据库提供了4种事务隔离级别。
1.读未提交(Read Uncommitted),可以读到未提交的内容,无法避免脏读、不可重复读、幻读
2.读提交(Read Committed),就是只能读到已经提交了的内容,使用的“快照读”,可避免脏读,无法避免不可重复读、幻读
3.可重复读(Repeated Read),使用的“快照读”,但是,和“读提交”不同的是,当事务启动时,就不允许进行“修改操作(Update)”了,可避免脏读、不可重复读,无法避免幻读
4.串行化(Serializable),事务“串行化顺序执行”,也就是一个一个排队执行,可避免脏读、不可重复读、幻读,但执行效率差,性能开销大。
MySQL默认为repeatable-read,Oracle、SQL Server默认为Read Committed