事务学习

来源:互联网 发布:梦想小镇怎么同步数据 编辑:程序博客网 时间:2024/05/23 20:27

事务的四个特效

  1. 原子性:表示一个事务中的多个数据库操作是不可分割的单元,只有所以的操作都成功后,整个事务才能提交,事务中任何一个操作失败,之前成功的操作都必须撤回,让数据库回到事务开始的状态。
  2. 一致性:事务完成后,数据库所处的状态和它的业务规则保持一致。
  3. 隔离性:并发操作的时候,不同事务之间应该互相隔离,避免干扰。并不是完全无干扰,隔离级别越高,并发性越弱,根据具体业务需求来。
  4. 持久性:事务成功后,事务中所以的数据库操作比较持久化到数据库中。

事务的并发的问题

  1. 脏读:事务A读取了事务B未提交的更改数据,并在这个数据上进行了操作
  2. 不可重复读:一个事务范围内不同时间读取同一数据返回不同的值,因为在查询间隔中读取了其他事务对数据进行了修改提交。
  3. 幻读:更多的相对于表级别的的,A事务读取了B事务新增的数据,比如做统计是A事务2次统计之间B事务刚好新增了一条数据,这个时候就出现了幻读。
  4. 丢失更新A事务撤销覆盖了B事务的已经更新的数据,或者A事务提交覆盖了B事务已经提交的数据。丢失更新中事务隔离中是禁止的,了解即可。

事务隔离级别

  1. READ_UMCOMMITED:字面意思理解读未提交这种隔离级别是最低的运行脏读、不可重复读、幻读。
  2. READ_COMMITED:字面意思读已提交这种隔离级别级别不允许脏读、允许不可重复读和幻读
  3. REPEATABLE_READ:字面意思可重复读这种隔离级别不允许脏读、不可重复读,允许幻读。
  4. SERIALIZABLE:字面意思 可串行化的这种隔离基本最高都不允许。
    默认一般是REPEATABLE_READ

Spring事务的传播

  1. PROPAGATION_REQUIRED:字面意思必须的当前方法必须运行中事务中,如果当前存在事务,则运行中该事务中,如果不存在,则会新起一个事务。
  2. PROPAGATION_SUPPORTS:字面意思支持表示该方法支持事务,如果当前存在事务,则运行中该事务中,如果不存在则以非事务的方法运行。
  3. PROPAGATION_MANDATORY:字面意思强制的表示该方法必须存在于事务中,如果不存在事务则会抛出异常。
  4. PROPAGATION_NOT_SUPPORTED:字面意思不支持表示该方法不支持事务,如果当前存在事务,事务将会被挂起
  5. PROPAGATION_REQUIRED_NEW:字面意思必须新的表示该方法必须运行中新的事务中,如果当前存在事务,该事务将会被挂起。
  6. PROPAGATION_NESTED:字面意思嵌套的表示如果当前已经存在一个事务,那么该方法将会在嵌套事务中运行。嵌套的事务可以独立于当前事务进行单独地提交或回滚。如果当前事务不存在,那么其行为与PROPAGATION_REQUIRED一样。
  7. PROPAGATION_NEVER:字面意思永不表示该方法不支持事务,如果当前存在事务,则会抛出异常
原创粉丝点击