salut andyajram.
Comme le dit Escartefigue, l'auto incrément est une fonctionnalité technique du SGBD MySql.
Ce que vous décrivez, c'est le comportement normal de son fonctionnement.
Vous ne devez pas intervenir dans le paramétrage de l'auto increment de votre table.
Je répète à la suite de Escartefigue, cet identifiant est pour un usage technique et ne doit pas intervenir dans un traitement fonctionnel.
Mais rien ne vous oblige à utiliser l'auto increment dans votre table.
A vous de gérer cette colonne selon vos besoin. Par exemple, vous pouvez le simuler par un trigger :
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| -- ===================
-- Trigger `increment`
-- ===================
DROP TRIGGER IF EXISTS `incrementer`;
DELIMITER $$
CREATE TRIGGER `incrementer`
BEFORE INSERT ON `test`
FOR EACH ROW BEGIN
SET NEW.num=ifnull((select max(num)+1 from test where val=NEW.val),1);
END$$
DELIMITER ; |
Ici, la colonne se nomme 'num'.
J'incrémente cette colonne 'num' quand j'ai la même valeur dans la colonne 'val'.
Il existe plusieurs solutions possible en fonction de ce que vous cherchez à faire.
Votre problème est que vous n'aimez pas les trous dans la numérotation de votre identifiant.
Et vous pensez que l'on va atteindre rapidement le maximum de ce que l'on peut stocker dans cette colonne.
Si vous avez peur d'atteindre ce maximum, alors déclarez ceci :
`id` bigint unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
Le maximum est de 18.446.744.073.709.551.615
Vous avez de la marge avant d'atteindre le max.
Et si vous n'aimez vraiment pas les trous, on peut faire une renumérotation de votre colonne auto incrémenté.
update `votre_table`, (select @x:=0) as x set id = (@x:=@x+1);
mais c'est à vos risques et périls !
Personnellement, je n'aime pas trop utiliser cet identifiant auto incrémenté dans une relation fonctionnelle.
Elle n'est vraiment pas parlante du tout.
@+
Partager