Если вам нужно поле автоинкремента с непервичными ключами, очень приятное MySQL-решение для создания последовательностей арбитража - использовать относительно неизвестную функцию last_insert_id(expr)
.
Если выражение задается в качестве аргумента LAST_INSERT_ID(), значение аргумента возвращается функцией и запоминается как следующее значение быть возвращен LAST_INSERT_ID(). Это может быть использована для моделирования последовательностей ...
(от http://dev.mysql.com/doc/refman/5.1/en/information-functions.html#function_last-insert-id)
Ниже приведен пример, который показывает, как вторичная последовательность может быть сохранена для нумерации комментариев для каждого сообщения:
CREATE TABLE `post` (
`id` INT(10) UNSIGNED NOT NULL,
`title` VARCHAR(100) NOT NULL,
`comment_sequence` INT(10) UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
);
CREATE TABLE `comment` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`post_id` INT(10) UNSIGNED NOT NULL,
`sequence` INT(10) UNSIGNED NOT NULL,
`content` TEXT NOT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO post(id, title) VALUES(1, 'first post');
INSERT INTO post(id, title) VALUES(2, 'second post');
UPDATE post SET comment_sequence=Last_insert_id(comment_sequence+1) WHERE id=1;
INSERT INTO `comment`(post_id, sequence, content) VALUES(1, Last_insert_id(), 'blah');
UPDATE post SET comment_sequence=Last_insert_id(comment_sequence+1) WHERE id=1;
INSERT INTO `comment`(post_id, sequence, content) VALUES(1, Last_insert_id(), 'foo');
UPDATE post SET comment_sequence=Last_insert_id(comment_sequence+1) WHERE id=1;
INSERT INTO `comment`(post_id, sequence, content) VALUES(1, Last_insert_id(), 'bar');
UPDATE post SET comment_sequence=Last_insert_id(comment_sequence+1) WHERE id=2;
INSERT INTO `comment`(post_id, sequence, content) VALUES(2, Last_insert_id(), 'lorem');
UPDATE post SET comment_sequence=Last_insert_id(comment_sequence+1) WHERE id=2;
INSERT INTO `comment`(post_id, sequence, content) VALUES(2, Last_insert_id(), 'ipsum');
SELECT * FROM post;
SELECT * FROM comment;
Я бы предложил переписать заголовок на что-то более понятное, как «Создание полей автоинкремента с независимыми базами данных». Меня беспокоит то, что я не думаю, что найду твой титул, когда буду искать ту же тему. – Elijah
Вам действительно нужно постоянно увеличивающееся число, или вам просто нужна уникальность? –
Да, мне нужно «постоянно увеличивать число», для других ситуаций я использую гиды, CRC и т. Д. –