Я пишу небольшую часть программного обеспечения для вставки записей в базу данных, используемую коммерческим приложением. Уникальные первичные ключи (идентификаторы) в соответствующей таблице (таблицах) являются последовательными, но, по-видимому, они не установлены на «автоинкремент». Таким образом, я предполагаю, что мне придется найти самый большой идентификатор, увеличить его и использовать это значение для записи, которую я вставляю.
В псевдокоде для краткости:
id = select max(id) from some_table
id++
insert into some_table values(id, othervalues...)
Теперь, если другой поток запустил ту же транзакцию до того, как первый завершил вставку, вы получите два идентичных идентификатора и ошибку при попытке вставить последний. Вы можете проверить этот сбой и повторить попытку, но более простым решением может быть установка уровня изоляции транзакции. Для этого мне нужен SERIALIZABLE или более низкий уровень?
Кроме того, это, как правило, разумный способ решения проблемы? Есть ли другие способы сделать это?