zoukankan      html  css  js  c++  java
  • 关于事务隔离级别

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

    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

  • 相关阅读:
    Java 上传文件总结
    Java和C# MD5加密比较
    ORM映射框架总结数据操作(七)
    ORM映射框架总结数据操作(五)
    ORM映射框架总结数据操作(一)
    ORM映射框架总结数据操作(四)
    ORM映射框架总结数据操作(六)
    ORM映射框架总结文件下载
    STM32USART DMA_Interrupt例程的学习
    开始STM32的学习
  • 原文地址:https://www.cnblogs.com/lpfsky/p/3853707.html
Copyright © 2011-2022 走看看