mysql - INSERT … ON DUPLICATE KEY UPDATE with Condition
问题描述
我的表有 Cas 字段,我想在保存操作中实现 CompareAndSet
这是我的sql代码
INSERT INTO `test_cas_table`(id,name,cas) VALUES(3, "test data", 2)
ON DUPLICATE KEY UPDATE
id = VALUES(id),
name = VALUES(name),
cas = IF(cas = VALUES(cas) - 1, VALUES(cas) , "update failure")
因为 cas 字段是 BIGINT,什么时候cas != VALUES(cas) - 1
将其设置为“更新失败”会导致此执行失败
但是这种方式太丑了,有没有漂亮的实现?
我想知道postgresql有漂亮的实现吗?
我想在一次执行中实现它
解决方案
您的身份列是自动生成的吗?如果是这样,则无需检查重复项。只需插入您的新信息,您的数据库就会处理它。
但是,如果您有一个不是自动生成的身份列(例如电子邮件或官方文档,而不是自动递增的整数主键),您需要首先查询您的数据库以查找您将要保留的值。这样,您不会收到 SQLException (Java),而是检查您的查询结果并告诉用户更改其电子邮件或官方文档(如果它已被其他用户使用)。
推荐阅读
- python - 如何将声音字节转换为可以在变量中访问的 .wav 文件?
- android - 如何在android上实现couchbase lite?
- python - 在 Python-Networkx 中双向导航有向图
- r - R:is_symbol(x) 中的错误:对象“。” 未找到 (keras)
- r - 用 2 个数据框聚合列
- java - JDBC将变量插入数据库
- python - 如何从另一个脚本运行 CLI Python 脚本
- javascript - 不是客户端的有效来源: url 没有被列入 localhost NOT 127.0.0.1 的客户端 ID 白名单
- python - 使用选择器的非阻塞标准输入
- python-3.x - Django查询以连接来自两个模型的数据,没有主键或外键