插入记录,除非重复,在这种情况下更改唯一键列值并插入

时间:2019-05-03 11:05:39

标签: mysql spring-boot spring-data

我有一个使用Spring JdbcTemplate来在MySql数据库上执行数据库更新的Spring-Boot应用程序。

在应用程序中,我有一个表,该表具有由多个列组成的唯一索引,例如

UserId,
Start_Date,
End_Date,
Sequence_Id

我正在尝试将记录插入表中,但是,该记录可能已经存在但状态不同,例如“已取消” 和/或“已撤回”

在这种情况下,我希望将记录作为新记录(而不是更新)插入,但要增加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-这是否意味着我别无选择,只能执行插入,选择,插入在这种情况下还是有更有效的方法?

0 个答案:

没有答案