FirebirdSQL logo

CREATE TABLE

Destination

Pour créer une nouvelle table.

Disponible en

DSQL, ESQL

Syntaxe
CREATE [GLOBAL TEMPORARY] TABLE tablename
  [EXTERNAL [FILE] 'filespec']
  (<col_def> [, <col_def> | <tconstraint> ...])
  [ON COMMIT {DELETE | PRESERVE} ROWS]
  [SQL SECURITY {DEFINER | INVOKER}]
  [{ENABLE | DISABLE} PUBLICATION]

<col_def> ::=
    <regular_col_def>
  | <computed_col_def>
  | <identity_col_def>

<regular_col_def> ::=
  colname { <datatype> | domain_name }
  [DEFAULT {<literal> | NULL | <context_var>}]
  [NOT NULL]
  [<col_constraint>]
  [COLLATE collation_name]


<computed_col_def> ::=
  colname [{ <datatype> | domain_name }]
  {COMPUTED [BY] | GENERATED ALWAYS AS} (<expression>)

<identity_col_def> ::=
  colname [<datatype>]
  GENERATED {ALWAYS | BY DEFAULT} AS IDENTITY [(<identity column options>)]
  [<col_constraint>]

<identity column options> ::=
  <identity column option> [<identity column option>]

<identity column option> ::=
    START WITH startvalue
  | INCREMENT [BY] incrementvalue


<datatype> ::=
    <scalar_datatype> | <blob_datatype> | <array_datatype>

<scalar_datatype> ::= Voir Syntaxe des types de données scalaires.

<blob_datatype> ::= Voir Syntaxe du type de données BLOB.

<array_datatype> ::= Voir syntaxe des tableaux.

<col_constraint> ::= [CONSTRAINT constr_name]
{   UNIQUE [<using_index>]
  | PRIMARY KEY [<using_index>]
  | REFERENCES other_table [(other_col)]
      [ON DELETE { NO ACTION | CASCADE | SET DEFAULT | SET NULL}]
      [ON UPDATE { NO ACTION | CASCADE | SET DEFAULT | SET NULL}]
      [<using_index>]
  | CHECK (<check_condition>)
}

<tconstraint> ::= [CONSTRAINT constr_name]
{   UNIQUE (<col_list>) [<using_index>]
  | PRIMARY KEY (<col_list>) [<using_index>]
  | FOREIGN KEY (<col_list>)
    REFERENCES other_table [(<col_list>)]
      [ON DELETE { NO ACTION | CASCADE | SET DEFAULT | SET NULL}]
      [ON UPDATE { NO ACTION | CASCADE | SET DEFAULT | SET NULL}]
      [<using_index>]
  | CHECK (<check_condition>)
}

<col_list> ::= colname [, colname ...]

<using_index> ::= USING [ASC[ENDING] | DESC[ENDING]] INDEX indexname

<check_condition> ::=
    <val> <operator> <val>
  | <val> [NOT] BETWEEN <val> AND <val>
  | <val> [NOT] IN (<val> [, <val> ...] | <select_list>)
  | <val> IS [NOT] NULL
  | <val> IS [NOT] DISTINCT <val>
  | <val> IS [NOT] {TRUE | FALSE | UNKNOWN}
  | <val> [NOT] CONTAINING <val>
  | <val> [NOT] STARTING [WITH] <val>
  | <val> [NOT] LIKE <val> [ESCAPE <val>]
  | <val> [NOT] SIMILAR TO <val> [ESCAPE <val>]
  | <val> <operator> {ALL | SOME | ANY} (<select_list>)
  | [NOT] EXISTS (<select_expr>)
  | [NOT] SINGULAR (<select_expr>)
  | (<check_condition>)
  | NOT <check_condition>
  | <check_condition> OR <check_condition>
  | <check_condition> AND <check_condition>


<operator> ::=
    <> | != | ^= | ~= | = | < | > | <= | >=
  | !< | ^< | ~< | !> | ^> | ~>

<val> ::=
    colname ['['<array_idx> [, <array_idx> ...]']']
  | <literal>
  | <context_var>
  | <expression>
  | NULL
  | NEXT VALUE FOR genname
  | GEN_ID(genname, <val>)
  | CAST(<val> AS <cast_type>)
  | (<select_one>)
  | func(<val> [, <val> ...])

<cast_type> ::=
   <datatype>
  | [TYPE OF] domain_name
  | TYPE OF COLUMN rel.colname
Table 1. Paramètres de l’opérateur CREATE TABLE
Paramètre Description

tablename

Nom de la table, peut contenir jusqu’à 63 caractères.

filespec

Spécification du fichier (uniquement pour les tables externes).

colname

Nom de la colonne de la table, peut avoir jusqu’à 63 caractères.

datatype

Type de données SQL.

domain_name

Nom de domaine.

startvalue

La valeur initiale de la colonne d’identité.

identityvalue

Incrément de la colonne d’identité. Ne peut être égal à 0.

col_constraint

Restriction de la colonne.

tconstraint

Limitation du tableau.

constr_name

Nom de la restriction, peut contenir jusqu’à 63 caractères.

other_table

Le nom de la table à laquelle la clé étrangère fait référence.

other_col

La colonne de la table à laquelle la clé étrangère fait référence.

using_index

Vous permet de définir le nom de l’index généré automatiquement pour la contrainte, et éventuellement de définir si l’index sera en ordre croissant (par défaut) ou décroissant.

literal

Literal

context_var

Toute variable contextuelle dont le type est compatible avec le type de données de la colonne.

check_condition

Condition de contrôle des contraintes.Exécuté si évalué comme TRUE ou NULL/UNKNOWN.

collation_name

Ordre de tri.Doit être spécifié si vous voulez que l’ordre de tri d’une colonne soit différent de l’ordre de tri par défaut pour le jeu de caractères de cette colonne.

select_one

L’opérateur SELECT sélectionne une colonne et renvoie une seule ligne.

select_list

L’opérateur SELECT sélectionne une colonne et retourne zéro ou plusieurs lignes.

select_expr

L’opérateur SELECT sélectionne plusieurs colonnes et renvoie zéro ou plusieurs lignes.

experssion

Expression.

genname

Le nom de la séquence (générateur).

func

Fonction scalaire.

L’instruction CREATE TABLE crée une nouvelle table.Le nom de la table doit être unique parmi les noms de toutes les tables, vues (VIEW) et procédures de base de données stockées.

Une table peut contenir au moins une colonne et un nombre arbitraire de contraintes de table.

Le nom de la colonne doit être unique pour la table en cours de création.Il faut soit spécifier le type de données ou le nom du domaine dont les caractéristiques seront copiées pour la colonne, soit spécifier que la colonne est calculable.

Tout type de données SQL peut être utilisé comme type de colonne.

Colonnes de caractères

Pour les types CHAR, VARCHAR et BLOB avec le sous-type TEXT, vous pouvez spécifier le jeu de caractères dans la phrase CHARACTER SET.Si aucun jeu de caractères n’est spécifié, la valeur par défaut est le jeu de caractères qui a été spécifié lors de la création de la base de données.Si aucun jeu de caractères n’a été spécifié lors de la création de la base de données, le jeu de caractères par défaut est NONE.Dans ce cas, les données sont stockées et récupérées telles qu’elles ont été soumises.Il est possible de charger des données dans une colonne dans n’importe quel encodage, mais il n’est pas possible de charger ces données dans une colonne avec un encodage différent.La translittération entre les codages source et destination n’est pas effectuée, ce qui peut entraîner des erreurs.

La clause facultative COLLATE vous permet de spécifier un ordre de tri pour les types de données de type chaîne (sauf pour BLOB). Si aucun ordre de tri n’est spécifié, l’ordre de tri par défaut pour le jeu de tri spécifié est pris en charge.