事务:数据库最小的执行单元,不可分割的一组操作,保证一组业务操作数据完整性的保障机制。
ACID:
A (Atomic)原子性密不可分,一同成功或者失败
I (Isolated) 隔离性,确保事务之间不会产生干扰。
分为四个隔离级别:
读未提交 最低 没有解决任何事务问题
读提交 解决了脏读的问题(一个事务读取到另一个事务未提交的记录) oracle的默认隔离界别
不可重复读 行级锁 解决了重复读问题 (一个事务多次读取同一条记录,结果不一样,最经典的例子查询加for update 查询事务提交之前不可改)
序列化读 表级锁 解决了幻影读的问题(一个事务多次读取结果条目不一的问题)
C (Consistent) 一致性 最简单的例子就是转账问题 A账户转出B 100元 在A扣除100的前提下B必须增加100来保证数据库的
整体一致性
D (Durable)持久性: 一旦一个事务被提交,它应该持久保存,不会因为和其他操作冲突而取消这个事务。很多人认为这意味着事 务是持久在磁盘上,但是规范没有特别定义这点。
事务传播属性(Propagation):涉及多个事务的嵌套(Service中方法调用Service中方法),可能会存在问题。
i). REQUIRED:如果不存在外部事务,则开启新事务;如果存在外部事务,则合并到外部事 务中。 (增删改)
ii). SUPPORTS:如果不存在外部事务,也不开启新事务;如果存在外部事务,则合并到外部事务中。(查询)
事务读写属性(read-only):
i). true:只读,可提高运行效率。
ii). false:可写可读,默认值。