SQL server的事务锁--概念篇

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 在我看来,锁,就是一种手段,在现实生活中的意义就是锁住你不想让别人看到的或者不让别人进去的某个事物,具有一定的私密性。

在上一篇的SQL事务中我讲到了”事务是恢复和并发控制的基本单位“,但它究竟怎么来控制并发这个过程呢?这就要从事务中的锁这一概念说起。


一、概念


在我看来,锁,就是一种手段,在现实生活中的意义就是锁住你不想让别人看到的或者不让别人进去的某个事物,具有一定的私密性。


我们都知道事务是倡导”并发“执行工作的,但如果同时有A和B两个人分别在对方都不知道的情况下,对数据库中的数据进行修改,你改一下,我修一下,那数据库中的数据不就乱套了吗?这时,我们就需要给你想要修改的数据上一把锁,在我修改的这段时间内只能我看,不允许别人看和操作。因此锁也就成为了实现事务的关键。


专业来说:锁使得某些数据或数据结构的其他有效用户在某段时间内无法利用这些数据或数据结构


作用都是为了控制数据库中数据的一致性


本质上来说,锁就是起到一种限制性的作用,它限制了对数据的并发操作


二、锁的粒度


锁的粒度是指应用锁的结构的级别或者大小。分为了这几个:


20200221193448119.png


数据库粒度:锁定整个数据库


表粒度:锁定整个表


页粒度:DBMS趋向于与它们所存储的物理介质一起工作,以帮助他们管理数据。DBMS可以将它的表数据划分为多个快,这些快的大小适合硬盘的一个扇区。这些块被称为页。页的大小通常对应与硬盘的扇区的大小。


行粒度:锁定到行


列粒度:锁定到列,但很少DBMS这样做。因为额外开销非常高,带来的好处也非常少


三、锁的级别


锁的级别决定了锁被应用的严格程度,以及是否其他用户可以以任何方式使用数据。


2020022119445787.png


1.专有锁:不允许其他用户看到数据,因为数据即将被改变,


2.共享锁:没有人可以修改数据,但是其他用户可以查看或者使用数据,只要不更新它。共享锁也是使用较广泛的,因为你不需要锁定数据使得其他用户无法看到它。


3.死锁:如果不同的用户锁定不同表中的不同记录,则数据库可能会处于这样一种情形:用户1正在等待用户2锁定的数据,而用户2正在等待用户1锁定的数据。在用户能够完成他们的处理并释放他们的锁之前,每个用户需要其他用户锁定的数据。这种情形称为死锁。


我举个例子:就好比上厕所。A正在使用厕所,并且锁起来了,门外的B只能等到A出来之后才能使用。A和B这种等待与使用的环节就是死锁。


4.乐观锁:通常假定事务相互之间没有交互,因此更偏向与使用具有较少限制的锁策略


5.悲观锁:假设事务必定相互干涉,这样需要使用具有较多限制的锁策略


四、隔离级别


事务之间的不充许隔离有时候可能会造成严重的问题,将显示不一致的数据,甚至造成数据的不正确。所以数据库的用户和他们事务之间的隔离需要加强。


隔离级别越低,对数据库、其他用户和进程、实现数据库的硬件和平台等的影响越低。

1.SET TRANSACTION语句


在任何事务的开始处改变级别。


SET TRANSACTION ISOLATION LEVEL ISOLATION LEVEL
BEGIN TRANSACTION


一般放在开头,出现了就是告诉DBMS后面的事务要使用哪种隔离级别,只能在开始处改变,当事务开始的过程中不能改变。


2.SERIALIZABLE隔离级别


默认级别,也是最大程度的隔离。可以组织更新丢失问题


如果一个事务序列需要在事务执行期间能够读取一个特定的数据集两次,并返回完全相同的数据集,则需要使用。


SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRANSACTION


3.READ COMMITTED隔离级别


第三种隔离级别。该级别保证事务不能看到其他事务未确认的更新。使用下面语句声明:


SET TRANSACTION ISOLATION LEVEL READ COMMITTED
BEGIN TRANSACTION


4.READ UNCOMMITTED隔离级别


最后一种隔离级别。通常如果声明时,会假设READ ONLY。


SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
BEGIN TRANSACTION


五、问题


在上述中我提到了4中隔离级别,我们通过设置不同的隔离级别阻止像:更新丢失、未确认的数据、不一致的数据、幻影插入等问题。


下图未每一种隔离级别以及他们所能够处理的问题。


20200221202639309.png


事务确保了需要修改数据的用户不看到即将修改的数据或者正在修改过程中的数据。事务索定了数据集,这样可以对记录进行修改,而不会覆盖其他用户的改变,或者允许其他用户覆盖你的改变。


我们都知道锁通常具有非常显著的开销,当上百个或者上前的用户尝试获得锁时,通常会造成数据库的运行速度减慢,出现效率问题。而锁的级别如何通过允许用户看到或者看不到被锁定的记录来降低锁的影响,这是我们需要去深思的。


思维导图


20200221203859599.png

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
23天前
|
SQL 数据库 数据安全/隐私保护
SQL Server数据库Owner导致事务复制log reader job无法启动的解决办法
【8月更文挑战第14天】解决SQL Server事务复制Log Reader作业因数据库所有者问题无法启动的方法:首先验证数据库所有者是否有效并具足够权限;若非,使用`ALTER AUTHORIZATION`更改为有效登录名。其次,确认Log Reader使用的登录名拥有读取事务日志所需的角色权限。还需检查复制配置是否准确无误,并验证Log Reader代理的连接信息及参数。重启SQL Server Agent服务或手动启动Log Reader作业亦可能解决问题。最后,审查SQL Server错误日志及Windows事件查看器以获取更多线索。
|
4天前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
9 0
|
7天前
|
SQL 监控 供应链
|
2月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
|
2月前
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
43 6
|
23天前
|
SQL 数据库连接 网络安全
SQLServer非默认端口下事务复制代理作业服务无法启动的处理
【8月更文挑战第14天】若SQL Server非默认端口下的事务复制代理作业无法启动,可按以下步骤解决:1) 确认服务器连接字符串正确无误,包括非默认端口号;2) 检查防火墙设置,确保允许非默认端口的连接;3) 核实SQL Server配置已启用非默认端口;4) 查阅代理作业日志寻找错误详情;5) 重启SQL Server与Agent服务;6) 使用工具测试非默认端口的连接性。如问题持续,请寻求专业支持。
|
25天前
|
SQL 安全 Java
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
96 0
|
27天前
|
SQL 关系型数据库 MySQL
SQL Server 事务执行、回滚
SQL Server 事务执行、回滚
37 0
|
2月前
|
SQL 分布式计算 监控
ODPS SQL问题之在ODPS SQL中,Shuffle的概念是什么
ODPS SQL问题之在ODPS SQL中,Shuffle的概念是什么
|
14天前
|
SQL 数据库
Microsoft SQL Server 2014如何来备份数据库
Microsoft SQL Server 2014如何来备份数据库
12 3
下一篇
DDNS