我有一个 Web 应用程序,其中的数据可以由用户同时更改。目前,我在每个表单中包含旧行值,并且仅当数据相同时才更新行。对于 SQLite,这是唯一的选择。这很丑陋,如果它能提供更好的方法,我会考虑切换到另一个 SQL 数据库。 PostgreSQL 或 MySQL 是否有隐含的行时间戳或版本号,可以用来代替?
最佳答案
使用数字计数器比使用时间戳更好。无论时间戳多么精确,都可能同时提交两个版本的数据并获得相同的时间戳。通过使用数字计数器(例如 update mytable set counter=counter+1, data=? where id=? and counter=?
),每次更改行时它都会获得一个唯一的计数器值。 (在 where 子句中提供原始计数器值,如果数据已被其他人更改,则不会匹配任何行。)
虽然这不是一个“隐含”的解决方案,但我认为还可以。 Hibernate 等库具有让您自动执行此类操作的工具,因此您的代码不必为此担心。
关于sql - PostgreSQL、MySQL 乐观并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4854279/