Frequently asked questions - Base
TDF LibreOffice Document Liberation Project Blogs communautaires Weblate Nextcloud Redmine Ask LibreOffice Donner
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 :
ALTER TABLE "NomTable" ALTER COLUMN "NomClePrimaire" RESTART WITH 1
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.
- Donner un nom pour la nouvelle table
- Choisir l'option Définition et données, cliquer sur Suivant
- Garder tous les champs hormis le champ clé primaire
- Cliquer sur Créer, LibreOffice propose de créer une clé primaire : choisir Non
- 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 :
CREATE SEQUENCE "NUMENREG" AS INTEGER
UPDATE "T_A" SET ID = NEXT VALUE FOR "NUMENREG"
DROP SEQUENCE "NUMENREG"