使用时间戳

时间:2017-04-20 17:20:08

标签: sql database postgresql transactions h2

我有一个数据库DB,其中包含表Tid int,version时间戳)和适用于此数据库和表的应用程序APP。我需要做什么:

  1. 锁定表T
  2. 从表格T中选择一些行。
  3. 获取当前时间curTimeStamp
  4. 解锁表T
  5. 解锁表后,所有行都会更新(#4)必须有version> curTimeStamp。他们的version是使用SQL函数在UPDATE语句中设置的,例如now()current_timestamp()等等。我的意思是UPDATE T SET version=now();
  6. 在阅读了大量信息后,我想到了这样的解决方案:

    1. read committed隔离级别启动SQL事务。
    2. 执行SELECT语句以获取表T
    3. 的行
    4. 执行SELECT以获取curTimeStamp
    5. 提交SQL transcation。
    6. 但是,某些RDMS(例如H2 and Posgtresql)在一个事务中返回now()个函数的相同值。然后据我所知,如果某些更新事务在我的选择事务之前启动并且更新事务在选择事务之后完成,那么row.version将是< curTimeStamp

      我在SQL事务中不是很好,我对我的解决方案有疑问。这个解决方案是否正确如果没有,请表明我的错误和正确的方向。

0 个答案:

没有答案