事务:一般是指要做的事或所做的事,在计算机语言中是指访问并可能更新数据库中各数据项的程序执行单元;
事务的四大特性:
原子性:事务有多个操作单元完成,所有操作单元都成功,事务成功,反之事务则回滚;
一致性:在事务执行之前与执行之后,数据库的完整性约束不被破坏(这句话我不太理解);
说说自己的看法:在事务执行前后,结果符合自己设定的条件,就认为保持了一致性;
参考:https://blog.csdn.net/u013738122/article/details/84677124
隔离性:多并发访问中,各事务之间互不影响;
持久性:事务一旦发生并提交,数据将永久存储;
事务的隔离级别:
读未提交(Read uncommitted)
读以提交(Read committed)
可重复读(Repeatable read)
序列化(Serialize)
事务的七大传播行为:
事务传播行为类型 | 说明 |
---|---|
PROPAGATION_REQUIRED | 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。 |
PROPAGATION_SUPPORTS | 支持当前事务,如果当前没有事务,就以非事务方式执行。 |
PROPAGATION_MANDATORY | 使用当前的事务,如果当前没有事务,就抛出异常。 |
PROPAGATION_REQUIRES_NEW | 新建事务,如果当前存在事务,把当前事务挂起。 |
PROPAGATION_NOT_SUPPORTED | 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 |
PROPAGATION_NEVER | 以非事务方式执行,如果当前存在事务,则抛出异常。 |
PROPAGATION_NESTED | 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。 |
spring 一般开启的就是PROPAGATION_REQUIRED。
其实这个定义刚开始看的时候,一点我都看不懂;
推荐个能够加强传播行为理解的文章:https://segmentfault.com/a/1190000013341344?utm_source=tag-newest