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ù :
TableName
est le nom que vous voulez donner à la tableColumn1
, etc sont les noms que vous donnez à vos colonnesdatatype
est 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_constraints
est 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
PetId
J'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 NULL
est une contrainte de table qui spécifie que cette colonne doit contenir une valeur (c'est-à-dire qu'elle ne peut pas contenirNULL
valeurs).NULL
signifie que la colonne est autorisée à contenirNULL
valeurs. Certains SGBD (tels que DB2) ne prennent pas en charge leNULL
mot-clé, et vous devrez donc l'omettre lorsque vous travaillez avec de tels SGBD.PRIMARY KEY
ajoute 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.PetTypeId
la colonne fait référence àPetTypes.PetTypeId
colonne (toute valeur entrant dans la colonnePets.PetTypeId
la colonne doit avoir une valeur correspondante dans lePetTypes.PetTypeId
colonne). - Le
Pets.OwnerId
la colonne fait référence àOwners.OwnerId
colonne (toute valeur qui va dans lePets.OwnerId
la colonne doit avoir une valeur correspondante dansOwners.OwnerId
colonne).
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
1
est 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
1
est 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
AUTOINCREMENT
mot-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.