@bioforge
Верстающий пыхер

Как лучше хранить и добавлять порядковый номер в таблице?

Добрый день!

Столкнулся с проблемой, что при большом кол-во потоков в базе начинают появлятся дубли для порядкового номера документа.

Работает так, что перед записью в таблицу инкрементируется последний порядковый номер:
SELECT ui_id+1 FROM deals WHERE user_id = 1 ORDER BY ui_id DESC LIMIT 1;

и передаётся в новую запись
INSERT INTO `deals` (`id`, `ui_id`, `user_id`) VALUES (NULL, "5", "1")


Как лучше избежать такой проблемы ?
  • Вопрос задан
  • 80 просмотров
Пригласить эксперта
Ответы на вопрос 3
Vovanys
@Vovanys
А зачем вообще использовать ui_id если id уже должен быть уникальным ID с автоинкрементом.
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Полностью блокировать таблицу до окончания записи.
LOCK TABLES `deals` FOR WRITE;
...
UNLOCK TABLES;

Никакой другой поток не получит доступа к таблице до её разблокировки.
Ответ написан
@PapaStifflera
Родился, вырос...
Как-то так:
Создаете таблицу для хранения последовательности (лучше с движком MyISAM):
mysql> CREATE TABLE sequence (id INT NOT NULL);
mysql> INSERT INTO sequence VALUES (0);


Инкремент:
mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1);


Получение результата:
mysql> SELECT LAST_INSERT_ID();
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы