Я рефакторинг процедуры импорта данных для корпоративного приложения и наткнулся на фрагмент, который я хотел бы найти лучшее решение. При импорте данных мы должны создать уникальный объект для каждого набора данных, и в поле есть счетчик, который будет использоваться для последовательного назначения этого идентификатора. Вы читаете поле, чтобы получить следующий свободный идентификатор, и затем увеличиваете его, чтобы подготовиться к следующему разу.
На данный момент это выполняется в два этапа в исходном приложении, написанном на «C»:
SELECT idnext FROM mytable;
UPDATE mytable SET idnext = idnext + 1;
Очевидно, что здесь есть условие гонки, если несколько процессов делают одно и то же.
Редактировать: Важное обязательное условие: я не могу коснуться определения базы данных / поля, это исключает последовательность.
Мы переписываем на Perl, и я хотел бы сделать то же самое, но лучше. Атомное решение было бы неплохо. К сожалению, мои навыки SQL ограничены, поэтому я обращаюсь к коллективной мудрости: -)