Я пытаюсь сгенерировать таблицу последовательности в MySQL, чтобы я мог получить уникальные идентификаторы из last_insert_id
.
Проблема в том, что мне нужно несколько последовательностей динамически.
Сначала я создал таблицу:
CREATE TABLE `sequence` (
`label` char(30) CHARACTER SET latin1 NOT NULL,
`id` mediumint(9) NOT NULL DEFAULT '0',
PRIMARY KEY (`label`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
А потом попытался получить номер, используя пример из http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id
UPDATE sequence SET id = LAST_INSERT_ID(id + 1) WHERE label = 'test';
SELECT LAST_INSERT_ID();
Через некоторое время я понял, что мне также нужно безопасно генерировать строки для новых меток.
Поэтому я изменил эту схему на:
CREATE TABLE `sequence` (
`label` char(30) CHARACTER SET latin1 NOT NULL,
`id` mediumint(9) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`label`,`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
И я просто отказался от использования предложения WHERE
, чтобы обновить его идентификатор.
INSERT INTO sequence (label) values ( ? )
SELECT LAST_INSERT_ID()
Это правильный путь? Я хочу знать, есть ли лучшее решение.