大伙是如何解决C/S数据库中多人同时修改一条记录的?(100分)

  • 主题发起人 zhbforce
  • 开始时间
B

barton

Unregistered / Unconfirmed
GUEST, unregistred user!
对于记录锁定的问题似乎不需要这么复杂吧,尤其ggpp的话简直让人费解。如果在应用程序中还需要
控制记录锁定的话,还需要昂贵的DBMS干什么?自己写个Oracle得了。每一个数据库都有自己的锁定
方式,很多数据库不是在记录一级而是在页面一级。我曾经还听说mssql是表一级(当然这不可信)。
锁定记录只是在Insert/Delete/Update执行时才需要的。而这些语句执行很快,加上数据库服务器中
的事务及缓冲技术,基本上在应用程序一级是不用考虑的。
 
G

ggqq

Unregistered / Unconfirmed
GUEST, unregistred user!
所谓记录锁定的问题,当然是在多人共用产生并发控制的时候才提出的,而且要根据应用的
实际情况来控制,很多时候不得不自己去做一些事情来控制事务的活动和锁的活动。

如果DBMS能做一切事情的话,嘿嘿,那可太好了。

ORACLE提供LOCK TABLE 这样的命令,就是用来锁表用的

SYBASE加的是页锁,ORACLE缺省加的是行锁,SQLSERVER加的可以是页锁和行锁。

知道数据库怎么锁定记录,再加上自己程序里的一些控制,才可以做很多事情了。
 
K

kthy

Unregistered / Unconfirmed
GUEST, unregistred user!
应用大型的DBMS,通常用户不必考虑记录加锁的问题,开发者主要将精力
放在应用方面。

事务处理主要作用是为了保持数据的完整性。比如,在一个事务中,需要
同时对多个表作修改,如果当时有一个或多个表中的部分记录被别人锁定,
则需要回滚事务,所有已经作的修改全部失效。在适当地时候,再次提交。
这样,可以保证数据完整一致。

虽然有些数据库有加锁的命令,但通常极少用到。
 
Z

zhbforce

Unregistered / Unconfirmed
GUEST, unregistred user!
谢谢大家!
 
Z

zzh0918

Unregistered / Unconfirmed
GUEST, unregistred user!
我觉得不用考虑加锁的问题。因为即使加锁只能限制别人不能修改你正在处理的的纪录。
但是别人不可能知道你正在处理这一条纪录,特别是在使用BATCH 方式的时候。如果另
外一个人修改了,在提交是仍然会报错。我们做程序的关键是不能防止错误,但是你的
程序一定要能够处理错误。所以我认为不用考虑锁纪录的问题,要考虑的是出现上述问
题时如何处理的问题。一种方法是启动事务管理,另一种方法是自己编制错误处理程序
 
Z

zhbforce

Unregistered / Unconfirmed
GUEST, unregistred user!
多人接受答案了。
 

Similar threads

D
回复
0
查看
731
DelphiTeacher的专栏
D
D
回复
0
查看
703
DelphiTeacher的专栏
D
顶部