Qu'est-ce qu'une instruction SQL Create Table ?
Un schéma de base de données relationnelle est constitué d'un ensemble d'objets apparentés qui comprennent des tables, des vues et des index. La base de données est généralement constituée d'objets utilisateur et d'objets système utilisés pour cataloguer les objets de utilisateur et gérer l'instance de la base de données. De nombreuses bases de données, comme la plateforme de données Actian, ont un schéma unique pour toutes les applications, tandis que d'autres, comme DB2, ont des tablespaces ou DB Spaces pour contenir les schémas des utilisateur . L'instruction CREATE est une forme d'instruction DML (Database Manipulation Language), un sous-ensemble de la spécification du langage SQL utilisé pour créer des objets de base de données.
L'instruction CREATE TABLE est utilisée pour créer une nouvelle table dans une base de données relationnelle. La syntaxe comporte souvent des extensions non standard pour spécifier des critères de stockage.
Exemple de création d'une table en SQL
Vous trouverez ci-dessous un exemple simple de création de table SQL qui permet de créer une table contenant des données sur les départements d'une entreprise :
CRÉER UNE TABLE DÉPARTEMENTS ( Department-ID int, Nom du département varchar(255), Département-Centre de coût int ) ;
Vous pouvez créer des tableaux en utilisant un autre tableau comme modèle. Par exemple, le tableau ci-dessous ne contient que des lignes relatives au département ID 10 :
CREATE TABLE DEPARTMENT-10 AS SELECT * FROM DEPARTMENTS WHERE Département-ID = 10 ;
Exemples de SQL Actian
Les éléments suivants sont spécifiques aux bases de données Actian.
Cette déclaration se présente sous la forme suivante :
CREATE TABLE [IF NOT EXISTS] [schema.]nom_de_table (spécification_colonne {, spécification_colonne }) [contrainte_table {, contrainte_table}] [with_clause]
nom_de_table
Définit le nom de la nouvelle table. Il doit s'agir d'un nom d'objet valide.
spécification de la colonne
Définit les caractéristiques de la colonne.
contrainte_table
Spécifie la contrainte de niveau table telle que décrite dans Contraintes de niveau table et colonne.
avec_clause
Spécifie les options de la clause WITH séparées par une virgule. Pour plus d'informations, voir Clause WITH.
Spécification de la colonne
La spécification de colonne dans une instruction CREATE TABLE définit les caractéristiques d'une colonne dans la table.
La spécification de la colonne a le format suivant :
nom_de_la_colonne type de données
[[WITH] DEFAULT default_spec | WITH DEFAULT | NOT DEFAULT] [WITH NULL | NOT NULL] [masqué [as {basic | null | 0 | ' ']] [masqué [as {basic | 0 | ' ']].
[MASQUÉ [COMME {BASIQUE | NULL | 0 | ' ' }]
[GENERATED ALWAYS AS [seq_name] IDENTITY [(seq_options)]
| GENERATED BY DEFAULT AS [seq_name] IDENTITY [(seq_options)]] [[CONSTRAINT constraint_name] column_constraint]].
[[CONSTRAINT nom_de_la_contrainte] contrainte_de_la_colonne
{ [CONSTRAINT nom_de_la_contrainte] contrainte_de_la_colonne}]]
nom de la colonne
Attribue un nom valide (voir Règles d'attribution des noms d'objets) à la colonne.
type de données
Affecte un type de données valide à la colonne. Si CREATE TABLE...AS SELECT est spécifié, la nouvelle table prend les noms et les formats de ses colonnes dans les résultats de la clause SELECT de la sous-sélection spécifiée dans la clause AS (à moins que des noms de colonnes différents ne soient spécifiés).
Remarque : pour les colonnes char et varchar, la spécification de la colonne porte sur le nombre d'octets (et non sur le nombre de caractères).
Clause par défaut
Indique si la colonne est obligatoire.
AVEC NULL | NON NULL
Indique si la colonne accepte les zéros :
AVEC NULL
(Par défaut) Indique que la colonne accepte les valeurs nulles. Si l'utilisateur ne fournit aucune valeur, null est inséré.
NOT NULL
Indique que la colonne n'accepte pas les zéros.
[MASQUÉ [COMME {BASIQUE | NULL | 0 | ' ' }]
Affiche la colonne avec la caractéristique de masque spécifiée, sauf si l'utilisateur dispose du privilège UNMASK. La caractéristique de masque définit la manière d'afficher les données masquées :
BASIC - Remplit la largeur de la colonne avec des astérisques
NULL - NULL
0 - 0
' ' - vide
GENERATED ALWAYS AS [seq_name] IDENTITY [(seq_options)] | GENERATED BY DEFAULT AS [seq_name] IDENTITY [(seq_options)]
Indique que la colonne est une colonne IDENTITY. La colonne doit être définie comme un entier ou un bigint.
[CONSTRAINT nom_de_la_contrainte] contrainte_de_la_colonne
Spécifie les contrôles à effectuer sur le contenu de la colonne pour garantir des valeurs de données appropriées.
Clause DEFAULT
La clause WITH|NOT DEFAULT de la spécification de la colonne précise si une colonne nécessite une entrée.
Cette clause a le format suivant :
[WITH] DEFAULT default_spec | WITH DEFAULT | NOT DEFAULT
[WITH] DEFAULT default_spec
Indique que si aucune valeur n'est fournie (parce qu'aucune n'est requise), plateforme de données Actian insère la valeur par défaut. La valeur par défaut doit être compatible avec le type de données de la colonne.
Pour les colonnes de caractères, les valeurs par défaut valables comprennent les constantes : utilisateur, CURRENT_USER et SYSTEM_USER.
Pour les colonnes booléennes, les valeurs par défaut valides sont FALSE ou TRUE.
AVEC DEFAUT
Indique que si aucune valeur n'est fournie, plateforme de données Actian insère 0 pour les colonnes numériques et monétaires, une chaîne vide pour les colonnes de caractères, la date actuelle pour les colonnes de dates ANSI et l'horodatage actuel pour les colonnes d'horodatage.
PAS PAR DÉFAUT
Indique que la colonne est obligatoire (qu'elle doit être renseignée).
Voici un exemple d'utilisation de la clause DEFAULT :
CREATE TABLE DEPT(dname CHAR(10), location CHAR(10) DEFAULT 'NY', date de création DEFAULT '01/01/20', budget MONEY DEFAULT 10000) ;
Une colonne d'identité est une colonne d'entiers ou de bigints dont les valeurs sont automatiquement générées à partir d'une séquence définie par le système.
Une colonne d'identité permet de générer automatiquement une valeur numérique unique pour chaque ligne d'un tableau. Une table ne peut avoir qu'une seule colonne définie avec l'attribut identity.
La clause IDENTITY a le format suivant :
[GENERATED ALWAYS AS [seq_name] IDENTITY [(seq_options)]]
| GENERATED BY DEFAULT AS [seq_name] IDENTITY [(seq_options)]]
où :
GENERATED ALWAYS AS [seq_name] IDENTITY [(seq_options)]
Indique que la valeur de la colonne est déterminée par la séquence correspondante. L'utilisateur ne peut pas spécifier une valeur explicite pour la colonne dans une instruction INSERT ou UPDATE.
Les instructions INSERT qui contiennent des colonnes d'identité ALWAYS dans leur liste de colonnes doivent spécifier DEFAULT comme valeur correspondante. Pour remplacer ce comportement, utilisez les clauses OVERRIDING SYSTEM VALUE et OVERRIDING utilisateur VALUE de l'instruction INSERT.
Le type de données de la séquence correspond au type de données de la colonne d'identité.
GENERATED BY DEFAULT AS [seq_name] IDENTITY [(seq_options)]
Indique que l'utilisateur peut éventuellement fournir une valeur explicite pour la colonne.
nom_du_seq
Définit le nom de la séquence.
seq_options
Contrôlent la manière dont la séquence fournit les données lorsqu'elles sont demandées par une application. Les options de la séquence peuvent être spécifiées dans n'importe quel ordre, et aucune n'est obligatoire.
Chacune des options seq_ suivantes peut être spécifiée dans une liste séparée par des espaces vides :
COMMENCER PAR LE NUMÉRO
Spécifie le début de la séquence sous la forme d'une constante entière. La valeur par défaut est 1 pour les séquences positives (incrément positif) et -1 pour les séquences négatives (incrément négatif). (Cette option n'est valable qu'avec l'instruction CREATE SEQUENCE).
Redémarrer avec le numéro
Spécifie une nouvelle valeur de départ pour la séquence. (Cette option n'est valable qu'avec l'instruction ALTER SEQUENCE).
INCRÉMENTER PAR le nombre
Spécifie la valeur d'incrémentation (positive ou négative) qui produit les valeurs successives de la séquence.
Valeur par défaut : 1
MAXVALUE nombre
NO MAXVALUE / NOMAXVALUE
Spécifie que les séquences peuvent générer des valeurs dont la borne supérieure est équivalente à celle du type de données choisi pour contenir la séquence (par exemple, 2**31-1 pour les entiers).
MINVALUE nombre
Spécifie la valeur minimale autorisée pour la séquence.
PAS DE VALEUR MINIMALE / VALEUR NOMINALE
Spécifie que les séquences peuvent générer des valeurs dont la borne inférieure est équivalente à celle du type de données choisi pour contenir la séquence (par exemple, -2**31 pour les entiers).
Numéro de CACHE
Spécifie le nombre de valeurs de séquence conservées dans la mémoire du serveur. Lorsque la réserve de numéros est épuisée, plateforme de données Actian demande un accès au catalogue pour acquérir le jeu suivant.
Valeur par défaut : 20
PAS DE CACHE / NOCACHE
Spécifie que les valeurs de séquence ne doivent pas être mises en cache par le serveur. Lorsque cette option est sélectionnée, un accès au catalogue est nécessaire pour chaque demande de valeur de séquence. Les performances de l'application peuvent s'en trouver fortement dégradées.
Valeur par défaut : CACHE 20 (lorsque ni CACHE ni NOCACHE ne sont spécifiés), ce qui garantit une faible surcharge du catalogue.
CYCLE
Spécifie que la séquence redémarre à la valeur de départ lorsqu'elle atteint la valeur minimale (incrément négatif) ou maximale (incrément positif).
Défaut : NO CYCLE
NO CYCLE / NOCYCLE
Spécifie que la séquence n'est pas cyclée lorsque la dernière valeur valide est générée. Une erreur est transmise à la transaction requérante.
Défaut : SEQUENTIEL
La séquence créée pour gérer les valeurs des colonnes d'identité est accessible par son nom généré. La séquence générée ne peut cependant pas être explicitement supprimée ; à la place, la colonne ou la table d'identité doit être supprimée, ou l'instruction ALTER utilisateur ... ALTER COLUMN ... DROP IDENTITY doit être utilisée.
Contraintes
Pour vous assurer que le contenu des colonnes répond aux exigences de votre base de données, spécifiez des contraintes.
Les contraintes peuvent être spécifiées pour des colonnes individuelles ou pour l'ensemble du tableau. Pour plus d'informations, voir Contraintes au niveau de la table et au niveau de la colonne.
Les types de contraintes sont les suivants :
- Contrainte d'unicité - Assure qu'une valeur n'apparaît qu'une seule fois dans une colonne. Les contraintes d'unicité sont spécifiées à l'aide de l'option UNIQUE.
- Contrainte référentielle - Assure qu'une valeur attribuée à une colonne apparaît dans une colonne correspondante d'une autre table. Les contraintes référentielles sont spécifiées à l'aide de l'option REFERENCES.
- Contrainte de clé primaire - Déclare une ou plusieurs colonnes à utiliser dans des contraintes référentielles dans d'autres tables. Les clés primaires doivent être uniques.
Contraintes au niveau des tables et des colonnes
Les contraintes peuvent être spécifiées pour des groupes de colonnes dans le cadre de la définition de la table (contraintes au niveau de la table) ou pour des colonnes individuelles dans le cadre de la spécification de la colonne (contraintes au niveau de la colonne).
La contrainte a la syntaxe suivante :
[CONSTRAINT nom_de_la_contrainte] contrainte
nom_de_la_contrainte
Définit un nom pour la contrainte. Si le nom est omis, plateforme de données Actian en attribue un. Le nom de la contrainte est utilisé pour supprimer la contrainte à l'aide de l'instruction ALTER TABLE.
Note : Il est recommandé de définir un nom lors de la création d'une contrainte ; dans le cas contraire, les catalogues de systèmes doivent être interrogés pour déterminer le nom défini par le système.
contrainte
Est soit une contrainte au niveau de la table (table_constraint), soit une contrainte au niveau de la colonne (column_constraint).
table_constraint est un ou plusieurs des éléments suivants :
UNIQUE (nom_de_colonne {, nom_de_colonne})
PRIMARY KEY (nom_de_colonne {, nom_de_colonne})
REFERENCES [schema.]nom_table [(nom_de_colonne {, nom_de_colonne})] [enforce_option] [referential_actions]
column_constraint est un ou plusieurs des éléments suivants :
UNIQUE
CLÉ PRIMAIRE
FOREIGN KEY (nom_de_colonne {, nom_de_colonne})
REFERENCES [schema.]nom_de_table[(nom_de_colonne)] [enforce_option] [referential_actions]
où :
enforce_option
Indique si les contraintes sont appliquées. Les valeurs valides sont les suivantes :
NON EXÉCUTÉ
N'applique pas la contrainte lorsqu'elle est définie ou lorsque la table est mise à jour. La contrainte est définie dans les catalogues de la base de données. Les contraintes NOT ENFORCED peuvent être utilisées pour générer des instructions SQL ou des plans de requête améliorés.
Les index ne sont pas créés pour les contraintes NOT ENFORCED.
EXÉCUTÉ
(Par défaut) Applique la contrainte.
Il existe des options supplémentaires pour spécifier les actions référentielles et le partitionnement, qui sont décrites sur le site docs.actian.com.
En résumé
Actian Zen propose une API SQL et No-SQL ou basée sur un index de clés pour donner aux développeurs un choix de méthodes d'accès. Actian Zen est un SGBD conçu pour une administration réduite. Il est temps de faciliter l'accès à vos données ; visitez notre site Web pour découvrir comment.