Instruction SQL CREATE TABLE

L’instruction CREATE TABLE est utilisée pour créer une nouvelle table dans la base de données.

Les tables peuvent être créées de deux manières :

  1. En spécifiant explicitement les colonnes et leurs types de données.
  2. Création basée sur la table existante.

Voici la syntaxe de création de table en spécifiant explicitement les colonnes et leurs types de données :

CREATE TABLE table-name
             column-definition
             table-constraint-clause
             physical-storage-clause

column-definition:
nom-colonne data type
    [WITH DEFAULT expression]
    [NULL|NOT NULL]
    [column-constraint-clause]
    [, nom-colonne data type [WITH DEFAULT expression] [NULL|NOT NULL]
    [column-constraint-clause]...]    

Constraint (column-constraint-clause or table-constraint-clause)
[CONSTRAINT constraint-name]
    [REFERENCES table-name [(column-name)]
          [ON DELETE {RESTRICT | CASCADE| SET TO NULL}]
    [UNIQUE]
    [PRIMARY KEY]
    [CHECK (check-condition)]

physical-storage-clause
IN database-name.tablespace-name

Default:

  • Lorsqu’une ligne est insérée dans la table et qu’aucune valeur n’est fournie pour la colonne, la valeur spécifiée dans la clause par défaut est insérée.
  • Si l’expression est manquante dans la clause par défaut, la valeur par défaut définie par le système pour le type de données de la colonne sera remplacée.

NULL / NON NULL :

  • NULL est une valeur par défaut.
  • NOT NULL : empêche la colonne de contenir des valeurs nulles. L’omission de NOT NULL implique que la colonne peut contenir des valeurs nulles.

Constraints :

Les contraintes sont définies à deux niveaux possibles.

  • Niveau colonne :Une contrainte au niveau de la colonne fait référence à une seule colonne et est définie avec la colonne. Celles-ci sont également appelées “contraintes en ligne”
  • Niveau tableau :Une contrainte au niveau de la table fait référence à une ou plusieurs colonnes et est définie séparément après la définition de toutes les colonnes. Celles-ci sont appelées contraintes hors ligne.
  • Vous devez utiliser une contrainte au niveau de la table si vous contraignez plusieurs colonnes.

Constraint-name :

  • Nom de la contrainte et est facultatif.
  • Si aucun nom de contrainte n’est spécifié, un nom de contrainte unique est généré.
  • Si le nom est spécifié, il doit être différent des noms de toute contrainte référentielle, de vérification, de clé primaire ou de clé unique précédemment spécifiée sur la table.

Contrainte FOREIGN KEY

  • La contrainte FOREIGN KEY est définie avec le mot clé REFERENCES.
  • La contrainte FOREIGN KEY (contrainte d’intégrité référentielle), assure que les valeurs de la clé étrangère correspondent aux valeurs d’une clé primaire.
  • Lors de la définition d’une contrainte FOREIGN KEY sur une table, le nom de colonne n’a pas besoin d’être identique au nom de colonne auquel il fait référence.
  • Par défaut, la contrainte de clé étrangère est de type DELETE RESTRICT : les lignes parentes ne peuvent pas être supprimées si des lignes enfants existent.
  • ON DELETE CASCADE : permet la suppression de la ligne de clé primaire et supprime également les lignes de clé étrangère qui s’y rapportent.
  • SET TO NULL : autorise la suppression de la ligne de clé primaire et, au lieu de supprimer toutes les lignes de clé étrangère associées, définit les colonnes de clé étrangère sur NULL.

Contrainte UNIQUE:

  • Pour appliquer des valeurs uniques à une colonne individuelle ou à un groupe de colonnes.
  • La colonne de contrainte UNIQUE ne doit pas contenir de valeurs NULL.
  • Une table peut contenir une ou plusieurs contraintes UNIQUE.

Contrainte PRIMARY KEY :

  • La PRIMARY KEY (CLÉ PRIMAIRE) garantit que toutes les valeurs de la ou des colonnes sont uniques.
  • La clause ne doit pas être spécifiée plus d’une fois et les colonnes identifiées doivent être définies comme NOT NULL.

Remarque : Si vous ne créez pas d’index unique pour une clé primaire ou pour une contrainte d’unicité, une clé incomplète est définie pour la table, rendant la table inaccessible.

CHECK :

Les contraintes CHECK appliquent des expressions logiques sur la ou les colonnes, qui doivent être évaluées comme vraies pour chaque ligne de la table.

Créer des tables basées sur d’autres tables.

Voici la syntaxe de création de table basée sur la table existante :

CREATE TABLE nom-table-destination
       LIKE nom-table-source
       IN nom-database.nom-tablespace

Créez une table TB_TAB1 dans la base de données DB_DB1 et l’espace de table TS_TS1 avec les spécifications suivantes avec les contraintes au niveau des colonnes et avec les noms de contraintes implicites.

Nom de colonneType de donnéesLongueurContrainteRemarques
TAB1_COL1IntegerClé primaire
TAB1_COL2IntegerNon nul
TAB1_COL3Varchar5clé étrangère à la colonne ZIP de la table ZIPCODE – si une ligne de la table ZIPCODE est supprimée, toutes les lignes avec le même code postal doivent être supprimées de la table TAB1
TAB1_COL4DateLa date actuelle doit être insérée par défaut
TAB1_COL5Char20Unique
TAB1_COL6IntegerDoit accepter les valeurs inférieures à 100. La valeur nulle est autorisée.

Voyons comment coder une instruction CREATE TABLE ci-dessous,

CREATE TABLE TB_TAB1
    (TAB1_COL1 INTEGER NOT NULL PRIMARY KEY,
     TAB1_COL2 INTEGER NOT NULL,
     TAB1_COL3 VARCHAR(5) REFERENCES ZIPCODE(ZIP)
          ON DELETE CASCADE,
     TAB1_COL4 DATE WITH DEFAULT,
     TAB1_COL5 CHAR(20) NOT NULL UNIQUE,
     TAB1_COL6 INTEGER CHECK(TAB1_COL6 < 100))
     IN DB_DB1.TS_TS1;

Explication:

  • TAB1_COL1 INTEGER NOT NULL PRIMARY KEY : Lorsque vous définissez une colonne comme clé primaire, elle doit être définie avec “Not Null” (la colonne de clé primaire ne doit pas contenir de valeurs nulles).
  • TAB1_COL5 CHAR (20) NOT NULL UNIQUE : Lorsque vous définissez une colonne avec la contrainte d’unicité, elle doit être définie avec “Not Null” (la colonne de contrainte d’unicité ne doit pas contenir de valeurs Null).
  • TAB1_COL4 DATE WITH DEFAULT: Lors de l’insertion, si vous ne fournissez pas de valeur pour cette colonne, la valeur par défaut de “Date actuelle” pour la variable “Date” sera insérée.

Exemple 2 :

Créez une table TB_TAB1 dans la base de données DB_DB1 et l’espace de table TS_TS1 avec les spécifications suivantes avec les contraintes au niveau de la table en nommant les contraintes de manière exclusive.

Nom de colonneType de donnéesLongueurContrainteRemarques
TAB1_COL1IntegerClé primaire
TAB1_COL2IntegerNon nul
TAB1_COL3Varchar5clé étrangère à la colonne ZIP de la table ZIPCODE – si une ligne de la table ZIPCODE est supprimée, toutes les lignes avec le même code postal doivent être supprimées de la table TAB1
TAB1_COL4DateLa date actuelle doit être insérée par défaut
TAB1_COL5Char20Unique
TAB1_COL6IntegerDoit accepter les valeurs inférieures à 100. La valeur nulle est autorisée.

Voyons comment coder une instruction CREATE TABLE ci-dessous,

CREATE TABLE TB_TAB1
      (TAB1_COL1 INTEGER NOT NULL,
      TAB1_COL2 INTEGER NOT NULL,
      TAB1_COL3 VARCHAR(5),
      TAB1_COL4 DATE WITH DEFAULT,
      TAB1_COL5 CHAR(20) NOT NULL,
      TAB1_COL6 INTEGER NOT NULL,
          CONSTRAINT TAB1_COL1_PK PRIMARY KEY(TAB1_COL1),
          CONSTRAINT TAB1_COL3_FK FOREIGN KEY(TAB1_COL3)
      REFERENCES ZIPCODE(ZIP),
          CONSTRAINT TAB1_COL5_COL6_UK UNIQUE(TAB1_COL5,TAB1_COL6),
          CONSTRAINT TAB1_COL6_CK CHECK(TAB1_COL6 < 100))
      IN DB_DB1.TS_TS1;

Explication:

CONSTRAINT TAB1_COL5_COL6_UK UNIQUE(TAB1_COL5,TAB1_COL6): Comme les deux colonnes TAB1_COL5 et TAB1_COL6 doivent avoir des contraintes uniques, vous avez combiné et créé cette contrainte et ces deux colonnes sont définies avec la clause NOT NULL.


Exemple 3 :

Créez une table TB_TAB1 dans une base de données DB_DB1 et dans un espace table TS_TS1, qui se comporte exactement comme la table TB_TAB2.

CREATE TABLE TB_TAB1 LIKE TB_TAB2
        IN DB_DB1.TS_TS1;