在sqlserver中,如果两个人同时对某表中的一条纪录进行操作,一个人在修改完后没有提交,而另一个人也在修改,为什么sqlserver不能锁住此纪录。能不能告诉我sqlserver到底怎么锁住这样的纪录?
只能用标识字段了,如果一人对记录写操作则不允许另外的进行写操作。
这是SQL的特点,不能锁定,要不你就人为操作吧,在每一记录后加一标志位,修改时将其置1,改完置0,修改前先看标志字段吧
sqlserver 采用的是排队方式,
也就是两个用户都在提交时,
只会保存最后一个用户的提交数据。
你有没有使用事务?数据库的锁定是以事务为单位的,事务结束时自动解除锁定。如果你没有使用事务,那么每次操作都是一个事务,每一次操作后锁定都会被解除。
Select * from MyTeble For Update
如果两个连接都用这条语句打开,后打者就会等待直到先打开者的事务结束才会返回。
同意楼上的,sql的确最后保存的是最后一次的修改,不过从编程来看,我们可以自已来加锁,每个想要修改的用户先申请锁,申请到了的可以修改数据,没有申请到的只有浏览的权利,无法修改数据,即所谓人工加锁的方式,很简单也很实用,并且安全。
var Level : integer;
...
begin
Level := ADOconnection1.BeginTrans;
try
// Whatever ... updating, deleting, or inserting
ADOConnection1.CommitTrans;
except
on E: Exception do ADOConnection1.RollbackTrans;
end;
要不能同时修改的话你用pardox好了!
完全能满足你的要求!
不需要人工加锁,只要你把相关操作作为一个事务,对于需要修改的查询都加上"For Update"就可以了.