zoukankan      html  css  js  c++  java
  • 数据库事务的隔离级别

    SQL92标准规定,数据库事务有4个隔离级别,他们为了防止以下现象:

    • 脏读取(Dirty read):一个事务读取了另一事务未提交的数据
      • A事务修改一笔数据,但仍未提交
      • B事务查询数据,却能读取该笔未提交的数据(如果A事务回滚,则此笔数据为脏数据,所以为脏读取)
    • 不可重复读取(Nonrepeatable read):一个事务中,先读取一批数据,后来再次读取此批数据,却发现数据有变更
      • A事务读取了一批数据
      • B事务操作或删除该批数据
      • A事务再次读取,发现该批数据被修改或删除了
    • 不存在读取(Phantom read):一个事务中,先执行一条查询,再执行一次同一条件的查询,发现结果集不一致
      • A事务根据条件查询了一批数据
      • B事务插入数据
      • A事务重新执行相同条件的查询,结果集并不一致

    而数据库事务的隔离级别为:

    隔离级别 脏读 不可重复读取 不存在读取
    未提交读 Y Y Y
    已提交读 N Y Y
    可重复读(MySQL默认级别) N N Y
    串行化 N N N

    本人认为,基于数据库事务的原子性、一致性,脏读取可谓是重中之重,此点很容易让人理解。

    不可重复读取、不存在读取,初看之下仿佛一致。实际上不可重复读取,数据库只需要保证被操作的数据的隔离性;而不存在读取,数据库则需要保证整个表的数据的隔离性。所以他们的级别不同。

    附:

    MySQL默认的隔离级别是可重复读

    OracleSQL SERVER默认的隔离级别是已提交读

  • 相关阅读:
    golang中,new和make的区别
    k8s客户端库
    k8s 拉取私有镜像
    kubernetes-client / python
    k8s集群外go客户端示例
    K8s获取NodePort
    KUBERNETES中的服务发现机制与方式
    Rancher容器目录持久化
    rancher k8s 实现pod弹性伸缩
    在Terminal里,使用Shift+Insert来代替鼠标右键来进行粘贴操作
  • 原文地址:https://www.cnblogs.com/nick-huang/p/4287180.html
Copyright © 2011-2022 走看看