La commande CREATE TABLE permet de créer une table, vide à l'origine, dans la base de données actuelle. La commande CREATE TABLE crée automatiquement un type de données qui représente le type tuple (type de structure) correspondant à une ligne de la table.
Les clauses de contrainte facultatives spécifient les contraintes (ou tests) que les lignes nouvelles ou mises à jour doivent satisfaire pour qu'une opération d'insertion ou de mise à jour aboutisse. Une contrainte est une règle nommée, à savoir, un objet SQL qui permet de définir des ensembles valides de valeurs en limitant les résultats des opérations d'insertion, de mise à jour ou de suppression utilisées sur une table. Netezza ne prend pas en charge les vérifications de contrainte ; si vous spécifiez des contraintes, vous devez les vérifier et procéder à l'intégrité référentielle.
Vous pouvez également écrire chacune des contraintes de colonne comme contrainte de table. Une contrainte de colonne n'est intéressante du point de vue notation que si elle n'affecte qu'une colonne.
CREATE TABLE <nomtable> [ ( <col>[,<col>… ] ) ] AS
<clause_select> [ DISTRIBUTE ON [HASH] ( <col>[<col>,… ] ) ]
La phrase distribute on spécifie la clé de distribution et le mot hash est facultatif.
CREATE TABLE <nomtable> (col1 int, col2 int, col3 int)
DISTRIBUTE ON RANDOM;
La phrase distribute on random spécifie une distribution par permutation circulaire.
CREATE TABLE <nomtable> (col1 int, col2 int, col3 int);
Le système Netezza choisit une clé de distribution. Il n'existe aucun moyen de connaître cette clé et cette dernière peut varier suivant la version du logiciel Netezza.
CREATE [ TEMPORARY | TEMP ] TABLE <table>
( <col> <type> [<contrainte_col>][,<col> <type> [<contrainte_col>]…]
[<contrainte_table>[,<contrainte_table>… ] )
[ DISTRIBUTE ON { RANDOM | [HASH] (<col>[,<col>…]) } ]
[ ORGANIZE ON { (<col>) | NONE } ]
[ ROW SECURITY ]
[ CONSTRAINT <nom_contrainte> ]
{NOT NULL | NULL | UNIQUE | PRIMARY KEY | DEFAULT <valeur> | <réf>}
[ [ [ NOT ] DEFERRABLE ] { INITIALLY DEFERRED | INITIALLY IMMEDIATE } |
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] [ NOT ] DEFERRABLE ]
[ CONSTRAINT <nom_contrainte> ]
{UNIQUE (<col>[,<col>…] ) |
PRIMARY KEY (<nom_col_clé_princ>[,<nom_col_clé_princ>…] ) |
FOREIGN KEY (<nom_col_clé_ext>[,<nom_col_clé_ext>…] ) <réf>}
[ [ [ NOT ] DEFERRABLE ] { INITIALLY DEFERRED | INITIALLY IMMEDIATE } |
[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] [ NOT ] DEFERRABLE ]
REFERENCES <table_réf> [ (<nom_col_réf>[,<nom_col_réf>…] ) ]
[ MATCH FULL ]
[ ON UPDATE {CASCADE | RESTRICT | SET NULL | SET DEFAULT | NO ACTION} ]
[ ON DELETE {CASCADE | RESTRICT | SET NULL | SET DEFAULT | NO ACTION} ]
Le système autorise et gère la clé principale, la valeur par défaut, la clé externe, l'unicité et les références. Le système IBM® Netezza ne prend pas en charge les vérifications de contrainte et l'intégrité référentielle. L'utilisateur doit garantir les vérifications de contrainte et l'intégrité référentielle.
| Entrée | Description |
|---|---|
| TEMP[ORARY] | La table à créer doit être une table temporaire. |
| <table> | Nom de la table à créer. |
| <col> | Nom d'une colonne à créer dans la nouvelle table. |
| <type> | Type de données de la colonne. |
| DISTRIBUTE ON | Chaque table de la base de données doit posséder une clé de distribution comprenant une à quatre colonnes. La valeur par défaut est RANDOM, qui indique au système de sélectionner une clé de distribution aléatoire. |
| HASH | Ce paramètre peut être spécifié à des fins de clarté, mais n'a aucun effet sur la commande. |
| ORGANIZE ON | Colonnes (un à quatre) sur lesquelles la table doit être organisée. Non spécifiable pour les tables externes. Si des colonnes sont spécifiées, la table ne peut pas avoir de vues matérialisées et tous les types de données des colonnes spécifiées doivent être mappables par zone. La réorganisation des données de la table est appliquée lorsque la commande GROOM TABLE est exécutée. Pour plus d'informations, reportez-vous à la rubrique sur l'utilisation des tables de base en cluster, dans le document IBM Netezza System - Guide d'administration. |
| ROW SECURITY | Crée la table avec une sécurité au niveau des lignes. |
| <nom_contrainte> | Nom à affecter à une contrainte de colonne ou une contrainte de table. Si vous ne spécifiez pas de nom, le système en génère un. |
| NOT DEFERRABLE | DEFERRABLE | Contrôle si la contrainte peut être reportée à la fin de la transaction. NOT DEFERRABLE est la valeur par défaut. (Netezza ne prend pas en charge la vérification des contraintes et l'intégrité référentielle.) |
| INITIALLY | Spécifie DEFERRED (à la fin de la transaction) ou IMMEDIATE (à la fin de chaque instruction). |
| NOT NULL | NULL | Indique si la colonne peut contenir des valeurs null. NULL est la valeur par défaut. |
| UNIQUE (contrainte de colonne et de table) | Indique si chaque valeur de la colonne doit être unique. |
| PRIMARY KEY (contrainte de colonne et de table) | Indique si les colonnes spécifiées doivent constituer la clé
principale de la table. Cette contrainte est principalement une combinaison de contraintes UNIQUE et NOT NULL, mais l'identification d'un ensemble de colonnes comme clé principale fournit également des métadonnées sur la conception du schéma. Une clé principale implique que les autres tables peuvent compter sur cet ensemble de colonnes comme identificateur unique de lignes. Vous ne pouvez spécifier qu'une contrainte de clé principale pour une table, comme contrainte de colonne ou contrainte de table. L'ensemble des colonnes qui constituent la clé principale doit être différent de tout autre ensemble de colonnes nommé par une contrainte unique définie pour la table. |
| DEFAULT (contrainte de colonne) | Valeur par défaut à placer dans chaque ligne de cette colonne. |
| REFERENCES (contrainte de colonne) | Les colonnes spécifiées de la nouvelle table ne doivent contenir que des valeurs qui correspondent à celles des colonnes spécifiées de la table spécifiée. |
| Table FOREIGN KEY et REFERENCES (contrainte de table) | Les colonnes spécifiées de la nouvelle table ne doivent contenir que des valeurs qui correspondent à celles des colonnes spécifiées de la table spécifiée. Si vous ne spécifiez pas de colonne, la valeur doit correspondre à la clé principale de la table. Les colonnes spécifiées de la table référencée doivent posséder une contrainte de clé unique ou principale dans cette table. |
| MATCH FULL | MATCH FULL empêche une colonne d'une clé externe à plusieurs colonnes d'être null si d'autres composants de la clé externe ne le sont pas. Il s'agit de la valeur par défaut. MATCH PARTIAL n'est pas pris en charge. |
| ON UPDATE | ON DELETE | Action à effectuer si la table ou les colonnes spécifiées sont mises à jour
ou supprimées :
|
La commande génère les sorties suivantes :
| Sortie | Description |
|---|---|
| CREATE TABLE | Le système renvoie ce message si la commande aboutit. |
| ERROR | Le système renvoie ce message si la création de table échoue. Le message d'erreur fournit un texte descriptif, tel que le suivant : ERROR: Relation 'table' already exists. |
Vous devez être administrateur, propriétaire de la base de données ou du schéma ou votre compte doit disposer des droits Create Table.
Voici un exemple de syntaxe :
MYDB.SCH1(USER)=>
CREATE TABLE name (
code CHARACTER(5) CONSTRAINT firstkey PRIMARY KEY,
title CHARACTER VARYING(40) NOT NULL,
did DECIMAL(3) NOT NULL,
date_prod DATE,
kind CHAR(10),
len INTERVAL HOUR TO MINUTE
);
MYDB.SCH1(USER)=>
CREATE TABLE name (
code CHAR(5),
title VARCHAR(40),
did DECIMAL(3),
date_prod DATE,
kind VARCHAR(10),
len INTERVAL HOUR TO MINUTE,
CONSTRAINT code_title PRIMARY KEY(code,title)
);
MYDB.SCH1(USER)=> CREATE TABLE distributors (
did DECIMAL(3),
name CHAR VARYING(40),
PRIMARY KEY(did)
);
MYDB.SCH1(USER)=> CREATE TABLE distributors (
did DECIMAL(3) PRIMARY KEY,
name VARCHAR(40)
);
Les deux exemples sont équivalents. Le premier exemple utilise la syntaxe des contraintes de table. Le deuxième exemple utilise la notation des contraintes de colonne.
MYDB.SCH1(USER)=> CREATE TABLE distributors (
did DECIMAL(3) CONSTRAINT no_null NOT NULL,
name VARCHAR(40) NOT NULL
);