Faq/Base/127/fr

From The Document Foundation Wiki
< Faq‎ | Base‎ | 127
Jump to: navigation, search

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 Outils ▸ SQL 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

Copie d'écran
Situation de départ : numérotation non continue
  • 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 :
Recréation de la clé primaire
copie d'écran cf. liste ci-dessus
Assistant de copie de table 1
copie d'écran cf. liste ci-dessus
Assistant de copie de table 2
copie d'écran cf. liste ci-dessus
Assistant de copie de table 3

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 Outils ▸ SQL
Utilisation d'un compteur
copie d'écran voir légende
Situation de départ : numérotation discontinue & pas d'auto-valeur
copie d'écran dialogue Outils SQL
Exécuter via le menu Outils ▸ SQL
copie d'écran identifiants renumérotés
Résultat
  • L'instruction SQL :
 
CREATE SEQUENCE "NUMENREG" AS INTEGER
UPDATE "T_A" SET ID = NEXT VALUE FOR "NUMENREG"
DROP SEQUENCE "NUMENREG"