У меня есть приложение Spring-Boot, использующее Spring JdbcTemplate для выполнения обновления базы данных в базе данных MySql.
В приложении у меня есть таблица с уникальным индексом, состоящим из нескольких столбцов, например
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
будет 1 в более чем 90% случаев.Однако возможно (редко, но не невозможно), что может быть 2,3 или более записей.
Из-за редкости ситуации было бы неэффективным выполнять выбор перед каждой вставкой.однако, если будет найден дубликат, мне нужно будет найти максимум Sequence_Id
для этого уникального индекса, прежде чем я смогу изменить запись и вставить - это значит, что у меня нет выбора, кроме как выполнить вставку, выбрать, вставить в этуСитуация или есть более эффективный способ?