La commande CREATE TABLE crée une table vide dans la base de données actuelle. L'utilisateur exécutant cette instruction devient propriétaire de la table. Après la création, utilisez INSERT pour ajouter des lignes et ALTER TABLE pour modifier la structure ou ajouter des contraintes.
Syntaxe
CREATE [ GLOBAL TEMPORARY ] TABLE table_name (
{ column_name data_type [ DEFAULT default_expr ]
[ column_constraint [ ... ] ] | table_constraint } [, ...]
)
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS } ]
[ TABLESPACE tablespace ]
où column_constraint correspond à l'une des valeurs suivantes :
[ CONSTRAINT constraint_name ]
{ NOT NULL
| NULL
| UNIQUE [ USING INDEX TABLESPACE tablespace ]
| PRIMARY KEY [ USING INDEX TABLESPACE tablespace ]
| CHECK (expression)
| REFERENCES reftable [ ( refcolumn ) ]
[ ON DELETE action ] }
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
et table_constraint correspond à l'une des valeurs suivantes :
[ CONSTRAINT constraint_name ]
{ UNIQUE ( column_name [, ...] )
[ USING INDEX TABLESPACE tablespace ]
| PRIMARY KEY ( column_name [, ...] )
[ USING INDEX TABLESPACE tablespace ]
| CHECK ( expression )
| FOREIGN KEY ( column_name [, ...] )
REFERENCES reftable [ ( refcolumn [, ...] ) ]
[ ON DELETE action ] }
[ DEFERRABLE | NOT DEFERRABLE ]
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
Paramètres
| Paramètre | Description |
|---|---|
GLOBAL TEMPORARY |
Crée une table temporaire supprimée automatiquement à la fin de la session en cours. Les index créés sur une table temporaire sont également temporaires. Si une table temporaire porte le même nom qu'une table permanente, cette dernière reste invisible dans la session actuelle, sauf référence par son nom qualifié par le schéma. |
table_name |
Nom de la table. Utilisez le nom qualifié par le schéma pour y faire référence si nécessaire. |
column_name |
Nom d'une colonne de la table. |
data_type |
Type de données de la colonne. Cette valeur peut inclure des spécificateurs de tableau. |
DEFAULT default_expr |
Expression de la valeur par défaut de la colonne. L'expression ne doit contenir ni sous-requêtes ni références à d'autres colonnes de la table, et son type de données doit correspondre à celui de la colonne. En l'absence de valeur insérée et de valeur par défaut définie, NULL est utilisé. |
CONSTRAINT constraint_name |
Nom facultatif de la contrainte de colonne ou de table. S'il est omis, le système génère automatiquement un nom. |
NOT NULL |
Interdit les valeurs NULL dans la colonne. |
PRIMARY KEY (contrainte de colonne) |
Exige que les valeurs de la colonne identifient chaque ligne de manière unique et soient non nulles. Une table ne peut avoir qu'une seule clé primaire. Les colonnes composant la clé primaire ne peuvent pas figurer dans une contrainte UNIQUE. PolarDB crée automatiquement un index pour appliquer la clé primaire. |
PRIMARY KEY ( column_name [, ...] ) (contrainte de table) |
Définit une clé primaire composite sur plusieurs colonnes. |
CHECK (expression) |
Expression booléenne devant s'évaluer à true ou inconnue pour qu'une opération INSERT ou UPDATE réussisse. Elle ne doit contenir ni sous-requêtes ni références à des variables extérieures à la ligne actuelle. |
REFERENCES reftable [ ( refcolumn ) ] [ ON DELETE action ] (contrainte de colonne) |
Définit une contrainte de clé étrangère. Si refcolumn est omis, la clé primaire de reftable est utilisée. Les colonnes référencées doivent appartenir à une contrainte UNIQUE ou PRIMARY KEY de la table cible. Si ces colonnes changent fréquemment, ajoutez un index sur la colonne de clé étrangère afin de maintenir l'efficacité des actions référentielles. |
FOREIGN KEY ( column [, ...] ) REFERENCES reftable [ ( refcolumn [, ...] ) ] [ ON DELETE action ] (contrainte de table) |
Définit une contrainte de clé étrangère sur plusieurs colonnes. |
ON DELETE action |
Action à exécuter lors de la suppression d'une ligne référencée. Les actions référentielles ne peuvent pas être différées, même si la contrainte est différable. Actions prises en charge : CASCADE (supprime ou met à jour les lignes référençant la ligne supprimée) et SET NULL (définit les valeurs des colonnes référençantes à NULL). |
DEFERRABLE / NOT DEFERRABLE |
Indique si la vérification de la contrainte peut être reportée à la fin d'une transaction. Utilisez SET CONSTRAINTS pour différer une contrainte différable. Seules les contraintes de clé étrangère prennent en charge cette option ; toutes les autres sont non différables. Valeur par défaut : NOT DEFERRABLE. |
INITIALLY IMMEDIATE / INITIALLY DEFERRED |
Détermine le moment de vérification d'une contrainte différable. INITIALLY IMMEDIATE vérifie la contrainte après chaque instruction (comportement par défaut). INITIALLY DEFERRED la vérifie à la fin de la transaction. Utilisez SET CONSTRAINTS pour modifier ce comportement au moment de l'exécution. |
ON COMMIT |
Action à effectuer sur une table temporaire à la fin d'un bloc de transaction. PRESERVE ROWS (par défaut) conserve toutes les lignes. DELETE ROWS supprime toutes les lignes, ce qui équivaut à exécuter TRUNCATE à chaque validation (commit). |
TABLESPACE tablespace |
Tablespace dans lequel créer la table. |
Remarques d'utilisation
Si un nom de schéma est inclus (par exemple,
CREATE TABLE myschema.mytable), la table est créée dans ce schéma ; sinon, elle est créée dans le schéma actuel.Les tables temporaires résident toujours dans un schéma dédié ; ne spécifiez pas de schéma lors de leur création.
Le nom de la table doit être unique au sein du schéma et ne peut dupliquer le nom d'une table, d'une séquence, d'un index ou d'une vue existant(e).
CREATE TABLEcrée également un type de données composite représentant une ligne de la table. Le nom de la table ne doit pas correspondre au nom d'un type de données existant dans le même schéma.Une table peut comporter jusqu'à 1 600 colonnes. En pratique, cette limite effective peut être inférieure en raison des contraintes liées à la longueur des tuples.
Une contrainte de colonne s'applique à une seule colonne, tandis qu'une contrainte de table s'applique à plusieurs colonnes. Pour simplifier la gestion, une contrainte portant sur une seule colonne peut être écrite sous l'une ou l'autre forme.
PolarDB crée automatiquement un index pour chaque contrainte
UNIQUEetPRIMARY KEY; aucune création explicite d'index n'est nécessaire.
Notes de compatibilité
La commande CREATE TABLE de PolarDB for Oracle présente les différences suivantes par rapport aux bases de données Oracle :
Temporary table visibility : Les tables temporaires ne sont visibles que dans la session en cours. Ce mécanisme diffère de celui des tables temporaires globales des bases de données Oracle.
**Valeur par défaut de
ON COMMIT** : Le comportement par défaut estPRESERVE ROWS. Dans Oracle, la valeur par défaut estDELETE ROWS.
Exemples
Création de deux tables associées
L'exemple suivant crée une table dept et une table emp avec une clé étrangère référençant dept.
CREATE TABLE dept (
deptno NUMBER(2) NOT NULL CONSTRAINT dept_pk PRIMARY KEY,
dname VARCHAR2(14),
loc VARCHAR2(13)
);
CREATE TABLE emp (
empno NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2) CONSTRAINT emp_ref_dept_fk
REFERENCES dept(deptno)
);
Ajout d'une contrainte UNIQUE
CREATE TABLE dept (
deptno NUMBER(2) NOT NULL CONSTRAINT dept_pk PRIMARY KEY,
dname VARCHAR2(14) CONSTRAINT dept_dname_uq UNIQUE,
loc VARCHAR2(13)
);
Ajout d'une contrainte CHECK au niveau de la colonne
CREATE TABLE emp (
empno NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2) CONSTRAINT emp_sal_ck CHECK (sal > 0),
comm NUMBER(7,2),
deptno NUMBER(2) CONSTRAINT emp_ref_dept_fk
REFERENCES dept(deptno)
);
Ajout d'une contrainte CHECK au niveau de la table
CREATE TABLE emp (
empno NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(9),
mgr NUMBER(4),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2) CONSTRAINT emp_ref_dept_fk
REFERENCES dept(deptno),
CONSTRAINT new_emp_ck CHECK (ename IS NOT NULL AND empno > 7000)
);
Définition d'une clé primaire composite
L'exemple suivant crée une table jobhist avec une clé primaire composite sur empno et startdate.
CREATE TABLE jobhist (
empno NUMBER(4) NOT NULL,
startdate DATE NOT NULL,
enddate DATE,
job VARCHAR2(9),
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2),
chgdesc VARCHAR2(80),
CONSTRAINT jobhist_pk PRIMARY KEY (empno, startdate)
);
Définition de valeurs de colonne par défaut
La colonne job a pour valeur par défaut 'SALESMAN'. La colonne hiredate prend par défaut la date d'insertion de la ligne.
CREATE TABLE emp (
empno NUMBER(4) NOT NULL CONSTRAINT emp_pk PRIMARY KEY,
ename VARCHAR2(10),
job VARCHAR2(9) DEFAULT 'SALESMAN',
mgr NUMBER(4),
hiredate DATE DEFAULT SYSDATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno NUMBER(2) CONSTRAINT emp_ref_dept_fk
REFERENCES dept(deptno)
);
Création d'une table dans un tablespace spécifique
CREATE TABLE dept (
deptno NUMBER(2) NOT NULL CONSTRAINT dept_pk PRIMARY KEY,
dname VARCHAR2(14),
loc VARCHAR2(13)
) TABLESPACE diskvol1;
Étapes suivantes
Pour modifier la structure ou les contraintes d'une table existante, utilisez
ALTER TABLE.Pour supprimer une table, utilisez
DROP TABLE.Pour ajouter des index supplémentaires (au-delà de ceux créés automatiquement pour les clés primaires et les contraintes d'unicité), utilisez
CREATE INDEX.Pour insérer des données dans la table, utilisez
INSERT.