Каждая транзакция может иметь несколько элементов, поэтому все строки этой транзакции должны иметь одно и то же значение txn_in.
Таблицы
[code]stock_inward[/code]
Код: Выделить всё
ID | txn_in | material_code | insert_dt
1 | TXN001 | MT001 | 2025-01-13 14:09:08
2 | TXN001 | MT002 | 2025-01-13 14:09:08
3 | TXN001 | MT003 | 2025-01-13 14:09:08
4 | TXN002 | MT002 | 2025-01-13 15:02:37
5 | TXN003 | MT009 | 2025-01-14 11:01:25
6 | TXN003 | MT006 | 2025-01-14 11:01:25
[code]txn_allot[/code]
Код: Выделить всё
ID | module | prefix | session | last_number
1 | STORE_IN | MIN | 25-26 | 3
Чтобы сгенерировать номер следующей транзакции (
Код: Выделить всё
TXN004Код: Выделить всё
SELECT last_number FROM txn_allot
WHERE module='STORE_IN'
FOR UPDATE;
Это работает, но когда несколько пользователей вводят данные одновременно,
таблица txn_allot блокируется, что приводит к большим задержкам до снятия блокировки.
Вопрос
Каков наилучший способ безопасного доступа? генерировать последовательные уникальные идентификаторы транзакций без блокировки на уровне таблицы при возникновении нескольких одновременных запросов?
Примечания:
- База данных MySQL (InnoDB)
- Бэкенд PHP
- Требование: идентификаторы транзакций должны быть уникальными и последовательный (без дубликатов)
Подробнее здесь: https://stackoverflow.com/questions/798 ... -generatin
Мобильная версия