SQL server的事务锁--概念篇

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

一、概念

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

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

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

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

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

二、锁的粒度

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

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

表粒度:锁定整个表

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

行粒度:锁定到行

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

三、锁的级别

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

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中隔离级别,我们通过设置不同的隔离级别阻止像:更新丢失、未确认的数据、不一致的数据、幻影插入等问题。

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

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

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

思维导图

 

发布了36 篇原创文章 · 获赞 10 · 访问量 8175

猜你喜欢

转载自blog.csdn.net/weixin_43319713/article/details/104433178