更新数据库时是否需要锁表,有没有比较优秀的方案
在做一个进销存系统,有三十个终端,前台已输入的多条商品,更新库存时,我先把全表加独占锁,再逐条更新库存记录,提交后解锁,不知这样的思路对不对。我看过一个医院系统在五个终端,在处理库存时没有加锁,效果也还可以,但是我在目前的系统上试了一下却有死锁的问题。有没有更好的方法。 问题点数:0、回复次数:9Top
1 楼wn98()回复于 2004-12-01 10:51:31 得分 0
补充一点,数据库为SQL SERVER 2000.Top
2 楼windljf(精神领袖)回复于 2004-12-01 11:17:29 得分 0
你是自己管理和维护锁,而不是由SQL SERVER 2000管理的吗?有你累的Top
3 楼zhangjiecsdn(求新)回复于 2004-12-01 21:51:09 得分 0
你怎么处理并发呢?
如果甲乙分别检索数据后,甲删除一行的同时,乙增加一个内容相同的行,先后提交...
难道不允许乙提交吗?Top
4 楼wn98()回复于 2004-12-02 09:19:12 得分 0
1.如果不是自已管理,那么更新多行时,如何保证不被死锁。
2.正因为要考虑并发的事,所以我认为我的处理不恰当,所以请教更好的办好。Top
5 楼sbks(hwnd,&rect)回复于 2004-12-02 20:26:48 得分 0
1.锁最好由数据库管理系统自己来管理
2.用数据窗口中的update properties中设置是可以达到并发时控制的问题,以前有过文章,你找找看,理解了update properties的设置,你的问题也不是什么问题了。Top
6 楼sbks(hwnd,&rect)回复于 2004-12-02 20:28:59 得分 0
设置不同的update条件,如果数据库有变化,update()就会失败,那么弹出信息给用户:告诉用户数据有变,让用户重新检索数据。这样做就可以了。Top
7 楼hygougou(uoguogyh)回复于 2004-12-04 02:20:56 得分 0
对表有更新的操作都记得提交就是了,基本不会锁表,另SQL 2000在select 的时候也有锁表的时候,一般多发在高峰期,即并发频繁的时候,如出现这样的情况也要提交,不过不是普遍现象,还有程序在更新表的时候突然断电和电脑死机没有执行提交代码的情况,这也要充分利用好数据库的自动提交属性了,建议连接数据库的时候用sqlca.AutoCommit = FALSE,这样初始是不自动提交的,提交由自己掌握,就不会出现有意外的时候却提交不上造成的锁表现象,本人是碰到过的,一太破电脑偶尔死机,就他那部分更新的数据被锁住了,PB删也删不掉,retrieve(即select)也不行,只能进SQL解锁Top
8 楼bunnysky(松鼠)回复于 2004-12-05 13:39:49 得分 0
这些其实你完全可以不去考虑的,数据数据库自己去管理就可以了呀!除非你要在前台做大数据量的更新可能花的时候较长的时候才会考虑手动去管理。自己管理容易出问题!Top
9 楼liqunen(liqunen)回复于 2004-12-05 19:11:44 得分 0
有些锁真的很怪,同样的表结构,同样的写入方式,相同类似的触发器,一个表会锁一个表不会锁,真的很怪,sqlca.AutoCommit = FALSE像这种情况,有时正在提交,死机,同样会锁,我用的是sql server200企业版,我在想,是不是这个更容易上锁请大家帮忙????Top




