1.事务特性ASID
1)A原子性:事务中的操作要么全部执行要么全部不执行(执行中有异常会回滚事务前状态)
2)S一致性:事务执行完毕后数据要保持一致
举例:事务执行前A、B的存款都是100,事务内容是A转账B,则事务执行完成之后,需要满足A和B的存款和还是200。
3)隔离性:不同的事物之间不会干扰
4)持久性:事务一旦提交,对数据库中数据是永久性的。
2.脏读、不可重复读、幻读
1)脏读:一个事务处理过程中,读取了另一个事务还未提交的数据。
2)不可重复读:一个事务处理过程中,对同一数据的多次查询得到不同的结果,这是由于另一个事务在多次查询间隔修改了这个数据。
3)幻读:一个事务处理过程中,读取了另一个事务新增的数据。
3.四种事务隔离级别
1)读未提交:一个事务可以读取到另外个还未提交的数据
产生问题:脏读、不可重复读、幻读
2)读已提交:一个事务可以读取到另外个已提交的数据
产生问题:不可重复读、幻读
3)可重复读:一个事务能够对同一记录进行重复性修改和读取,读取的数据始终一致(MySql的`默认事务隔离级别)
产生问题:幻读
4)串行化:多个事务以串行化Serializable
的方式运行,自然不会产生并发事务问题。
产生问题:效率特别低。
4.spring的7种事务传播机制
1) required :如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。
2)required_new : 无论当前有没有事务都会创建一个新事物
3)nested :如果当前存在事务则在嵌套内事务执行,如果没用则创建一个新事务
4)supports :如果当前存在事务,则加入该事务,如果没有事务则以非事务执行
5)not_supports :以非事务执行,如果当前存在事务,则把事务挂起
6)mandatory :如果当前存在事务,则加入该事务,如果没有则抛出异常
7)never:以非事务执行,如果当前存在事务,则抛出异常