Spring事务:
事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败。
事务四大特性ACID:
原子性 (Atomicity 英 /,ætə’mɪsɪtɪ/ ):强调事务的不可分割。
一致性 (Consistency /kən’sɪst(ə)nsɪ/ ):事务执行前后,数据完整性保持一致。
隔离性 (Isolation 英 /aɪsə’leɪʃ(ə)n/):事务执行过程中,不受到其他事务干扰。
持久性(Durability /,djʊrə’bɪləti/ ) :事务一旦结束,数据就持久到数据库。
事务并发操作带来的安全性问题:
脏读 :一个事务读到另一个事务的未提交数据。
不可重复读 :一个事务读到另一个事务已提交的update数据,导致多次查询结果不一致。
虚幻读 :一个事务读到了另一个事务已提交的insert数据,导致多次查询结果不一致。
丢失更新: 一个事务的更新覆盖了另一个事务的更新。
解决读问题: 设置事务的4种隔离级别,由低到高依次为:
未提交读(read uncommitted):最低的事务隔离级别,允许另一事务看到此事务未提交的数据。脏读,不可重复读,虚读都有可能发生。
已提交读 (read committed /kə’mɪtɪd/):Sql Server、Oracle默认的隔离级别,保证一个事物提交后才能被另一个事务读取。避免脏读,但不可重复读和虚读有可能发生。
可重复读 (repeatable read /rɪ’pitəbl/ ) :Mysql 默认的隔离级别,避免脏读和不可重复读,但虚读有可能发生。
串行化(serializable [ˈsɪərɪəlaɪzəbl]) :事务被处理为顺序执行,最高事务隔离级别,代价也高。避免以上所有读问题。
DEFAULT 是一个PlatfromTransactionManager (平台编程式事务管理器)默认的隔离级别,使用数据库默认的事务隔离级别。
事务的七大传播行为
PROPAGION_XXX :事务的7种传播行为
* 保证同一个事务中
PROPAGATION_REQUIRED 支持当前事务,如果不存在 就新建一个(默认)
PROPAGATION_SUPPORTS 支持当前事务事务隔离级别,如果不存在,就不使用事务
PROPAGATION_MANDATORY 支持当前事务,如果不存在,抛出异常
* 保证不在同一个事务中
PROPAGATION_REQUIRES_NEW 如果有事务存在事务隔离级别,挂起当前事务,创建一个新的事务
PROPAGATION_NOT_SUPPORTED 以非事务方式运行,如果有事务存在,挂起当前事务
PROPAGATION_NEVER 以非事务方式运行,如果有事务存在,抛出异常
PROPAGATION_NESTED 如果当前事务存在,则嵌套事务执行,前提是数据库支持才行。
限时特惠:本站每日持续更新海量设计资源,一年会员只需29.9元,全站资源免费下载
站长微信:ziyuanshu688