Создание схемы последовательности в MYSQL без AUTO_INCREMENT - PullRequest
0 голосов
/ 22 ноября 2018

Я хочу запустить последовательность для каждого клиента, чтобы у каждого из них была серия идентификаторов, начиная с 1:

Clients:
+----+-------+
| id | name  |
+----+-------+
|  1 | Dave  |
|  2 | Sarah |
+----+-------+

Tickets:
+----+-----------+----------+----------------------------+
| id | clientID  | sequence |  title                     |
+----+-----------+----------+----------------------------+
|  1 |         1 |        1 | Title 1                    |
|  2 |         1 |        2 | Another title for Client 1 |
|  3 |         2 |        1 | Different Title            |
+----+-----------+----------+----------------------------+

Каков наилучший способ сделать это (с точки зрения скорости и целостности данных)?У меня есть что-то вроде этого при вставке:

Добавить новый билет для Дэйва

SELECT COALESCE( (MAX(sequence) + 1), 1) as nextSeq WHERE id = 1 FROM tickets

затем

INSERT INTO tickets (... sequence) VALUES (... nextSeq)

Зачем нужен COALESCE?

Когда запись является первой в своей серии, MAX () будет возвращаться пустым, поэтому по умолчанию пустым будет 1.

Почему мне нужен порядковый номер в пользовательской области?

Это система захвата документов, отображающая множество табличных данных, у меня есть несколько объектов;Система, риск, тикет, процесс и я использую числа с названиями, чтобы помочь пользователям отслеживать свои записи.Хотя в таблицах первоначальный результат будет упорядочен по этому идентификатору, следовательно, я не хочу нумерацию глобальных идентификаторов.Я оставляю столбец auto_incremented для других внутренних операций, объединений, личных ссылок и т. Д.

1 Ответ

0 голосов
/ 22 ноября 2018

Вы можете сделать это как одно утверждение

   INSERT 
     INTO ticket (clientID, sequence, title)
   SELECT clientID,
          MAX(sequence) + 1,
          "Dave's New Ticket"
     FROM ticket
    WHERE clientID = 1 /** Dave */
 GROUP BY clientID

.. но я не совсем уверен в производительности по сравнению с двумя отдельными утверждениями.Обратите внимание, что GROUP BY на самом деле не является обязательным в MySQL

. Также стоит задаться вопросом, является ли порядковый номер сам по себе абсолютно необходимым, и что вы пытаетесь сделать с ним

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...