• spring设计思想事务篇之数据库隔离级别


    0,前言:数据库的事务隔离级别是关系型数据库事务的理论基础,

      隔离,理想状态下,不同的客户之间的事务操作不会对彼此有影响。实现对数据库资源的互斥性访问

      TPS: 单位时间内的事务数(Transactions Per Second),TPS越高,表示数据库的性能越好。

    1,不同级别的隔离

      序列化读:规定同一时间内只能有一个客户端连接数据库进行事务操作,在这个客户端完成事务之前,其他客户端不能对数据库进行事务操作。相当于是以数据库级别作为互斥资源,也可以以数据库表级别作为互斥资源。

      可重复读:采用的是行锁,会出现幻读的问题:返回的记录数不一致,好像多读了数据一样,这种情况,称为幻读(Phantom Read

       读已提交:

        客户端B客户端D直接使用读锁读取数据,读锁是共享锁,所以可以同时进行;而客户端A客户端C 事务操作上,会存在两个环节:Uncommited—> Commited,在真正 commit的时候,则使用写锁以互斥的方式完成事务,把互斥访问资源的时机压缩的更短。但是存在度的数据不一致的问题

     带给我们的启示:数据库事务操作中,尽可能少的用查询结果作为参数来执行后续的更新语句。

        读未提交,将资源互斥的访问粒度细化到未提交的行数据上,进一步的提高并发能力。但是出现了脏读现象。客户端reader在事务的过程中,读取到了其他客户端updater尚未提交的数据,之后客户端reader 可能将其当做已经持久化的数据进行业务操作,而实际上,客户端updater可能将其数据回退;在此过程中,客户端reader读取的数据就成了脏数据,客户端reader的读数据行为为:脏读(Dirty Read)

    • SERIALIZABLE 序列化读,隔离级别最高,客户端以互斥的方式访问数据库资源,统一时间内,同一个资源只能被一个客户端访问,好像客户端在排队请求访问,所以称为序列化读。
    • REPEATABLE_READ 可重复读,可重复读能够保证,一个客户端在一个事务内,多次访问同一个资源时,返回结果是一样的,顾名思义,称为可重复读,这种隔离级别可能会造成幻读现象。
    • READ_COMMITTED 读已提交,即客户端在一个事务内,每次查询读取的数据都是从数据库读取最新的已提交的数据;这种隔离界别可能会造成不可重复读幻读现象。
    • READ_UNCOMMITTED 读未提交,即客户端在一个事务内,可以读取到其他客户端事务的尚未提交的数据;这种隔离级别可能会造成脏读不可重复读幻读 现象。
  • 相关阅读:
    51nod 1050 循环数组最大子段和
    51nod 1183 编辑距离
    百度之星初赛一 补题
    jquery click嵌套 事件重复注册 多次执行的问题
    Shell变量赋值语句不能有空格
    Linux得到某个文件夹内文件的个数
    Ubuntu14.04下sogou输入法的输入框只显示英文不显示中文的问题
    Eclipse中mybatis的xml文件没有提示,出现the file cannot be validated as the XML definition.....
    整理一下postgresql的扩展功能postgis和pgrouting的使用
    Windows应用程序未响应
  • 原文地址:https://www.cnblogs.com/benbenzoule/p/13839485.html
Copyright © 2020-2023  润新知