一、事务并发会遇到的几个问题:
1)脏读 :两个事务同时操作同一数据,A事务对该数据进行了修改还没提交的时候,B事务访问了该条事务,并且使用了该数据,此时A事务回滚,那么B事务读到的就是脏数据。
比如事务1,修改了某个数据 事务2,刚好访问了事务1修改后的数据
此时事务1,回滚了操作 事务2,读到还是回滚前的数据
2) 不可重复读 :这种情况发生 在一个事务内多次读同一数据。A事务查询某条数据,该事务未结束时,B事务也访问同一数据并进行了修改。那么在A事务中的两 次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。
事务1,查询某个数据 事务2,修改了某个数据,提交
事务1,再次查询这个数据
这样事务1两次查询的数据不一样,称为不可重复读
3)幻读 : 事务A在操作一堆数据的时候,事务B插入了一条数据,A事务再次查询,发现多了一条数据,像是幻觉。与不可重复读类似,不同的是一个是修改,一个是新增或者删除。
Notice:在oracle中不会出现脏读的情况,为了防止读到更改数据(不可重复读),只需要对操作的数据加上“行级锁”,为了防止读取到新增数据( 幻读),必须加上“表级锁”,将整张表锁定!!!
4)第一类丢失更新 :A,B 事务同时操作同一数据,A先对改数据进行了更改,B再次更改时失败然后回滚,把B更新的数据也回滚了。(事务撤销造成的撤销丢失)
5)第二类丢失更新:A,B 事务同时操作同一数据,A先对改数据进行了更改,B再次更改并且提交,把B提交的数据给覆盖了。(事务提交造成的覆盖丢失)