数据库事务与锁
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
*未提交读
*快照
无生,无灭,看似最高境界