首页 > 代码库 > 事务的并发处理

事务的并发处理

事务特性:

acid

automic :原子性

consistent:一致性

itegrity:隔离性

durability:持久性

1、一致性:将事务中所做的操作捆绑成一个原子单元,即对于事务所进行的数据修改等操作,要么全部执行,要么全部不执行。

2、原子性:事务在完成时,必须使所有的数据都保持一致状态,而且在相关数据中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构都应该是正确的。

3、隔离性:由并发事务所做的修改必须与任何其他事务所做的修改相隔离。事务查看数据时数据所处的状态,要么是被另一并发事务修改之前的状态,要么是被另一并发事务修改之后的状态,即事务不会查看由另一个并发事务正在修改的数据。这种隔离方式也叫可串行性。

4、持久性:事务完成之后,它对系统的影响是永久的,即使出现系统故障也是如此。

 

并发导致的问题:

1.脏读

读了其他事务未提交的数据,中间可能有事务回滚的情况,在读取数据的过程中,有其他事务回滚了该数据。

2.不可重复读

在同一个事务里,两次读取的数据不一致,在读取数据的过程中,有其他事务更新了该数据。

3.幻读:

在读取数据的过程中,有其他事务插了一条新的数据。

事务的隔离级别

mysql查看事务的隔离级别:select @@tx_isolation 

详见:16 [个人补充知识点]在Spring中定义了5中不同的事务隔离级别

为了保证效率的高效采用read commited 但是这样不能保证不可重复读的问题,为此我们用悲观锁,乐观锁

依赖于数据库的

悲观锁:直接加锁,知道处理完成。

乐观锁:先执行,后检查是否对所操作的数据有改动。