Cet article contient du SQL de base CREATE TABLE instructions que les débutants peuvent utiliser pour créer des tables de base pour leurs projets de base de données.
Syntaxe de base
La syntaxe de base pour créer des tables en SQL ressemble à ceci :
CREATE TABLE TableName (
Column1 datatype optional_constraints,
Column2 datatype optional_constraints,
Column3 datatype optional_constraints,
...
); Où :
TableNameest le nom que vous voulez donner à la tableColumn1, etc sont les noms que vous donnez à vos colonnesdatatypeest le type de données que vous affectez à chaque colonne. La plupart des SGBDR exigent que vous attribuiez un type de données à chaque colonne. Dans SQLite, c'est facultatif.optional_constraintsest une liste facultative de contraintes que vous appliquez à une colonne.
Notez que la plupart des SGBD utilisent une syntaxe plus complexe que celle-ci (c'est-à-dire qu'ils offrent plus d'options), mais c'est généralement la syntaxe de base requise pour créer une table. La plupart des débutants commencent avec cette syntaxe, puis apprennent des options plus avancées au fur et à mesure de leur progression.
Exemple de base
Voici un exemple de base :
CREATE TABLE Pets
(
PetId int NOT NULL PRIMARY KEY,
PetTypeId int NOT NULL,
OwnerId int NOT NULL,
PetName varchar(60) NOT NULL,
DOB date NULL
); Voici quelques points à noter :
- Les noms de table et de colonne peuvent être dans n'importe quelle casse. Par exemple, au lieu de
PetIdJ'aurais pu l'appelerpetid,PETID, oupet_id. Certains SGBD (par exemple, Postgres) sont sensibles à la casse lorsque vous interrogez des tables et leurs noms de colonne, tandis que d'autres ne le sont pas (par exemple, SQL Server). - Certains SGBD utilisent des noms différents pour leurs types de données.
NOT NULLest une contrainte de table qui spécifie que cette colonne doit contenir une valeur (c'est-à-dire qu'elle ne peut pas contenirNULLvaleurs).NULLsignifie que la colonne est autorisée à contenirNULLvaleurs. Certains SGBD (tels que DB2) ne prennent pas en charge leNULLmot-clé, et vous devrez donc l'omettre lorsque vous travaillez avec de tels SGBD.PRIMARY KEYajoute une contrainte de clé primaire à la table. Il est recommandé de spécifier une clé primaire sur toutes vos tables.- Si une table du même nom existe déjà dans la base de données, vous obtiendrez une erreur. Vous devrez supprimer le tableau existant ou le modifier (ou changer le nom de celui que vous créez).
Créer une table avec des clés étrangères
L'exemple suivant crée une table avec deux clés étrangères. Les clés étrangères sont utilisées pour créer une relation entre deux tables.
CREATE TABLE Pets
(
PetId int NOT NULL PRIMARY KEY,
PetTypeId int NOT NULL REFERENCES PetTypes (PetTypeId),
OwnerId int NOT NULL REFERENCES Owners (OwnerId),
PetName varchar(60) NOT NULL,
DOB date NULL
);
Les REFERENCES La clause est utilisée pour définir une clé étrangère sur deux colonnes. Dans notre cas, les clés étrangères appliquent les éléments suivants :
- Le
Pets.PetTypeIdla colonne fait référence àPetTypes.PetTypeIdcolonne (toute valeur entrant dans la colonnePets.PetTypeIdla colonne doit avoir une valeur correspondante dans lePetTypes.PetTypeIdcolonne). - Le
Pets.OwnerIdla colonne fait référence àOwners.OwnerIdcolonne (toute valeur qui va dans lePets.OwnerIdla colonne doit avoir une valeur correspondante dansOwners.OwnerIdcolonne).
Les clés étrangères peuvent également être ajoutées ultérieurement, à l'aide de ALTER TABLE déclaration si nécessaire.
Créer une table avec la contrainte DEFAULT
L'exemple suivant crée une table avec un DEFAULT contrainte.
CREATE TABLE OrderItems
(
OrderId int NOT NULL PRIMARY KEY,
OrderItem int NOT NULL,
ProductId int NOT NULL,
Quantity int NOT NULL DEFAULT 1,
ItemPrice decimal(8,2) NOT NULL
); Créer un tableau avec une colonne d'horodatage
Vous pouvez utiliser DEFAULT contraintes pour insérer automatiquement la date et l'heure actuelles dans une colonne chaque fois qu'une nouvelle ligne est insérée. Ceci est souvent appelé insertion d'un horodatage.
Différents SGBD utilisent différentes fonctions pour renvoyer la date actuelle.
Voici un exemple de le faire dans SQL Server.
CREATE TABLE Users
(
UserId int NOT NULL PRIMARY KEY,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
DateInserted datetime DEFAULT CURRENT_TIMESTAMP
);
Dans SQL Server, CURRENT_TIMESTAMP est l'équivalent ANSI de GETDATE() fonction.
Vous pouvez également utiliser SYSDATETIME() pour un horodatage plus précis :
CREATE TABLE Users
(
UserId int NOT NULL PRIMARY KEY,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
DateInserted datetime2 DEFAULT SYSDATETIME()
); Afin de prendre en charge la plus grande précision, le type de données de la colonne doit être datetime2 .
SQL Server a plusieurs types de données pour les valeurs de date/heure. Voir les fonctions de date et d'heure de SQL Server pour une liste.
Chaque SGBD a ses propres fonctions pour retourner la date et l'heure. Voici une liste des principaux :
| DB2 | CURRENT_DATE |
| MySQL | CURRENT_DATE ou NOW() |
| Oracle | SYSDATE |
| PostgreSQL | CURRENT_DATE |
| SQL Server | CURRENT_TIMESTAMP , GETDATE() ou SYSDATETIME() |
| SQLite | datetime('now') |
Voir aussi :
- Fonctions de date et d'heure SQL Server
- Fonctions de date et d'heure SQLite
Créer une colonne avec une valeur qui s'incrémente automatiquement
Parfois, vous devez créer une colonne qui incrémente automatiquement une valeur chaque fois qu'une nouvelle ligne est insérée. Celles-ci sont généralement appelées colonnes "d'auto-incrémentation" ou "d'identité", selon le SGBD utilisé.
Dans SQL Server, utilisez le IDENTITY argument :
CREATE TABLE Users
(
UserId int NOT NULL IDENTITY(1,1) PRIMARY KEY,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
DateInserted datetime2 DEFAULT SYSDATETIME()
);
Dans ce cas, nous utilisons IDENTITY(1,1) .
- Le premier
1est la graine. Cela spécifie quelle valeur commencer le comptage (c'est-à-dire qu'il s'agit de la valeur de la toute première ligne insérée dans le tableau). - Le deuxième
1est l'incrément. Il s'agit de la valeur incrémentielle ajoutée à la valeur d'identité de la ligne précédente chargée.
Chaque SGBD a son propre mot-clé pour créer une colonne auto-incrémentée.
- Dans MySQL et MariaDb, utilisez
AUTO_INCREMENT - Dans SQLite, vous avez plusieurs options (y compris le
AUTOINCREMENTmot-clé) - Dans PostgreSQL, utilisez
SERIAL - Depuis la base de données Oracle 12c , vous pouvez désormais utiliser le mot clé IDENTITY pour créer des colonnes à incrémentation automatique. Un exemple pourrait ressembler à :
UserId NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY
Options avancées
La plupart des SGBD vous permettent de spécifier des options avancées lors de la création de tables. Les options disponibles dépendront en grande partie de votre SGBD.
Reportez-vous à la documentation de votre SGBD si vous avez besoin d'options qui ne sont pas spécifiées dans cet article.
De nombreuses options avancées peuvent être définies via l'interface graphique (selon l'outil que vous utilisez pour vous connecter à votre base de données). Vous pouvez toujours créer ou modifier une table via l'interface graphique, puis utiliser son option "Script as Create" (ou similaire) pour voir le code SQL que vous auriez besoin d'exécuter pour créer une telle table. Vous pouvez prendre ce code et modifier les noms de table, les noms de colonne, etc. pour créer une toute nouvelle table basée sur la définition de la précédente.