Мне нужно создать ссылку на штрих-код для каждого полученного заказа. Первый штрих-код 200000 и увеличивается на 1 для каждого последующего заказа. Я должен быть абсолютно уверен, что я не назначаю один и тот же штрих-код более чем одному заказу. Проект получает много заказов и часто очень быстро.
Чтобы решить эту проблему, я создал таблицу базы данных MySQL с именем barcodes
с первичным ключом с автоматическим приращением. Идентификатор первой строки - 200000.
Каждый раз, когда мне нужно сгенерировать штрих-код, я делаю вставку в таблицу barcodes
и затем использую PHP mysqli_insert_id()
для вставки идентификатора. Затем я обновляю таблицу orders
, чтобы штрих-код был установлен на это значение.
Это хорошо работает и не позволяет мне присвоить один и тот же штрих-код более чем одному заказу.
Есть ли лучший способ? В идеале у меня была бы одна таблица, в которой я храню следующий доступный идентификатор и затем выполняю два запроса:
select next_barcode from barcodes where id=1
И затем
update barcodes set next_barcode=next_barcode+1 where id=1
Моя проблема в том, что мой код может вызывать функцию который выполняет SELECT в одно и то же время (т. е. до выполнения ОБНОВЛЕНИЯ) и два заказа получают один и тот же штрих-код.
Возможно, существует надежный подход к блокировке таблицы? Или, может быть, мой нынешний подход - лучший способ go?