如何在SQLSERVER的數據表中只是鎖定那條紀錄的那個字段?請高手幫幫忙!無限感激

hatedeadlock 2003-09-14 07:39:48
我隻知道在SQLSERVER 可以使用 ROWLOCK 來鎖定行紀錄 可是怎樣
鎖定 那行 那個字段呢!其他字段不鎖
...全文
64 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
txlicenhe 2003-10-06
  • 打赏
  • 举报
回复
恭喜楼主,楼主的ID真有意思。 hatedeadlock,经常碰到死锁所以讨厌死锁?
hatedeadlock 2003-10-06
  • 打赏
  • 举报
回复
我将有同时更新的字段分开!让程序更新不同的表

问题解决了!谢谢大家的回复!
hatedeadlock 2003-09-29
  • 打赏
  • 举报
回复
重新説明:
客戶端的瀏覽 都是 select * from table nolock (允許髒讀)
問:
如果同時有100個人 同時 執行select * from table nolock

這個時候 到底能不能更新數據表呀?
pengdali 2003-09-24
  • 打赏
  • 举报
回复
1 如何锁一个表的某一行


A 连接中执行

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ

begin tran

select * from tablename with (rowlock) where id=3

waitfor delay '00:00:05'

commit tran

B连接中如果执行

update tablename set colname='10' where id=3 --则要等待5秒

update tablename set colname='10' where id<>3 --可立即执行

2 锁定数据库的一个表

SELECT * FROM table WITH (HOLDLOCK)


注意: 锁定数据库的一个表的区别

SELECT * FROM table WITH (HOLDLOCK)
其他事务可以读取表,但不能更新删除

SELECT * FROM table WITH (TABLOCKX)
其他事务不能读取表,更新和删除
leimin 2003-09-22
  • 打赏
  • 举报
回复
问:有什么样的办法 让几个程序 同时调用 同一个或者不同存贮过程 同时更新数据表的 同一行的不同字段时 互不干扰 各完成各的操作?
A:mssqlserver2000默认的lock 的粒度是行级,所以如果一个线程在update一条记录时,就在该行加了排他锁,所以其它的线程是无法读取该记录(除非可以脏读),这是因为在mssqlserver中是不可以同时给一条记录加不同的锁。另外mssqlserver没有锁某一列的锁!

所以让几个程序 同时调用 同一个或者不同存贮过程 同时更新数据表的 同一行的不同字段时如果一个在更新,其他的就只能WAIT....

happydreamer 2003-09-17
  • 打赏
  • 举报
回复

1 如何锁一个表的某一行


A 连接中执行

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ

begin tran

select * from tablename with (rowlock) where id=3

waitfor delay '00:00:05'

commit tran

B连接中如果执行

update tablename set colname='10' where id=3 --则要等待5秒

update tablename set colname='10' where id<>3 --可立即执行
txlicenhe 2003-09-17
  • 打赏
  • 举报
回复
用触发器吧
if update(Field1)
....
if Update(Field2)
...
hatedeadlock 2003-09-17
  • 打赏
  • 举报
回复
问题是这样的:
有几个程序 他们可能同时调用 同一个存贮过程 同时更新数据表的 同一行的不同字段
这样在变化激烈的时候数据库老是会出现DEADLOCK!
我在存贮过程中加上
declare @CurrentTimeout int
begin transaction firstupdate
Set Transaction isolation level read uncommitted
select @CurrentTimeout = @@lock_timeout
if @CurrentTimeout<>3000 SET LOCK_TIMEOUT 3000
........
if @@error=0 commit tran else rollback tran 可是这样一样解决不了问题!更坏的是他会丢失更新!
问:有什么样的办法 让几个程序 同时调用 同一个存贮过程 同时更新数据表的 同一行的不同字段时 互不干扰 各完成各的操作
nboys 2003-09-14
  • 打赏
  • 举报
回复

1 如何锁一个表的某一行

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

SELECT * FROM table ROWLOCK WHERE id = 1

2 锁定数据库的一个表

SELECT * FROM table WITH (HOLDLOCK)

加锁语句:
MSSQL:
select col1 from 表 (tablockx) where 1=0 ;
加锁后其它人不可操作,直到加锁用户解锁,用commit或rollback解锁

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧