zoukankan      html  css  js  c++  java
  • 数据库事务与锁

    1、事务基本概念

    *事务是一种操作数据库的序列,这些操作要么全做要么不做,是一个不可分割的工作单位。(事务可以包括一条sql 语句 也可以包括一批sql语句)
     
    2、事务的ACID特征
     
    *原子性

      操作要么全做,要么不做。

    *一致性

      多个变化必须一致同步。

    *隔离性

      事务不受其他事务干扰

    *持续性

      一旦提交改变数据是永久性的

    3、并发的危险

    *丢失更新

      两个事务对同一个资源进行读取更新。

    *脏读

      事务未提交,然后回滚。另外一个事务在读取。

    *不可重复读

      一个事务在读取,一个事务在更新

    *幻读

      一个事务在读取一定范围数据的时候,另外一个事务在插入或者删除。

    *重复读

      一个事务在查询某个范围内数据的时候另外一个事务更新相应的数据。查询多次

    *Sql server里面锁用来解决并发带来的危害
    *Sql server 监视锁用 sys.dm_tran_locks  和dm_os_wait_status  两个系统视图来查看
     
    死锁
    *T1 封锁资源R1 、R2    T2封锁资源 R2 、R1 相互争夺等待形成死锁
    *死锁不可怕

      1)、一次封锁法

      2)、有序封锁法

    •死锁解除

      1)、时间控制

      2)、等待图法

    锁分类

    *排它锁(写锁 X)
    *共享锁(读锁 S)
    *更新锁 (更新U)
    *架构锁 (架构修改锁 Sch-m 架构稳定锁 Sch-S)
    *意向锁(IX,IS , IU)

    显式锁=== 隐式锁

    资源

    库à表->页à行

    Database ->object->page->key

    锁的兼容性

    隔离级别

    *隔离级别可以理解为全局的设置资源锁
    *可序列化
    *可重复读

      SET TRANSACTION ISOLATION LEVEL REPEATABLE READ

    *已提交读

      SET TRANSACTION ISOLATION LEVEL READ COMMITTED

    *未提交读
    *快照
  • 相关阅读:
    反射+自定义注解,实现获取注解标记的属性
    jeecg导出Excel
    Date类的getYear(),getMonth过时,现在的获取方法
    Mysql的sql语句,Delete 中包含 not in
    EhCache与Redis的比较
    SpringMVC+Bootstrap项目
    按位运算| ^
    按步长检索数据,放缓有问题数据的处理
    DateTime 格式相比较,timestampdiff() 函数的运用
    作用域在函数定义时就已经确定了。而不是在函数调用时确定
  • 原文地址:https://www.cnblogs.com/echosong/p/3757853.html
Copyright © 2011-2022 走看看