我有一个通用的Java多用户客户端服务器CRUD系统,其中每个用户都通过SELECT
获取所有项,通过INSERT
添加新项,通过DELETE
删除现有项,并通过UPDATE
修改现有项。] >
所有表均包含date_last_modified TIMESTAMPTZ
和user_last_modified INTEGER REFERENCES users(id)
列。
我想避免以下情况:首先每个用户SELECT
拥有所有项目,然后几个用户修改相似的项目,而每个随后的UPDATE都会覆盖先前的数据。
我正在尝试创建一个UPDATE
查询,用于比较客户端和服务器上的date_last_modified
值,如果值不相等(表示有人已经对其进行了修改,则中止查询。)>
如果存在另一种方法来处理缓存项目较旧的情况,那么欢迎您使用DB中的方法。
我有一个通用的Java多用户客户端服务器CRUD系统,其中每个用户都通过SELECT获取所有项,通过INSERT添加新项,通过DELETE删除现有项,并通过...]修改现有项。] >> [[
date_last_modified
来避免中止查询(也避免在事务中预先查询时间戳以比较这些值)>UPDATE ... WHERE ... AND date_last_modified = ?
如果时间戳不匹配,则不更新任何行。
Statement.executeUpdate(...)
返回更新的行数。如果为0,则可以通知用户竞争状况(并在需要时回滚事务)。
您也可以为此添加列serial update_count
。但是,如果每次更新都更改该值,则timestampz
可以。
date_last_modified
来避免中止查询(也避免在事务中预先查询时间戳以比较这些值)>UPDATE ... WHERE ... AND date_last_modified = ?