mysql - 插入记录,除非重复,在这种情况下更改唯一键列值并插入
问题描述
我有一个使用 Spring JdbcTemplate 对 MySql 数据库执行数据库更新的 Spring-Boot 应用程序。
在应用程序中,我有一个表,该表具有由许多列组成的唯一索引,例如
UserId,
Start_Date,
End_Date,
Sequence_Id
我正在尝试向表中插入一条记录,但是,该记录可能已经存在但具有不同的状态,例如"cancelled"和/或"withdrawn"。
在这种情况下,我希望将记录作为新记录(不是更新)插入,但增加Sequence_Id
.
因此,如果表中存在以下记录:
UserId | Start_Date | End_Date | Sequence_Id | Status
1 | 01-01-2019 | 01-02-2019 | 1 | C
那么如果我尝试插入相同的记录,但状态为 A ,那么我会期待这个结果:
1 | 01-01-2019 | 01-02-2019 | 2 | A
我正在寻找最有效的方法。因此,例如,如果两条记录已经存在,则Sequence_Id
需要将新记录的 更改为 3,然后再插入。
在绝大多数情况下,只会有一个记录,因此Sequence_Id
在超过 90% 的情况下将是 1 个。但是,有可能(罕见但并非不可能)可能有 2,3 或更多记录。
由于这种情况很少见,在每次插入之前执行选择似乎效率不高。但是,如果发现重复项,那么我需要找出Sequence_Id
该唯一索引的最大值,然后才能更改记录并插入 - 这是否意味着我别无选择,只能在这种情况下执行插入、选择、插入或有更有效的方法吗?
解决方案
推荐阅读
- android - 如何从一个html页面滑动到另一个页面
- executequery - 如何正确执行包含过程且在 Objectscript/Intersystems IRIS 中没有返回的查询
- javascript - ScrollView 分页问题
- android - 试图在 Android Studio 上运行一个 React 项目
- angular - 打印完整的原生元素与直接打印属性之间的差异
- powershell - Powershell 将数据转换为 json 进行解析
- google-chrome - 是否可以在谷歌浏览器中设置特定的 FPS 上限?
- python - selenium python中的下拉选项选择
- entity - Micronaut 3.0.3 中的 GormEntity 问题
- parsing - Haskell 解析,'<*' '*>' 如何解析分隔符之间的内容