Si vous avez besoin d'un champ d'auto-cryptage non-clé primaire, une très bonne solution MySQL pour créer des séquences d'arbitraires est d'utiliser la fonction last_insert_id(expr)
relativement inconnue.
Si expr est donnée comme argument pour LAST_INSERT_ID(), la valeur de l'argument est renvoyé par la fonction et on se souvient que la prochaine valeur retournée par LAST_INSERT_ID(). Ce peut être utilisé pour simuler des séquences ...
(de http://dev.mysql.com/doc/refman/5.1/en/information-functions.html#function_last-insert-id)
Voici un exemple qui montre comment une séquence secondaire peut être conservé pour la numérotation des commentaires pour chaque poste:
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;
Je suggérerais de réécrire le titre à quelque chose d'un peu plus clair comme "Créer des champs d'auto-incrémentation indépendants de la base de données". Mon souci est que je ne pense pas que je trouverais votre titre quand je ferais une recherche pour le même sujet. – Elijah
Avez-vous vraiment besoin d'un nombre croissant d'incréments, ou avez-vous juste besoin d'un caractère unique? –
Oui, j'ai besoin d'un "nombre continuellement croissant", pour d'autres situations j'utilise guids, CRC, etc ... –