sqlite - SQLite:在 upsert 后获取更新的字段
问题描述
SQLite(和其他 RDBMS,如 PostgreSQL)允许您执行插入,如果存在冲突,则改为执行更新。但是,获取更新的最终值似乎很棘手。
以这个答案为例:
INSERT INTO players (user_name, age)
VALUES('steven', 32)
ON CONFLICT(user_name)
DO UPDATE SET age=excluded.age;
假设我实际上需要知道age
最终设置为什么。使用 PostgreSQL,您可以说RETURNING age
,在尝试使用 SQLite(至少是 3.34.0[1])做同样的事情时,这似乎是一个语法错误。如果我只是在之后立即执行读取操作,那么在我的写入完成之后和读取开始之前,另一个操作可能会突然介入并更新该行,从而将误导性结果返回给原始调用者。
- 是否有任何等效的语法与
RETURNING
SQLite 支持按描述进行原子写入和读取? - 如果没有,也许还有其他我应该遵循的模式
begin transaction-write-read-commit
?
谢谢!
[1] 特别是 xerial/sqlite-jdbc 3.34.0。
解决方案
推荐阅读
- c++ - 将字符数复制到新字符串位置的字符串操作,例如 S[0]
- javascript - 在shopify网站中滚动顶部未定义
- openssl - TLS - 用于 ECDHE 的曲线
- java - 多个类加载器和 Hadoop API
- c# - 第二次将位图保存到 MemoryStream 时出错
- java - 我们如何强制在 xml 文件中输入自动化 java 类的路径?
- excel - 参考组合框中选择的值,用户表单上有两列
- asp.net - Oracle 托管数据访问 - 如何在代码中动态配置 TNS_ADMIN?
- mongodb - Hibernate OGM 与云 MongoDB Atlas M0 的使用(免费套餐)
- numpy - 如何在 cython 中键入我的变量,以便它们更快地传递到 memoryview 数组?