最近一公司在为我单位在B/S平台上做生产调度管理,平台是MySQL4.0+Java。在测试过程中我发现开发人员没有对数据的并发进行控制。即两个人同时修改一条记录时,两个人均可提交,且最后提交人的数据会复盖前面修改人的记录。
本人对此提出异议后,软件开发人员告之,用生产管理系统中的权限管理,就可解决并发控制的问题!!!
我从未听说过此类解决方案,为此我们还发生了激烈的争论,请各位高手发言谈谈这个问题。
本人对此提出异议后,软件开发人员告之,用生产管理系统中的权限管理,就可解决并发控制的问题!!!
我从未听说过此类解决方案,为此我们还发生了激烈的争论,请各位高手发言谈谈这个问题。
http://blog.csdn.net/zjcxc/archive/2006/08/28/1133843.aspx
大家同意我的观点吗?
请各位高手发言谈谈这个问题,能否使用程序中的权限管理来避免并发的产生!!
对这一条记录进行修改时加上修改前的条件如:update table set aa=2 where aa=1(原来的值)
如果a操作员执行成功,B操作员就会失败。只要检测@@rowcount=1
而在B/S中,前台每次访问完数据库后,与数据库的连接就中断了。故在提交前需由前台程序进行相应判断。
而使用任何权限来限制用户的写操作(对同一条记录),从根本上是无法避免并发产生的!!!
自从早上将此贴地址通知程序的开发人员后,那里突然变得热闹起来了!
正不知道连这样简单的问题都解决不了,怎么去开发数据库。方法很简单:
对这一条记录进行修改时加上修改前的条件如:update table set aa=2 where aa=1(原来的值)
如果a操作员执行成功,B操作员就会失败。只要检测@@rowcount=1
--我觉得这个比较对 对要修改的表进行加锁 锁定某行
例如:
-- 对 wldwzl 进行加锁
update wldwzl set wldwbh=wldwbh where wldwid=@wldwid
if @@error<>0 (or @@rowcount<>1)
begin
raiserror('xxxx',16,1)
goto err_lab
end
--事务处理
if @tran_point=0
commit tran tran_xxx
goto return_laberr_lab:
rollback tran tran_xxxreturn_lab:
return @return
当处理完毕,提交事务
当然事先启动事务,成功后提交事务就可以了
1.大家在做MIS时是否对并发进行控制; 2.如果不进行控制,是否使用MIS里的权限管理就可以避免并发的产生。