• 多用户同时处理同一条数据解决办法


    在c/s或多层中,如果两个用户同时打开一条记录,修改后提交会产生更新冲突;
    据说办法有二:1。打开同时锁定表的记录 2。浦获错误,撤消其中一个用户的修改,但是很少见到具体实现的代码;请大家告诉具体的代码怎么写:
    1。打开时如何锁定一条记录?
    2。如何扑获更新错误?在delphi中调试时会报“该记录读出后已经被再次修改”,而在运行时如何判定错误为更新冲突?因为更新时其他的错误如输入不合法等也可能报错,如何把更新冲突和其他的分开?

    =====================================================================

    http://hi.baidu.com/nboy/blog/item/8d61c93d8ab3dec19f3d6288.html

    首先,这个问题只有在特殊情况下才算是问题,大多数情况下可以不作考虑。

    然后,这是问题很难描述清楚,解决方案有多种,下面提供一种较方便易用的方式

    场景(问题)描述如下:

    0,用户A、B同时打开一个页面,页面显示,客户表T_CUSTOMER字段(C_NAME、C_AGE)

    姓名:张三,年龄:25

    1,A 将姓名“张三”改为“张三1”,然后保存

    2,B 将年龄“25”改为“30”,然后保存

    这样A的操作就被覆盖了,姓名又变回“张三”了,大家一般怎么处处这种情况?

    这里给出一个较易用的解决方案

    给表添加一字段:LAST_UPDATE,即最后更新时间

    回放场景

    0,用户A、B同时打开一页面,面页显示:

    姓名:张三,年龄:25,LAST_UPDATE:2008-10-17 13:45:00

    1,A 将姓名“张三”改为“张三1”,然后保存

    重点在这里:更新数据时WHERE条件里多一条件:AND LAST_UPDATE = '2008-10-17 13:45:00'

    更新成功,此时触发器会将当前时间“2008-10-17 13:46:00”赋值给LAST_UPDATE

    2,B 将将年龄“25”改为“30”,然后保存

    B更新数据时WHERE条件里也有这个条件:AND LAST_UPDATE = '2008-10-17 13:45:00',但此时LAST_UPDATE的值已经在A修改记录时变成2008-10-17 13:46:00

    下面要做的就是给出提示了:喔哟,此信息在你发呆这段时间已被人改过啦,所以你需要返工。

    触发器代码如下:
    ===================================================
    CREATE OR REPLACE TRIGGER T_CUSTOMER
    BEFORE UPDATE ON T_CUSTOMER
    FOR EACH ROW
    /*
    记录最后修改时间
    */
    BEGIN
    :NEW.LAST_UPDATE := SYSDATE;
    END;
    ===================================================

    如果触发器不熟悉或者只是不喜欢用触发器,完全可以修改记录时同时给LAST_UPDATE字段赋值,以此替代触发器的作用。

    ----------------------------------------------------------------------------------------------------------------

    http://blog.csdn.net/onemetre/archive/2010/11/06/5991658.aspx

  • 相关阅读:
    在安装了Anaconda+Pycharm怎么导入OpenCV
    JS--ECMAScript
    JS--DOM
    JS-BOM
    浮动 高度塌陷
    CSS2--字体样式
    CSS2--文本样式
    css2--垂直对齐
    css2--背景
    HTML基础
  • 原文地址:https://www.cnblogs.com/xujie520/p/5962373.html
Copyright © 2020-2023  润新知