Spring中AOP事务
事务的特性(ACID)
- 原子性:SQL语句要么全执行,要么全不执行,是事务最核心的特征;
- 一致性:一致性是指事务执行结束后,数据库的完整性没有被破坏,数据保持合法;
- 隔离性:同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰;
- 持久性:是事务的保证,事务终结的标志(内存的数据持久到硬盘文件中)。
事务并发操作问题
- 脏读:当前事务(A)中可以读到其他事务(B)未提交的数据(脏数据)。
- 不可重复读:在事务A中先后两次读取同一个数据,两次读取的结果不一样。
- 幻读:在事务A中按照某个条件先后两次查询数据库,两次查询结果的条数不同。
事务隔离性
- 读未提交(Read uncommitted):隔离级别最低的一种事务级别。在这种隔离级别下,会引发脏读、不可重复读和幻读。
- 读已提交(Read Committed):读到的都是别人提交后的值。这种隔离级别下,会引发不可重复读和幻读,但避免了脏读。(Oracle的隔离级别)
- 可重复度(Repeatable Reads):这种隔离级别下,会引发幻读,但避免了脏读、不可重复读。(MySql的隔离级别)
- 串行化(Serializable):是最严格的隔离级别。在Serializable隔离级别下,所有事务按照次序依次执行。脏读、不可重复读、幻读都不会出现。