• 关于事务隔离级别


    数据库事务常见的三种现象:

    1 脏读(dirty read):未提交读。(A修改年龄为20,B读出20后,A回滚为18。)

       出现场景:大多数数据库默认的级别为提交读(SQLServer,Orcal),所以除非设置隔离级别为Read uncommitted,否则不会出现。

       解决方案:SET TRANSACTION ISOLATION LEVEL read committed

    2 不可重复读:

      出现场景:

      执行事务A后,立马执行事物B,会出现事务A中出现的两次查询值不同。

    --事务A
    
    begin tran 
    select * from  [HM_Student] where id=8
    waitfor delay '00:00:05'
    select * from  [HM_Student] where id=8
    commit tran 
    
    --事务B
    
    begin tran 
    --delete [HM_Student]  where id=6
    update [HM_Student] set age=333352 where id=8
    waitfor delay '00:00:1'
    commit tran 
    

      解决方案:在事务前加:SET TRANSACTION ISOLATION LEVEL repeatable committed

    3 幻读:与第2个相似,是一个事物中多次查询,其他事物对数据进行了删或者增而出现的情况。

      解决方案:SET TRANSACTION ISOLATION LEVEL serializable

    总结:

    隔离级别

    脏读

    不可重复读取

    幻像

    说明

    未提交读(read uncommitted)

    如果其他事务更新,不管是否提交,立即执行

    提交读(read committed默认)

    读取提交过的数据。如果其他事务更新没提交,则等待

    可重复读(repeatable read)

    查询期间,不允许其他事务update

    可串行读(serializable)

    查询期间,不允许其他事务insert或delete

  • 相关阅读:
    Spring Boot框架开发的Java项目在CentOS7上的部署
    linux系统文件被删的几种恢复方法
    网页跳转微信加好友的方法
    一键跳转微信加好友
    jmeter java性能测试
    jenkins jmeter持续集成批处理jmx脚本
    jmeter命令行运行-分布式测试
    jmeter之jtl文件解析
    jmeter命令行运行-单节点
    网络爬虫-获取infoq里的测试新闻保存至html
  • 原文地址:https://www.cnblogs.com/lpfsky/p/3853707.html
Copyright © 2020-2023  润新知