• Home
  • LLMs
  • Python
  • Docker
  • Kubernetes
  • Java
  • Ubuntu
  • Maven
  • Archived
  • About
Oracle | PRIMARY KEY
  1. Notes
  2. Créer une clé primaire
    1. Syntaxe 1 : CREATE TABLE ... CONSTRAINT ... PRIMARY KEY
    2. Syntaxe 2 : CREATE TABLE ... PRIMARY KEY
    3. Syntaxe 3 : ALTER TABLE
    4. Créer la clé primaire séparément de l'indexe
  3. Désactiver une clé primaire : ALTER TABLE ... DISABLE CONSTRAINT
  4. Activer une clé primaire : ALTER TABLE ... ENABLE CONSTRAINT
  5. Supprimer une clé primaire : ALTER TABLE ... DROP CONSTRAINT
  6. La clé primaire vs l'indexe unique
    1. Clé primaire
    2. Indexe unique

  1. Notes
    • Une clé primaire est une contrainte définie sur une ou plusieurs colonnes de la table.

    • Les valeurs de ces colonnes combinées assurent l'unicité de chaque ligne de la table.

    • Les colonnes de la clé primaire ne peuvent contenir des valeurs nulles.
  2. Créer une clé primaire
    1. Syntaxe 1 : CREATE TABLE ... CONSTRAINT ... PRIMARY KEY

      Remarque : Si la clé primaire est une clé composée de plusieurs colonnes, alors il faut spécifier ces colonnes séparées par des points virgules (column1, column2, …).

      La création de la clé primaire crée deux objets : une contrainte de clé primaire et un indexe unique :

      • Vérifier l'existence de la contrainte de clé primaire dans le dictionnaire de données :

        Résultat de la requête :
      • Vérifier l'existence de l'indexe unique dans le dictionnaire de données :

        Résultat de la requête :
      • Si on essaye de supprimer cet indexe on obtiendra une erreur :

        Résultat de la requête :
      • La surpression de la clé primaire supprimera aussi l'indexe :

        Vérifier l'existence de l'indexe unique dans le dictionnaire de données :

        Résultat de la requête :
    2. Syntaxe 2 : CREATE TABLE ... PRIMARY KEY

      La déférence avec la syntaxe précédente est qu'on ne spécifie pas un nom explicite à la contrainte de clé primaire.
      Dans ce cas, un nom de la contrainte sera automatiquement généré par Oracle.

      • Vérifier l'existence de la contrainte de clé primaire dans le dictionnaire de données :


        Résultat de la requête :
      • Vérifier l'existence de l'indexe unique dans le dictionnaire de données :


        Résultat de la requête :
      Note : C'est une bonne pratique de spécifier des noms aux contraintes.
    3. Syntaxe 3 : ALTER TABLE

      Spécifier un nom explicite à la contrainte :

      Ou :
    4. Créer la clé primaire séparément de l'indexe



      Remarquez que la clé primaire peut utiliser un indexe non-unique !

      NOTES :
      • Comme vu précédemment, vous ne pouvez pas supprimer l'indexe une fois la clé primaire est créée. Vous obteniez une erreur si vous essayez de le supprimer :


      • Par contre, il faut faire attention, dans ce cas la surpression de la clé primaire ne supprimera pas l'indexe :

        Vérifier l'existence de l'indexe dans le dictionnaire de données :

        Résultat de la requête :
  3. Désactiver une clé primaire : ALTER TABLE ... DISABLE CONSTRAINT
  4. Activer une clé primaire : ALTER TABLE ... ENABLE CONSTRAINT
  5. Supprimer une clé primaire : ALTER TABLE ... DROP CONSTRAINT

    Ou :

    Rappel : La suppression de la contrainte de clé primaire supprime aussi l'indexe, sauf dans le cas où l'indexe a été créé séparément.
  6. La clé primaire vs l'indexe unique
    Les valeurs de chaque colonne de la clé primaire doivent être uniques et ne peuvent jamais être NULL.
    En fait, la contrainte clé primaire force implicitement la contrainte NOT NULL sur chaque colonne composant la clé primaire.
    Si vous essayer d'insérer une valeur NULL à une colonne composant la clé primaire, vous obtiendrez une erreur.
    Cela fait la différence entre une clé primaire et la contrainte d'unicité et l'indexe unique.
    Voir les détails des différences entre la contrainte d'unicité et l'index unique dans la page UNIQUE.

    Notes : Une clé primaire peut être remplacée, s'il y en a vraiment un besoin, par la création d'un indexe unique et/ou une contrainte UNIQUE sur les colonnes de la clé primaire et en ajoutant des contraintes NOT NULL sur ces colonnes.

    1. Clé primaire

      • Exemple 1 :

        Résultat de la requête :

      • Exemple 2 :

        Résultat de la requête :

      • Exemple 3 :

        Résultat de la requête :
    2. Indexe unique


      • Exemple 1 :

        Résultat de la requête :

      • Exemple 2 :

        Résultat de la requête :

      • Exemple 3 :

        Résultat de la requête :

        Pour ce dernier exemple, les deux insertions se sont effectuées sans aucune erreur.
        Il est important de retenir qu'un indexe conventionnel (B*Tree) n'insère pas d'entrées pour les valeurs NULL.
        La valeur des deux colonnes qui composent l'indexe est NULL et donc les deux lignes insérées n'ont été pas indexées.
© 2025  mtitek