本帖最后由 qmanzbxv 于 2014-04-25 19:42:44 编辑

解决方案 »

  1.   

    在同一个事务中,10:01的时候执行了更新语句,然后01--02做了其他操作,并在02分提交事务。问题是:你在01分的时候,怎么就知道这个事务会在02分结束且做了提交,而不是03分或者其他时间点?在commit的前面加一句update,只更新Ur_UpdateTime,这样做是否符合你的业务需求?
      

  2.   

    哈哈哈我看明白了 其实很简单的有俩种方法供参考
    时间拉链:10:00:00 的时候开始了一个数据事物为第一条 Ur_UpdateTime=10:00:00 start_date=10:00:00 end_date=虚拟的最大值
                     end_date=10:01:00
                     10:01:00 数据修改  时间为Ur_UpdateTime=10:01:00 start_date=10:00:0修改第一条数据的结束时间end_date=虚拟的最大值     end_date=10:02:00
                     10:02:00 数据修改  时间为Ur_UpdateTime=10:02:00 start_date=10:00:0修改第二条数据的结束时间end_date=虚拟的最大值
                      剩下的以此类推
    时间拉链较数据冗余较高,但是可以存数据变化历史,方法好实现
    第二中就是写触发器
    如果数据量不是过百万还是可以提倡的用用触发器获得新值:NEW.字段 insert 到一张临时表.临时表存的就是宿主文件发生变化的值.
                
      

  3.   

    对这个表UserInfo 写一个after update的触发器,更新这批数据时间,这样可以么?不过不太建议用触发器;
    或者建一个日志表,给每次更新加一个批次,日志表里记录时间
      

  4.   

    客户端做增量数据更新的时候会漏掉,这个是客户端的逻辑设计有问题吧。客户端非得设计成按照时间增量更新吗?可以参考oracle的数据块多版本设计思路,这样就能摆脱时间的限制,获取正确的增量更新数据。
      

  5.   

    这个时候Ur_UpdateTime的值为10:01:00。但是实际数据Commit的时间是10:02:00。这样导致客户端做增量数据更新时会漏掉(因为事务未提交而查不到)
    这个没有问题, 10:02:00 你还有可能 rollback 呢。