2016 - 2024

感恩一路有你

还原sql数据库无法获得独占访问权 数据库锁有哪几种?

浏览量:4540 时间:2023-04-22 13:17:56 作者:采采

数据库锁有哪几种?

1. Shared lock (shared lock)

T1: select * from table(请想象一下需要执行1个小时,下面的sql语句应该是这么想象的)。

T2: Update table set column1#39hello#39

流程:

T1操作(带共享锁)

T2行动

如果T1没有完成执行。

T2等人......

other

锁被打开了。

T2处决

endif

T2不得不等待,因为它试图在执行更新之前给表添加一个排他锁。

但是,数据库规定共享锁和独占锁不能同时在同一个资源上共存。所以T2必须等待T1。

2. Update Lock (Update Lock)

t1:select * from table(上锁)(加更新锁)

Update table set column1#39hello#39.

T2: Select * from the table

Update table set column 1 #39 World # 39

更新锁定 "我现在只想看,你们其他人也可以看,但是以后可能会做一个更新操作。我获得了独占锁的共享锁(用于读取)。 "

(用于更新)资格。 "一个事物只有一个更新锁才有这个资格。

T1执行select并添加更新锁。

T2运行,准备添加一个更新锁,但发现已经有一个更新锁在那里,所以我们必须等待。

当用户3、用户4...以后需要查询表中的数据,不会因为T1 的select正在执行,但仍可查询。

3.独占锁(独占锁)

T1:更新表集合列1 # 39 hello # 39 where idlt 1000

T2:更新表集列1 # 39世界# 39,其中idgt 1000

假设T1先到达,T2后到达,在这个过程中,T1会对idlt1000的记录应用排他锁,但不会阻塞T2的更新。

4, directional lock (directional lock)

T1 : select * from table (xlock)其中id10-表示对id10施加排他锁。

T2:select * from table(ta block)-表示添加表级锁。

假设先执行T1,后执行T2,在执行T2时,要添加表锁,为了判断表锁是否可以添加,数据库系统要逐个判断表记录的每一行是否有排他锁。

如果发现其中一行已经有了排他锁,则不允许添加表锁。It 这只是它 逐个判断效率太低。

事实上,数据库系统并不。;不要这样工作。当执行T1的select时,系统向表的id10的这一行添加排他锁,同时,它静默地向整个表添加。

有了有意排他锁(IX),T2在执行表锁定时,只需要看到这个表已经有意存在于排他锁中,就可以直接等待,不需要逐个检查资源。

5. Plan lock (mode lock)

Change table ... (add schema lock, which is called schema modification (Sch-M) lock.

DDL语句总是用sch-m锁定。

该锁不允许任何其他会话连接到该表。你可以 甚至不能连接这个表,更不用说要对它执行什么sql语句了。

server锁原理?

1、锁的用途

为了避免同时争夺数据库资源,数据库被锁定,只有拥有密钥的用户才能使用;

2、锁的粒度

行锁-页锁-区域锁(分区8页)-表锁。

3.锁的类型

共享锁:用于所有只读数据操作(select);

修改锁:用于在修改操作(更新)的初始化阶段锁定可能被修改的资源;

排他锁x (exclusive lock) :保留用于修改数据;(独占锁不能与其他锁兼容)

架构锁:分为结构修改锁(Sch-M)和结构稳定锁(Sch-S);

意向锁:表示SQL Server在资源底层有共享锁或独占锁的意向;(有三种类型:有意排他锁(IX)、有意共享锁(IS)和有意排他共享锁(SIX))

批量复制锁:批量修改锁在批量复制数据时使用。

T2 资源 T1

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。