• 事务的隔离界别


      事务的ACID特性:

      1、Atomicity原子性  事务操作的不可分割性,要么全部执行,要么回滚。

      2、Consistency一致性  数据库在事务处理前后处于的一致性状态。如银行转账,两个账户转账前的状态和转账后的状态必须一致。

      3、Isolation隔离性 同一时刻执行多个事务,一个事务的执行不能被其他事务干扰。

      4、Durability持久性 持久性指一旦成功执行,在系统中产生的所有变化将是永久的。

      事务的隔离级别是事务并发控制的整体解决方案,是综合利用各种类型的锁机制解决并发问题的整体解决方案

      首先了解一下常见的并发问题:

      1、脏读:一个事务可以读到另一个事务未提交的数据,违背了事务的隔离性原则。

      2、不可重复读:同一个事务内,两条相同的查询语句的查询结果不一致。

      3、幻读:屏蔽了对其他用户修改数据的查询,等到提交时发现出错了。

      这三个并发问题的出现都是在前一问题的基础之上发生的,

      比如,脏读问题可以这样理解,客户A从数据库读取数据行到内存并修改,但是还没有提交,此时客户B也要读取这一行,但是这个读取是在内存中读取的客户A未提交的数据

          不可重复读是在解决了脏读的情况下,不再读取未提交的数据,而是从数据库中直接读取已经提交的数据,但是这样会在同一事务中产生一个问题,就是两次查询的结果可能不一致,比如第一次查询在客户端提交前,第二次查询在客户端提交后,结果这两次查询结果不一致。

         幻读问题是在解决了不可重复读问题的前提下,即同一事务中重复查询的结果一致,但是这又会产生新的问题,比如第一次查询是否存在某个用户,假设不存在,此时客户B插入这个用户,此时这个事务的隔离界别是可重复读,那么再次查询这个用户肯定还是不存在,但是此时数据库中已经存在了这个用户,客户A再次插入的话必然会产生duplicate错误。

      为了解决这些并发问题,SQL定义了四种隔离级别:

      read uncommitted(读取未提交的数据)    可能存在  以上三种问题

      read commited 读取提交的数据    解决了脏读问题   但是存在不可重复读和幻读

      repeated read 可重复读      解决了脏读和不可重复读,但是存在幻读现象

      serializable 串行化    解决了脏读,不可重复读和幻读现象,但是发生了锁等待现象,降低了事务间的并发访问性能。

  • 相关阅读:
    Navigator is deprecated and has been removed from this package
    ES6 Promise
    SectionList的使用
    FastList使用
    react native touchable
    react native获取屏幕的宽度和高度
    RN导航栏使用
    2020-11-04:java里,总体说一下集合框架。
    2020-11-03:手写代码:链表如何快速找到中间节点?
    2020-11-02:go中,s:=make([]string,10);s=append(s,“test“);fmt.Println(s[0]),打印什么?
  • 原文地址:https://www.cnblogs.com/maydow/p/4897072.html
Copyright © 2020-2023  润新知