首页 > 解决方案 > 插入记录,除非重复,在这种情况下更改唯一键列值并插入

问题描述

我有一个使用 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该唯一索引的最大值,然后才能更改记录并插入 - 这是否意味着我别无选择,只能在这种情况下执行插入、选择、插入或有更有效的方法吗?

标签: mysqlspring-bootspring-data

解决方案


推荐阅读