我有一个数据库DB
,其中包含表T
(id
int,version
时间戳)和适用于此数据库和表的应用程序APP
。我需要做什么:
T
。T
中选择一些行。curTimeStamp
。 T
。version
> curTimeStamp
。他们的version
是使用SQL函数在UPDATE语句中设置的,例如now()
,current_timestamp()
等等。我的意思是UPDATE T SET version=now()
; 在阅读了大量信息后,我想到了这样的解决方案:
read committed
隔离级别启动SQL事务。T
curTimeStamp
。但是,某些RDMS(例如H2 and Posgtresql)在一个事务中返回now()
个函数的相同值。然后据我所知,如果某些更新事务在我的选择事务之前启动并且更新事务在选择事务之后完成,那么row.version
将是< curTimeStamp
。
我在SQL事务中不是很好,我对我的解决方案有疑问。这个解决方案是否正确如果没有,请表明我的错误和正确的方向。