什么是数据库的并发问题:
数据库并发产生的五个问题:
1、脏读:一个事务读到另一事务未提交的更新数据。
2、虚读:一个事务读到另一事务已提交的新插入的数据。
3、不可重复读:一个事务读到另一事务已提交的更新数据。
4、第一类丢失更新:撤销一个事务时,把其他事务已提交的更新数据覆盖。
5、第二类丢失更新:这是不可重复读中的特例,一个事务覆盖另一事务已提交的更新数据。
为了解决以上的一些问题,每个数据库都有隔离级别这样一个概念。
什么是隔离级别:
有以下五种隔离级别:(在数据库的四种隔离级别中都可以解决的一个问题就是第一类丢失更新)
Serializable:可以解决以上5个问题,使以上五个问题都不会出现。
Repeatable Read(可重复读): 在一个事务内进行多次数据查询时,保证多次查询的结果是一致的.
Read Commited(提交读):在一个事务中,发出的SQL语句对数据进行了操作并提交后,其它事务才可以查询到操作后的数据。
在脏读这个问题中,A事务不可以读取到B事务未提交的更改,所以可以解决脏读的问题。对于虚读/不可重复读/第二类丢失更新的问题,由于B事务的操作已提交,所以A事务依然可以查询到B事务所操作的数据,因此虚读/不可重复读/第二类丢失更新的问题不能解决。
Read Uncommited(未提交读):在一个事务中,只要发出了SQL语句对数据进行了操作而未提交,其它事务均可马上查询到操作后的数据,所以这种隔离级别并不能解决其它四个问题。