注册 登录
编程论坛 SQL Server论坛

SQL数据库事务锁问题

forest 发布于 2007-03-28 16:16, 1568 次点击

有两个数据表 A 和 B,执行以下操作


BEGIN TRAN
...
SELECT COUNT(*) FROM A(TABLOCKX HOLDLOCK)
...
SELECT * FROM B WHERE BH='0001'
...

SEARCH_INFOR; // 调用过程

...

COMMIT


在过程 SEARCH_INFOR 中执行

SELECT * FROM B WHERE MC='西服'

这时用 SP_LOCK 查询琐时发现多了一个DB锁,不知为什么呢?而且在整个事务 COMMIT 完成后这个琐还是存在,只有关闭应用程序后这个锁才自动释放。

9 回复
#2
bygg2007-03-28 16:31

加了锁就得释放锁啊.

#3
Kendy1234562007-03-28 17:51

你查询加锁干嘛。。。

#4
初学Delphi2007-03-29 13:36
他怕他查询的时候被别人修改ing
#5
feeless2007-03-29 18:56

COMMIT 完成解锁吧。

#6
xiyou4192007-03-29 22:48
以下是引用forest在2007-3-28 16:16:49的发言:

有两个数据表 A 和 B,执行以下操作


BEGIN TRAN
...
SELECT COUNT(*) FROM A(TABLOCKX HOLDLOCK)
...
SELECT * FROM B WHERE BH='0001'
...

SEARCH_INFOR; // 调用过程

...

COMMIT


在过程 SEARCH_INFOR 中执行

SELECT * FROM B WHERE MC='西服'

这时用 SP_LOCK 查询琐时发现多了一个DB锁,不知为什么呢?而且在整个事务 COMMIT 完成后这个琐还是存在,只有关闭应用程序后这个锁才自动释放。

你多出的锁是A表还是B表的?

#7
棉花糖ONE2007-03-30 00:06

只要你一开始使用数据库db的锁就产生了

#8
forest2007-03-30 09:31

查询时加锁就是不允别人修改的,在事务开始之前就有一个数据库锁了,只是在开始这个事务后执行完上面的语句又会多出一个数据库锁,就好像又有一个新的用户连接了数据库,而且在事务提交后多出来的数据库锁没有自动释放。

#9
棉花糖ONE2007-03-30 10:10

都说了db锁,你一用数据库的时候就产生了

#10
forest2007-03-30 11:04
我知道,应用程序连接数据库后会有一个DB锁,但在运行完上面的命令后他会另外在产生一个DB锁,就像多了一个用户连接一样。
1