还原sql数据库无法获得独占访问权 数据库锁有哪几种?
数据库锁有哪几种?
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))
批量复制锁:批量修改锁在批量复制数据时使用。
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。