事务的传播行为,有以下六种:
1. REQUIRED(或者已处于事务,或者新建一个事务)
2. MANDATORY(要求在已存在事务中执行,否则抛出例外)
3. NEVER(绝对不能在事务范围内执行,否则抛出例外)
4. SUPPORTS(可在事务范围中执行,也可不在事务范围中执行,不硬性要求)
5. NOT_SUPPORTED(不需要事务,如果在事务范围内被调用,则原有事务被挂起,直到该方法调用结束,事务才会恢复执行)
6. NESTED(如果一个活动的事务存在,则运行一个嵌套的事务中,如果没有活动事务,则按REQUIRED属性执行.它使用了一个单独的事务,这个事务多个可以回滚的保存点。内部事务的回滚不会对外部事务造成影响)
事务的隔离级别:
1. Read Uncommited(读未提交数据)会出现脏读,不可重复读,幻读
2. Read Commited(读已提交数据)会出现不可重复读和幻读
3. Repeateable Read(可重复读)会出现幻读
4. Serializable(串行化)
脏读:一个事务读取到另一个事务未提交的更新数据。如A,B事务同时进行中,B事务对数据有未提交的更改,这时A如果恰好也操作同样数据就会读到未提交的数据,当B最终未对数据更改提交的话,A的操作就是错的数据。
不可重复读:在同一个事务中,多次读取同一数据返回的结果有所不同。A事务读取二次读取数据,在二次读取间隔时B事务对该数据进行了修改,这时得到数据就和第一次不同了。但人们在日常操作时,往往需要两次读取的数据是一样的,可以通过类似快照这种技术来实现。
幻读:一个事务读取到另一个事务已提交的insert数据。