sql - PostgreSQL、MySQL 乐观并发

标签 sql mysql postgresql concurrency optimistic-concurrency

我有一个 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/

相关文章:

php - Mysql错误,在php中的登录页面传递两个参数

sql - Rails 计数从 pluck 返回的值

php - 如果不是非主行的副本,则sql查询仅更新

php - 在 MySQL 中使用 Group BY 获取行

MySQL:多次搜索单个表?

mysql - Rails 迁移 : update_all with dynamic code is possible?

php - SQLSTATE[HY000] [2002] 将 Laravel 应用程序部署到 Heroku 时连接被拒绝

xml - PostgreSQL - 通过更新行插入 XML 元素

SQL 查询同时获取 group by 和不同的值

mysql - 使用 mysql、Microsoft 1900 日期系统转换日期