事物的特性:
- 原子性
:事物是一个不可分割的工作单位,事物中的操作要么都发生,要么都不发生 - 一致性
:事物前后数据的完整性必须保持一致 - 隔离性
:多个用户并发访问数据库时,一个用户的事物不能被其他用户的事物所干扰,多个并发事物之间的数据要相互隔离 - 持久性
:事物一旦提交,数据就被保存到数据库里面
不考虑隔离会导致 脏度、不可重复读、幻读
名称 | 说明 |
---|---|
脏读 | 一个事物读取了另一个事物改写但还未提交的数据,如果这些数据被混滚,则读取到的数据是无效的 |
不可重复读 | 在同一事物中,多次读取统一数据返回的结果有所不同 |
幻读 | 一个事物读取了几行记录后,另一个事物插入一些记录,幻读就发生了,在后来查询中,第一个失去就会发现原来没有的记录 |
隔离级别 | 说明 |
---|---|
DEFAULT | 使用数据库默认的级别(mysql默认REPEATABLE_READ) |
READ_UNCOMMITED | 允许你读取还未提交的改变了的数据,可能导致脏读,不可重复读,幻读 |
READ_COMMITED | 允许在并发实物已经提交后读取。可防止脏读,但幻读和不可重复读仍可发生 |
REPEATABLE_READ | 对相同字段的多次读取是一致的除非数据被食物本身改变。可防止脏、不可重复读,但幻读仍有可能发生 |
SERIALIZABLE | 完全服从ACID的隔离级别,确保不发生脏,幻,不可重复读,这在所有的隔离级别是最慢的,他是典型的通过完全锁定在事物中涉及的数据表来完成的 |
事物的传播行为
解决业务层之间相互调用的行为
事物传播类型 | 说明 |
---|---|
PROPAGATION_REQUIED | 支持当前事物,如果不存在就新建一个 |
PROPAGATION_SUPPORTS | 支持当前事物如果不存在就不使用事物 |
PROPAGATION_MANDATORY | 支持当前事物,如果不存在抛出异常 |
PROPAGATION_REQUIRES_NEW | 如果有事物存在,挂起当前事物,创建一个新的事物 |
PROPAGATION_NOT_SUPPORTED | 以非事物方法运行 ,如果有事物存在,挂起当前事物 |
PROPAGATION_NEVER | 以非实物方式运行,如果有事物存在,抛出异常 |
PROPAGATION_NESTED | 如果当前事物存在,则嵌套事务 |
网友评论