1\数据表
TableName
id int not null
name varchar null2\第一查询(修改事务)
begin tran
update dbo.TableName with (rowlock,updlock) set name = '4' where id = 1
waitfor delay '00:00:10';
rollback tran3\第二个查询(sql)
select * from dbo.TableName where id = 2===========================
使用sp_lock查询锁,发现当前TableName 表产生了三个锁:RID(行锁),PAG(数据页),TAB(表)
1问题:sql server 在修改时会自动产生这三种锁,是否可以设置为只产生RID(行锁)呢?
2如何在第一个查询未执行完时,执行第二个查询?
TableName
id int not null
name varchar null2\第一查询(修改事务)
begin tran
update dbo.TableName with (rowlock,updlock) set name = '4' where id = 1
waitfor delay '00:00:10';
rollback tran3\第二个查询(sql)
select * from dbo.TableName where id = 2===========================
使用sp_lock查询锁,发现当前TableName 表产生了三个锁:RID(行锁),PAG(数据页),TAB(表)
1问题:sql server 在修改时会自动产生这三种锁,是否可以设置为只产生RID(行锁)呢?
2如何在第一个查询未执行完时,执行第二个查询?
select * from TB(nolock)
但如果id不为主键也没有索引,那么查询2而必须等待查询1.
当我为表tablename的id建立主键(建立聚集索引)后
查询1未处理完时,查询2仍然等待,使用sp_lock查看当前TableName 表产生了三个锁:KEY(行锁),PAG(数据页),TAB(表)