事务传播行为类型
说明
PROPAGATION_REQUIRED [ˌprɔpəˈgeɪʃən]传输
[rɪˈkwaɪəd]必须
如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。
PROPAGATION_SUPPORTS[səˈpɔ:t]支持
支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY[ˈmændəˌtɔ:ri:, -ˌtəʊri:]受委托的
使用当前的事务,如果当前没有事务,就跑出异常
PROPAGATION_REQUIRES_NEW
新建事务,如果当前存在事务,把当前事务挂起
PROPAGATION_NOT_SUPPORTED
以非事务方式执行操作,如果当前存在事务,把当前事务挂起。
PROPAGATION_NEVER
以非事务方式执行,如果当前存在事务,则跑出异常
PROPAGATION_NESTED
如果当前存在事务,则在嵌套事务内执行,如果当前没有事务,则执行PROPAGATION_REQUIRED类似的操作(jdbc3.0以后才有)
数据库并发操作存在的异常情况
1、更新丢失:并发事务没隔离,一个失败导致另外一个事务也失败。
2、脏读去:一个事务开始读取了某行数据但是另外一个事务已经更新了此数据但没有能够及时提交。
3、不可重复读:一个事务对同一行数据读取两次却得到不同的结果。例如读取途中令一个事务对该数据进行了修改。
4、两次更新问题:两个并发事务同时读取同一行数据,两个都进行修改提交,第一次写操作失效。
5、幻读:一次事务中,两次读取同一个表,结果集不一样。
SQL规范定义的四种事务隔离级别
1、未授权读取(Read Uncommitted):称未提交读。允许脏读但不允许更新丢失,如果一个事务已经开始写数据,则另外一个事务部允许同时进行写操作,但允许读。可通过排它锁实现。允许读取已经被其它用户修改但尚未提交确定的数据。
2、授权读取(Read Committed):也称提交读。允许不可重复读取但不允许脏读取。
3、可重复读(Repeatable Read):禁止不可重复读取和脏读取。
4、串行(Serializable):也称可串行读。提供严格的事务隔离级别,要求事务序列化执行,事务只能一个接一个的执行,不能并发执行。