1.事务并发处理引发的问题
事务并发访问数据库会有如下几种情况发生:
①第一类丢失更新:撤消一个事务时,把其它事务已提交的更新的数据覆盖了。
②脏读:一个事务读到另一个事务未提交的更新数据。
③幻读:一个事务执行两次查询,但第二次查询比第一次查询多出了一些数据行。
④不可重复读:一个事务两次读同一行数据,可是这两次读到的数据不一样。
⑤第二类丢失更新:这是不可重复读中的特例,一个事务覆盖另一个事务已提交的更新数据。
2.情况分析
第一种情况:第一类丢失更新:撤消一个事务时,把其它事务已提交的更新的数据覆盖了。
事务具有四个属性(ACID-A,原子性;C,一致性;I,隔离性;D,永久性),只要数据库都支持,事务之间是不可能交叉影响的,事务具有隔离性,所以不用考虑。
第二种情况:对于第二种情况,一般情况下数据库
会有一个默认的隔离级别,通过锁来实现,也不会出现,比如oracle就不支持脏读。第三种情况,业务上很少
出现,比如你要进行一些查询,一般很少查了一遍,接着又查了一遍,即便是有这种情况也不会带来“异常”后果,
多出的数据肯定是有新的业务行为发生了,所以一般也不用处理这种问题。所以一般处理并发带来的问题就是指的第
④⑤中情况,简单说就是对于同一条数据,多个事务你改我也改,或者说你改着我读