我有一个使用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
-这是否意味着我别无选择,只能执行插入,选择,插入在这种情况下还是有更有效的方法?