事务并发
- 数据库中多个事务并发执行会带来哪些问题:
脏写:
如果一个事务修改了另一个未提交事务
修改过的数据,就发生了脏写
脏读:
如果一个事务读到了另一个未提交事务
修改过的数据,就发生了脏读
不可重复读:
如果一个事务只能读到另一个已经提交的事务修改过的数据,并且其他事务每对该数据进行一次修改并提交后,该事务都能查询到最新值,就发生了不可重复读
幻读:
(1)如果一个事务根据某些条件查询出一些记录,之后另一个事务又向表中插入了符合这些条件的记录,原先的事务再次安装该条件查询时,能把另一个事务插入的记录也读出来,就发生了幻读
(2)幻读强调读到了之前读取没有获取到的记录
数据库隔离级别
脏写
>脏读
>不可重复读
>幻读
- SQL标准中设立了4个
隔离级别
:未提交读
、已提交读
、可重复读
、可串行化
未提交读:
事务中发生了修改,即使没有提交,其他事务也是可见的已提交读:
对于一个事务从开始直到提交之前,所做的修改其他事务是看不见的可重复读:
对一条记录读取多次,读取结果是相同的可串行化读:
在并发的情况下,和串行化的读取结果是一致的没有什么不同
未提交读
隔离级别下,可能会发生脏读
、不可重复读
、幻读
已提交读
隔离级别下,可能会发生不可重复读
、幻读
可重复读
隔离级别下,可能发生幻读
可串行化
隔离级别下,各种问题都不可以发生