sql的几种常用锁简述

SELECT * FROM dbo.AA
SELECT * FROM dbo.B
--1.排它锁
--增删改查都不行
--这个是数据库自己,为了出现数据错乱、脏数据自己加的处理机制
--连接1
begin tran

update dbo.B

set name=‘bb‘

where id=1

waitfor delay ‘00:00:30‘ --等待30秒

commit tran

--在第二个连接中执行以下语句

begin tran

select * from B

commit tran

--若同时执行上述两个语句,则select查询必须等待update执行完毕才能执行即要等待30秒

--2)共享锁
--holdlock:可以查询但不能增删改
--在第一个连接中执行以下语句

begin tran

select * from dbo.B (HOLDLOCK) --holdlock人为加锁

waitfor delay ‘00:00:30‘ --等待30秒

commit tran

--在第二个连接中执行以下语句

begin tran

select * from dbo.B

update dbo.B

set name=‘ff‘

where id=‘1‘

commit tran

--若同时执行上述两个语句,则第二个连接中的select查询可以执行

--而update必须等待第一个事务释放共享锁转为排它锁后才能执行 即要等待30秒

--3)TABLOCKX(独占锁)
--TABLOCKX:其他事务增删改查都不行
--在第一个连接中执行以下语句

begin tran

select * from dbo.B (TABLOCKX) --holdlock人为加锁

waitfor delay ‘00:00:30‘ --等待30秒

commit tran

--在第二个连接中执行以下语句

begin tran

select * from dbo.B

commit tran

--若同时执行上述两个语句,则第二个连接中的select查询要等待30秒

--3)死锁

--在第一个连接中执行以下语句

begin tran

update dbo.A

set name=‘aa‘

where id=‘1‘

waitfor delay ‘00:00:30‘

update dbo.B

set name=‘aa‘

where id=‘1‘

commit tran

--在第二个连接中执行以下语句

begin tran

update dbo.b

set name=‘aa‘

where id=‘1‘

waitfor delay ‘00:00:10‘

update dbo.A

set name=‘aa‘

where id=‘1‘

commit tran

--同时执行,系统会检测出死锁,并中止进程

--查看死锁
select
request_session_id spid,
OBJECT_NAME(resource_associated_entity_id) tableName
from
sys.dm_tran_locks
where
resource_type=‘OBJECT‘

--杀死死锁进程
kill spid

时间: 2024-08-06 16:16:43

sql的几种常用锁简述的相关文章

常用的分布式锁和redis和zk两种分布式锁的对比

常用的分布式锁 一..基于数据库实现分布式锁 1. 悲观锁 利用select … where … for update 排他锁 注意: 其他附加功能与实现一基本一致,这里需要注意的是“where name=lock ”,name字段必须要走索引,否则会锁表.有些情况下,比如表不大,mysql优化器会不走这个索引,导致锁表问题. 2. 乐观锁 所谓乐观锁与前边最大区别在于基于CAS思想,是不具有互斥性,不会产生锁等待而消耗资源,操作过程中认为不存在并发冲突,只有update version失败后才

PHP V5 的五种常用设计模式

设计模式 一书将设计模式引入软件社区,该书的作者是 Erich Gamma.Richard Helm.Ralph Johnson 和 John Vlissides Design(俗称 "四人帮").所介绍的设计模式背后的核心概念非常简单.经过多年的软件开发实践,Gamma 等人发现了某些具有固定设计的模式,就像建筑师设计房子和建筑物一样,可以为浴室的位置或厨房的构造方式开发模板.使用这些模板或者说设计模式 意味着可以更快地设计更好的建筑物.同样的概念也适用于软件. 设计模式不仅代表着更

【方法整理】Oracle 获取trace跟踪文件名的几种常用方式

[方法整理]Oracle 获取trace跟踪文件名的几种常用方式 1  BLOG文档结构图     2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① trace跟踪文件的获取   Tips: ① 本文在itpub(http://blog.itpub.net/26736162).博客园(http://www.cnblogs.com/lhrbest)和微信公众号(xiaomaimiaolhr)有同

《BI那点儿事》浅析十三种常用的数据挖掘的技术

原文:<BI那点儿事>浅析十三种常用的数据挖掘的技术 一.前沿 数据挖掘就是从大量的.不完全的.有噪声的.模糊的.随机的数据中,提取隐含在其中的.人们事先不知道的但又是潜在有用的信息和知识的过程.数据挖掘的任务是从数据集中发现模式,可以发现的模式有很多种,按功能可以分为两大类:预测性(Predictive)模式和描述性(Descriptive)模式.在应用中往往根据模式的实际作用细分为以下几种:分类,估值,预测,相关性分析,序列,时间序列,描述和可视化等. 数据挖掘涉及的学科领域和技术很多,有

[转]深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接

深入理解SQL的四种连接-左外连接.右外连接.内连接.全连接 1.内连接(典型的连接运算,使用像 =  或 <> 之类的比较运算符).包括相等连接和自然连接.     内连接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和courses表中学生标识号相同的所有行.       2.外连接.外连接可以是左向外连接.右向外连接或完整外部连接.     在 FROM子句中指定外连接时,可以由下列几组关键字中的一组指定:     1)LEFT  JOIN或LEFT

SQL Server中开发常用的数据类型

我们在日常开发过程中,在进行数据库设计的时候,经常会遇到如果选择数据类型的问题,选择什么样的数据类型最合适,然后当我们在项目中建立对应实体的时候,如何选择对应的CLR类型.针对这些问题,于是这篇文章诞生了. SQL Server数据类型 占用字节数 表示范围 对应的CLR类型 适用场景 char char(n)   System.String 使用char(2)来表示类型或状态(建议用tinyint代替) varchar varchar(n) 1~8000 System.String 只包含英文

(转)SQL Server 的事务和锁(一)

SQL Server 的事务和锁(一) 最近在项目中进行压力测试遇到了数据库的死锁问题,简言之,如下的代码在 SERIALIZABLE 隔离级别造成了死锁: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 SELECT @findCount=COUNT(id) FROM MyTable WHERE [fk_related_id][email protected] IF (@findCount > 0) BEGIN     ROLLBACK TRANSACTION     RET

SQL中两种表复制语句

Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少.但我们在开发.测试过程中,经常会遇到需要表复制的情况,如将 一个table1的数据的部分字段复制到table2中,或者将整个table1复制到table2中,这时候我们就要使用SELECT INTO 和 INSERT INTO SELECT 表复制语句了. 1.INSERT INTO SELECT语句

一个老师程序员说:这是学Java 必知必会的 20 种常用类库和 API

一个有经验的Java开发人员特征之一就是善于使用已有的轮子来造车.<Effective Java>的作者Joshua Bloch曾经说过:"建议使用现有的API来开发,而不是重复造轮子".在本文中,我将分享一些Java开发人员应该熟悉的最有用的和必要的库和API.顺便说一句,这里不包括框架,如Spring和Hibernate因为他们非常有名,都有特定的功能.最后,如果大家如果在自学遇到困难,想找一个java的学习环境,可以加入我们的java学习圈,点击我加入吧,会节约很多时