最近一公司在为我单位在B/S平台上做生产调度管理,平台是MySQL4.0+Java。在测试过程中我发现开发人员没有对数据的并发进行控制。即两个人同时修改一条记录时,两个人均可提交,且最后提交人的数据会复盖前面修改人的记录。
    本人对此提出异议后,软件开发人员告之,用生产管理系统中的权限管理,就可解决并发控制的问题!!!
    我从未听说过此类解决方案,为此我们还发生了激烈的争论,请各位高手发言谈谈这个问题。

解决方案 »

  1.   

    给你参考参考
    http://blog.csdn.net/zjcxc/archive/2006/08/28/1133843.aspx
      

  2.   

    我认为由于B/S结构不能象C/S结构那样始终于数据库相连,所数据本身进行并发控制的功能就被虚弱了,故在提交前需要前台程序进行相应判断。而使用任何权限来限制用户的写操作(对同一条记录),从根本上是无法避免并发产生的!
    大家同意我的观点吗?
      

  3.   

        我认为由于B/S结构不能象C/S结构那样始终与数据库相连,所以数据库本身进行并发控制的能力就被削弱了,故在提交前需要前台程序进行相应判断。而使用任何权限来限制用户的写操作(对同一条记录),从根本上是无法避免并发产生的!
        请各位高手发言谈谈这个问题,能否使用程序中的权限管理来避免并发的产生!!
      

  4.   

    正不知道连这样简单的问题都解决不了,怎么去开发数据库。方法很简单:
    对这一条记录进行修改时加上修改前的条件如:update table set aa=2 where aa=1(原来的值)
    如果a操作员执行成功,B操作员就会失败。只要检测@@rowcount=1
      

  5.   

       在C/S中前台开发工具的控件始终与数据库连接着,故出现并发时数据库会自已管理,即使前台不写程序也可实现对并发的控制。
       而在B/S中,前台每次访问完数据库后,与数据库的连接就中断了。故在提交前需由前台程序进行相应判断。
       而使用任何权限来限制用户的写操作(对同一条记录),从根本上是无法避免并发产生的!!!

       
      

  6.   

    我也在ITPUB中发了此贴,大家也可去那边看看:http://www.itpub.net/865535,1.html
    自从早上将此贴地址通知程序的开发人员后,那里突然变得热闹起来了!
      

  7.   

    lh437  发表于:2007-10-04 20:09:027楼 得分:0 
    正不知道连这样简单的问题都解决不了,怎么去开发数据库。方法很简单: 
    对这一条记录进行修改时加上修改前的条件如: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
    当处理完毕,提交事务
     当然事先启动事务,成功后提交事务就可以了
      

  8.   

    这个问题实际上不见得要使用锁来解决这个问题,我以前做的三层B/S系统由于是通过WEB Service进行数据交换的,所以使用了时间戳字段来进行处理。不知大家使用什么方法来解决的!
      

  9.   

    我发本贴的目的只是想讨论两个问题: 
      
       1.大家在做MIS时是否对并发进行控制;    2.如果不进行控制,是否使用MIS里的权限管理就可以避免并发的产生。