MySQL SELECT… FOR UPDATE вызывает блокировку таблицы во время большого трафика при генерации последовательных идентификаMySql

Форум по Mysql
Ответить
Anonymous
 MySQL SELECT… FOR UPDATE вызывает блокировку таблицы во время большого трафика при генерации последовательных идентифика

Сообщение Anonymous »

У меня есть проект PHP + MySQL, в котором мне нужно сгенерировать идентификаторы последовательных транзакций.

Каждая транзакция может иметь несколько элементов, поэтому все строки этой транзакции должны иметь одно и то же значение 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
Проблема
Чтобы сгенерировать номер следующей транзакции (, TXN005 и т. д.) Я использую:

Код: Выделить всё

SELECT last_number FROM txn_allot
WHERE module='STORE_IN'
FOR UPDATE;
Затем я увеличиваю число и обновляю последний_номер.
Это работает, но когда несколько пользователей вводят данные одновременно,

таблица txn_allot блокируется, что приводит к большим задержкам до снятия блокировки.
Вопрос
Каков наилучший способ безопасного доступа? генерировать последовательные уникальные идентификаторы транзакций без блокировки на уровне таблицы при возникновении нескольких одновременных запросов?
Примечания:
  • База данных MySQL (InnoDB)
  • Бэкенд PHP
  • Требование: идентификаторы транзакций должны быть уникальными и последовательный (без дубликатов)


Подробнее здесь: https://stackoverflow.com/questions/798 ... -generatin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»