Faq/Base/127/fr

Comment revenir à une numérotation continue pour une clé primaire ?

 * Contexte : au fur et à mesure des ajouts et suppressions d'enregistrements dans  une table, la clé primaire prend des valeurs non séquentielles. On souhaite retrouver une numérotation continue.


 * Cas non abordé dans cette FAQ : une ou plusieurs relations ont été définies reliant la table à d'autres tables via cette clé, et des données figurent dans ces tables.


 * Hormis ce cas non traité, différentes situations peuvent se présenter :

La clé primaire est définie en auto-valeur et la table ne comprend plus aucune donnée

 * Via le menu  on exécutera une requête du type :

La clé primaire est définie en auto-valeur et la table contient des données

 * On souhaite poursuivre la numérotation : la table comprenait par exemple 20 enregistrements, on a supprimé les derniers, on souhaite reprendre à 15.
 * On pourra utiliser la requête ci-dessus en modifiant la valeur de départ = 15


 * On souhaite tout renuméroter (y compris les enregistrements existants) : on pourra utiliser l'assistant copie de table.
 * Copier-coller la table ou déplacer légèrement cette dernière avec la souris : l'assistant se déclenche.


 * 1) Donner un nom pour la nouvelle table
 * 2) Choisir l'option Définition et données, cliquer sur Suivant
 * 3) Garder tous les champs hormis le champ clé primaire
 * 4) Cliquer sur Créer, LibreOffice propose de créer une clé primaire : choisir Non
 * 5) La nouvelle table est créée. Il suffit de la modifier pour ajouter le champ clé primaire, le définir en auto-valeur, enregistrer.


 * Ci-dessous en images :

La clé primaire n'est pas définie en auto-valeur et la table ne contient pas de données

 * Aucune manipulation n'est nécessaire : le champ étant en saisie libre on peut indiquer la valeur souhaitée

La clé primaire n'est pas définie en auto-valeur et la table contient des données

 * La clé n'étant pas en auto-valeur nous ne pouvons compter sur ce mécanisme pour assurer l'incrémentation. Nous pourrons toutefois créer un compteur à cette fin dans une instruction SQL exécutée via le menu 
 * L'instruction SQL :