Champ auto incrémenté et suppression de tuples

Champ auto incrémenté et suppression de tuples - SQL/NoSQL - Programmation

Marsh Posté le 10-04-2007 à 14:50:42    

Bonjour.
J'utilise MySQL et j'ai une table qui comporte un champ auto incrementé.
Or quand on supprime un ou plusieurs tuples, la valeur de l'attribut autoincrémenté ne prend pas en compte ces suppressions.
Y aurait il un moyen de contourner ce problème ?
 
Merci d'avance.

Reply

Marsh Posté le 10-04-2007 à 14:50:42   

Reply

Marsh Posté le 10-04-2007 à 15:04:48    

Question: en quoi c'est un problème d'avoir des "trous" dans ta liste d'ids?  
( ça conditionnera la solution au contournement ).

Reply

Marsh Posté le 10-04-2007 à 17:03:04    

admettons qu'on suive ton idée : un utilisateur insère un truc, qui va également affecter autre chose dans la base. Tu supprimes cette insertion.
Un autre utilisateur insère un nouvel élément dans la même table, qui va donc prendre l'id de celui qu'on a dégommé, et affecter tout ce qui doit l'être autour -> bordel monstrueux dans la cohérence des données.

 

D'accord, c'est un peu abstrait comme exemple mais dans la pratique, ton idée c'est bien un coup à se foutre dans la merde selon l'appli.
Laisse les Id augmenter séquentiellement. Tant pis pour les trous, même si pour des trucs du genre table de paramètres ça peut effectivement faire moche si les id sont visibles pour l'utilisateur.

 

maintenant peut être qu'il y existe une astuce miracle pour obtenir ce que tu veux mais j'en doute. Et c'est forcément propre à chaque sgbdr (du coup ça doit bien exister sur l'un deux remarque...)

 

Si tu veux vraimentn faire ce à quoi tu pensais, gère tes insertions manuellement.

 

astuce : pour réinitialiser à 0 les id d'une table, faire un delete from x ne suffit pas. On repart quand même de la derniere valeur... par contre un TRUNCATE lui fonctionne !

 


Message édité par TotalRecall le 10-04-2007 à 17:05:04

---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed