事务的四大特性
1.原子性:执行一个事务中的多条sql语句要么全部成功要么全部失败
2.一致性:执行一个事务其中设计到的数据总量需要保持不变
3.隔离性:各个事务执行过程中是相互不可见的
4.持久性:数据修改后会保存到硬盘中不会随着系统的崩溃或者停止造成数据丢失
事务操作过程中可能会触发的错误操作
1.脏读:同一条数据先被一个事务进行修改但是未提交该事务同时另一个事务也读取了这一条数据从而造成读取的数据是不准确的
2.不可重复读:一个事务查询一条数据之后该事务进行了一些数据处理的操作后再次读取该数据,然而另一个事务则对该数据进行了修改从而造成两次数据读取不一致
避免方法:
(1) 推迟事务2的执行,直至事务1提交或者回退。这种策略在使用锁时应用。
(2)而在多版本并行控制中,事务2可以被先提交。而事务1,继续执行在旧版本的数据上。当事务1终于尝试提交时,数据库会检验它的结果是否和事务1、事务2顺序执行时一样。如果是,则事务1提交成功。如果不是,事务1会被回退
2.幻读:一个事务查询一条数据不存在从而进行了接下的的数据插入操作于此同此另一个事务插入了第一个事务想要插入的数据造成主键冲突
避免方法: 实行序列化隔离模式,在任何一个低级别的隔离中都可能会发生。
Spring设置的事务级别