事务与锁

本文详细介绍了数据库事务的四大特性(ACID),包括原子性、一致性、隔离性和持久性,以及事务对并发控制的影响。接着,深入讲解了锁的概念,如排他锁、共享锁和更新锁,阐述了死锁和活锁的现象及防止措施,还探讨了加锁协议和不同级别的锁粒度。最后,提到了SQL Server中的锁超时设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、事务

1、概念:是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。
2、四个特性(ACID)

1)原子性(Atomicity):事务是一个不可再分割的工作单位,一个数据库事务可以包含多个查询、修改、删除、插入等数据库动作,事务中的操作要么都发生,要么都不发生。
2)一致性(Consistency):在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
3)隔离性(Isolation):事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看到中间状态的数据。
① 一个事务执行过程中,正在访问的数据被其他事务修改,导致处理结果不正确 → 不满足并发事务间的隔离性。
② 在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。
4)持久性(Durability):在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。即使出现了任何事故比如断电等,事务一旦提交,则持久化保存在数据库中。

2、如果事务中存在和用户的长时间交互,带来的坏处
1)降低系统的并发度;
2)增加死锁的数量;
3)影响检查点的效果。

3、 事务提交后不能回滚。
4、一个事务只能包含对一个数据库实例的数据操作,不允许跨多个数据库实例,跨多个数据库实例需要分布式事务支持。

二、锁

1、:一种特殊的二元信号量,用来控制多个并发事务对共享资源的使用。锁的主要作用是提供事务所需的隔离,确保事务之间不会相互干扰。。

1)排他锁(X):当事务T对某个数据加上排他锁时。T可以对该数据进行读和写其他任何事务不能再对该数据加任何类型的锁,直到T释放该锁才行。
读取为什么要加读锁呢:防止数据在被读取的时候被别的线程加上写锁。
2)共享锁(S):当事务T对某个数据加上共享锁,则T只能对该数据进行读操作,不能修改,且其他事务也可以对该数据加共享锁,但不能加上排他锁。只有等到该数据没有其他任何事务访问时才能加排他锁。
3)更新锁(U):更新锁在修改操作的初始化阶段用来锁定可能要被修改的资源,这样可以避免使用共享锁造成的死锁现象。

⭐数据库使用读写分离最主要的目的:减少X锁与S锁的竞争。

2、死锁
1)DBMS一般通过周期性检查事务等待图来实现死锁检测。
2)当数据库管理系统检测到死锁后,可以采用撤销死锁事务的方式解除死锁。

3)死锁的必要条件
互斥条件:一个资源每次只能被一个进程使用。
请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
不剥夺条件:进程已获得的资源,在使用完之前,不能强行剥夺。
循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

3、活锁
1)数据库管理系统可以采用先来先服务的方式防止出现活锁现象。

4、加锁协议
1)两段锁协议:所有事务必须分为两个阶段对数据项加锁和解锁
① 在对任何数据进行读、写操作之前,要申请并获得对该数据的封锁;
② 在释放一个封锁之后,事务不再申请和获得其他任何封锁。
如以下题目中,只有T1事务遵守了两段封锁协议。
在这里插入图片描述
③ 若并发执行的所有事务均遵守两段锁协议,则对这些事务的任何并发调度策略都是可串行的
2)数据库管理系统中的加锁协议规定了事务的加锁时间、持锁时间和释放锁时间,其中三级加锁协议可以完全保证并发事务数据一致性

5、锁粒度
1)SQL Server支持的锁粒度可以分为为行、页、键、键范围、索引、表或数据库

6、SQL Server 通过使用SET LOCK_TIMEOUT命令设定锁超时间隔

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值