问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

.net的sqlserver事务里,delete语句如何只锁行,不锁表

发布网友 发布时间:2022-04-23 17:38

我来回答

2个回答

热心网友 时间:2022-04-08 20:51

你理解错了!

默认sqlserver都是行数据锁定,隔离级别是 read commited 也就是读取可 提交数据。

我给你举个例子!

SELECT TOP 1000
[ID]
,[DeleteBy]
,[DelDate]
FROM [dbo].[DeleteLog]
显示结果
-----------------------------------------------
ID DeleteBy DelDate
1 admin 2008-04-13 00:00:00.000
2 admin 2008-05-04 00:00:00.000
-------------------------------------------------
表数据就两行
然后我做如下操作:
打开 SQL Server Management Studio
输入:
begin transaction
DELETE FROM [HMS].[dbo].[DeleteLog]
where ID='1'

在另一个窗口中:
SELECT
[ID]
,[DeleteBy]
,[DelDate]
FROM [dbo].[DeleteLog]
where ID=1

你发现 这一个窗口被阻塞了,

但是查询

SELECT
[ID]
,[DeleteBy]
,[DelDate]
FROM [dbo].[DeleteLog]
where ID=2

可以正确返回结果。 这充分证明了,sqlserver默认隔离级别是行数据锁定。

然后你此时在第一个删除窗口 中输入

rollback

,记住前面的删除不执行,只执行rollback。

此时看一下查询
SELECT
[ID]
,[DeleteBy]
,[DelDate]
FROM [dbo].[DeleteLog]
where ID=1

那个窗口的结果已经出来了,阻塞被解除了。

========================================
当然了!你执行了全表检索肯定也是被阻塞的,因为删除操作还没提交啊,检索数据中又包含了你要删除的数据,当然被阻塞了。

你的问题出现在哪里了,你应该明白了吧!

解决这个问题其实很简单,不要长事务占用。检索的时候避开要删除的数据。

当然也可以改变隔离级别,sqlserver分为两类隔离级别,改成非阻塞类就可以。

但是我个人不推荐这么做。改变隔离级别可以如下方式:

set transaction isolation level read uncommitted
begin transaction
DELETE FROM [HMS].[dbo].[DeleteLog]
where ID='1'

这个删除没有提交

检索的时候

set transaction isolation level read uncommitted
SELECT
[ID]
,[DeleteBy]
,[DelDate]
FROM [dbo].[DeleteLog]
where ID=1

根本不会阻塞。 比较顺利,删除更新也一样。

这种方式 适合 数据量庞大的社交,天文数据库,企业管理不适合。
可以从侧面看出,你的程序并不优良,明白了否?

热心网友 时间:2022-04-08 22:09

默认是key锁,也就是rowlock,一行就是一个锁,,1000行就是1000个锁,当锁数量超过5000,数据库会自动把行锁升级为表锁,这样锁就变少了,占用资源就少了。
但是,全表锁定我啥也干不了啊?所以要指定paglock,例如
update t with(paglock) where Id < 2000
一页包含大概几十页上百行,这样锁的数量也比较少,不会锁全表,但如果数据特别大,例如50W行,页锁也会有5000个,同样会升级为表锁。
但50W数据够你用的了。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我这个配置能玩大唐无双2吗 PK什么的能卡么? 求高手解答 这样的配置还要加什么玩大唐无双才不卡 这个配置能玩大唐无双双开吗? windows7旗舰版系统玩大唐无双零双开卡怎么办?卡死了。 玩大唐无双的时候双开过地图太卡怎么解决啊 全民枪战我用QQ号,但它说密码数字英文,下划线组成,应该怎样弄啊?_百 ... 小太阳取暖器头晕呕吐 取暖器用的会头晕吗,可能的原因和使用注意事项 男孩姓孙含越字好名字 简单特别的男孩名字越 中间是越的男孩名字大全 sql server 怎么保证查询出的结果不能被其他电脑访问,具体如下_百度知 ... sqlserver 怎么清理 dm sql server里update时,是行锁还是表锁问题 如何在SQLServer中锁定某行记录 解析:如何快速掌握SQLServer的锁机制 00后属牛的本历年多少岁? 为什么说本历年结婚不好? 本历年家里能贴春联吗本历年家里能贴春联吗? 为什么本历年不能结婚? 本历年为什么要避星星? 本命年和本历年有啥不同?它们的概念分别是? 什么叫本历年? 本历年的来历是什么? 本历年是多大? 联想手机开机密码锁如何破解? 联想手机电脑怎么取消开机密码 联想手机安会中心设置了私密模式的密码,怎么取消? 联想x2手机屏幕解锁密码怎么去除 联想手机怎样解手机锁密码? 联想s720手机如何取消开机密码?? 执行下面的哪些命令将释放用户以前持有的所有表锁 数据库,新手建表问题! 用的SQLserver2008,网上查的有两种方法,一种直接... 如何防治SQL注入? sql server 和 mysql 语法和关键字的区别 CI怎么连接sqlserver2012,用的是PHPstudy SQL SERVER 中如何使用行锁? 分布式光伏发电项目的并网模式一般有几种? 分布式光伏发电项目的并网模式都有哪几种? 安装分布式光伏发电项目可以选择哪种并网模式? 在什么情况下分布式光伏发电项目的并网模式会分类,又会分为几种? 广东电网的分布式光伏发电的并网模式有几种? 请问一下什么是分布光伏发电项目的并网模式有几种呢? 我想问一下光伏发电的并网模式有几种? 我想问问现在的分布光伏发电项目的并网模式有几种? 从2022年起,广东省汉语言文学自考专科科目有哪些? 广东软件工程自考科目有哪些要考试? 广东省自考专科汉语言文学专业需要考的是哪十五科? 2020今年四月份广东省汉语言文学本科自考考哪几科? 广东自考法律大专需要考哪些科目 广东自考专升本要考哪些课程