Le langage SQL : DDL : CREATE
Le mot clé CREATE permet de créer des objets :
- base de données
- table
- domaine
- index
CREATE DATABASE
Comme son nom l'indique, cette instruction permet de créer la base de donnée.
Elle exige que le nom de la base soit donné en argument.
Elle exige également de disposer de droits d'administration sur la base de donnée.
Lorsque la base est créée (instruction exécutée, on ne peut pas la créer une deuxième fois.
- Exemple : CREATE DATABASE `ludobd`
CREATE TABLE
Cette instruction permet de créer la table e de lui associer les différents champs ainsi que leurs propriétés.
La syntaxe générale est :
CREATE TABLE `nomDeLaTable` (
`champ1` type,
`champ2` type,
`champ3` type,
...
`champn` type
)
Les types disponibles sont décrits dans le chapitre précédent.
Pour chaque champ il est également possible de définir des options supplémentaires :
- NOT NULL : empêche d’enregistrer une valeur nulle pour un champ.
- DEFAULT : attribuer une valeur par défaut si aucune donnée n’est indiquée pour ce champ lors de l’ajout d’un enregistrement.
- PRIMARY KEY : indiquer si le champ est considéré comme clé primaire pour un index.
- UNIQUE KEY : spécifie que la donnée saisie doit être unique pour ce champ dans la table.
- AUTO_INCREMENT : indique que chaque nouvel enregistrement de la donnée numérique est incrémenté (+1). Particulièrement utile pour les champs d'index.
Pour définir une contrainte dans une table on utilisera le mot clé CONSTRAINT selon la syntaxe
CONSTRAINT nomDeLaContrainte FOREIGN KEY (nomCleEtrangere)
REFERENCES tableLiée (nomDuChampLié);
Remarque : un commentaire peut être lié à la table grâce au mot clé COMMENT. Ce commentaire ne sera visible qu'avec la commande SHOW.
CREATE DOMAIN
Un domaine est l’équivalent d'un type structuré. Il permet de définir un nouveau type de données.
Par exemple les jours de la semaine.
CREATE DOMAIN nomDomaine
AS type
DEFAULT ValeurDéfaut
CONSTRAINT nomContrainte CHECK prédicat;
Exemple : Domaine permettant de définir le nom d'un jour :
CREATE DOMAIN d_jour AS CHAR(8)
DEFAULT 'Dimanche'
CONSTRAINT c_d_jour CHECK
(VALUE IN ('Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche'));
La commande CHECK permet de vérifier le respect d'une contrainte.
Exemple d'un champ eMail nécessitant le caractère '@' :
...
eMail VARCHAR(50),
UNIQUE KEY `eMail` (`eMail`),
CONSTRAINT `email_c` CHECK (`email` LIKE (`%@%.%`))
Attention MySQL ne reconnait l'instruction CHECK qu'à partir de la version 8.0.15
CREATE INDEX
Il est plus facile et rapide de retrouver des données d'un champ indexé. Voila pourquoi, on procède parfois à l'indexation de champs particuliers.
CREATE INDEX idx_adherent ON `adherents` (`nom`)
On peut aussi combiner plusieurs champs dans un même index :
CREATE INDEX idx_adherent ON `adherents` (`nom`,`prenom`)
Remarques :
- Les index sont invisibles pour les utilisateurs
- La mise à jour d'une table avec des index prend plus de temps que la mise à jour d'une table sans (parce que les indices ont également besoin d' une mise à jour). Il ne faut donc créer que des index réellement nécessaires.