• 数据库:事务


    1. 什么是事务?

    事务是对数据库中一系列操作进行统一回滚或者提交的操作,主要用来保证数据的完整性和一致性。

    2. 事务四大特性(ACID)原子性、一致性、隔离性、持久性?

    2.1 原子性(Atomicity):
      原子性是指事物包含的所有操作要么全部成功,要么全部失败回滚,因此事物的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。

    2.2 一致性(Consisitency):
      事物开始前和结束后,数据库的完整性约束没有被破坏。比如A向B转账,不可能A扣了钱,B却没收到。

    2.3 隔离性(Isolation):
      隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他的事物所干扰,多个并发事务之间要相互隔离。同一时间,只允许一个事务请求同一数据,不同事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。

    2.4 持久性(Durability):
      持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

    3. 事务的并发?

    3.1 脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据就是脏数据。
    3.2 不可重复读:事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,读取到的数据结果会不一致。
    3.3 幻读:幻读解决了不可重复读,保证了同一事务里,查询的结果都是事务开始时的状态。

    4. 事务的隔离级别?

    4.1 读取未提交内容(Read Uncommitted)一个事务可以读到另一个事务未提交的结果。所有的并发事务问题都会发生。
    4.2 读取提交内容(Read Committed)只有在事务提交后,其更新结果才会被其他事务看见。可以解决脏读问题。
    4.3 可重复读取(Repeated Read)在同一个事务中,对于同一份数据的读取结果总是事务开始时时间点的状态。可以解决脏读、不可重复读,但是会有幻读现象。
    4.4 可串行化(Serialization)最高隔离级别,牺牲了系统的并发性,可以解决并发事务的所有问题。

    5. 事务传播行为?

    1. PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。
    2. PROPAGATION_SUPPORTS:如果当前存在事务,就加入该事务,如果当前没有事务,就以非事务运行。
    3. PROPAGATION_MANDATORY:如果当前存在事务,就加入该事务,如果当前没有事务,就抛出异常。
    4. PROPAGATION_REQUIRES_NEW:创建新事务,无论当前存不存在事务,都创建新事务。
    5. PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
    6. PROPAGATION_NEVER:以非事务方式执行操作,如果当前存在事务,则抛出异常。
    7. PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则创建一个新事务。

    6. 嵌套事务?

      嵌套是子事务套在父事务中执行,子事务是父事务的一部分,在进入子事务之前,父事务建立一个回滚点,叫save point,然后执行子事务。这个子事务的执行也是父事务的一部分,子事务执行结束,父事务继续执行。

    6.1 如果子事务回滚,会发生什么?
    父事务会回滚到进入子事务前建立的save point,然后尝试其他的事务或者其他的业务逻辑,父事务之前的操作不会受到影响,更不会自动回滚。

    6.2 如果父事务回滚,会发生什么?
    父事务回滚,子事务也会跟着回滚。因为父事务结束之前,子事务是不会提交的,我们说子事务是父事务的一部分,正是这个道理。

    6.3 事务的提交是什么情况?
    子事务先提交,父事务再提交。还是那句话,子事务是父事务的一部分,由父事务统一提交。

  • 相关阅读:
    对象属性操作-包含kvc---ios
    UserDefault的使用,保存小数据到本地-iOS
    单例模式-ios
    值类型和引用类型
    [fn]焦点图JQ插件版
    [f]区间随机数函数
    css3动画特效集合
    js中的事件代理(委托)
    Nodejs入门【转载】保留备用
    canvas打字效果
  • 原文地址:https://www.cnblogs.com/xiaobaizzz/p/12257309.html
Copyright © 2020-2023  润新知