Vous êtes sur la page 1sur 42

SQL : Langage de Définition de Données

Achref El Mouelhi

Docteur de l’université d’Aix-Marseille


Chercheur en programmation par contrainte (IA)
Ingénieur en génie logiciel

elmouelhi.achref@gmail.com

H & H: Research and Training 1 / 22


Plan

1 Gestion de base de données

2 Gestion de tables

H & H: Research and Training 2 / 22


Gestion de base de données

Création et suppression d’une base de données


Création
CREATE DATABASE nom_base_de_données;

I c

ELH
U
L MO
f E
c hre
c A

H & H: Research and Training 3 / 22


Gestion de base de données

Création et suppression d’une base de données


Création
CREATE DATABASE nom_base_de_données;

Suppression :
I c

DROP DATABASE nom_base_de_données [IF EXISTS];
EL H
U
L Msi O
IF EXISTS : pour éviter le message d’erreur la BD n’existe pas.

h r e fE
A c
c

H & H: Research and Training 3 / 22


Gestion de base de données

Création et suppression d’une base de données


Création
CREATE DATABASE nom_base_de_données;

Suppression :
I c

DROP DATABASE nom_base_de_données [IF EXISTS];
EL H
U
L Msi O
IF EXISTS : pour éviter le message d’erreur la BD n’existe pas.

h r e fE
A c
c
Pour utiliser la base de données
USE nom_base_de_données;

H & H: Research and Training 3 / 22


Gestion de base de données

Création et suppression d’une base de données


Création
CREATE DATABASE nom_base_de_données;

Suppression :
I c

DROP DATABASE nom_base_de_données [IF EXISTS];
EL H
U
L Msi O
IF EXISTS : pour éviter le message d’erreur la BD n’existe pas.

h r e fE
A c
c
Pour utiliser la base de données
USE nom_base_de_données;

Pour afficher toutes les bases de données


SHOW DATABASES;

H & H: Research and Training 3 / 22


Gestion de base de données

Création d’une table

Plusieurs moteurs de table

c
MyISAM : rapide mais n’utilise pas les clés-étrangères [moteur par
I
L H
défaut de MySQL pour les versions antérieurs à 5.5]
E
InnoDB : plus lent, mais il utilise lesOU
défaut depuis la version 5.5.]L
M clés-étrangères [moteur par
h r e fE
Memory : utilise
A cla RAM pour le stockage de données
Merge
c
...

H & H: Research and Training 4 / 22


Gestion de tables

Création d’une table


Création :
CREATE TABLE nom_table (
nom_colonne1 type,
...
nom_colonnen type,
I c

EL H
U
MO
[PRIMARY KEY (colonnes_cles_primaires)]
L
fE
);

c h r e
c A

H & H: Research and Training 5 / 22


Gestion de tables

Création d’une table


Création :
CREATE TABLE nom_table (
nom_colonne1 type,
...
nom_colonnen type,
I c
EL H
U
MO
[PRIMARY KEY (colonnes_cles_primaires)]
L
fE
);

h r e
cclé primaire composée d’une seule colonne :
A
Dans le cascd’une

CREATE TABLE nom_table (
nom_colonne1 type PRIMARY KEY,
...
nom_colonnen type
);
H & H: Research and Training 5 / 22
Gestion de tables

Création d’une table

Autres propriétés de colonne

NOT NULL : pour indiquer que ce champ doit toujours être rempli
(par défaut le null est accepté)
I c

ELH
AUTO INCREMENT : valeur à incrémenter automatiquement,
généralement pour les clés primaires U
L MO
E
DEFAULT : pour indiquer une valeur par défaut si le champ n’est
f
pas rempli
chre
c A

UNIQUE : nous pouvons avoir d’autres colonnes que la clé
primaire dont les valeurs sont uniques (exemple, numéro CNI,
numéro PASSEPORT, numéro carte vitale, numéro carte
étudiant...)
CHECK : préciser une contrainte sur les valeurs acceptées

H & H: Research and Training 6 / 22


Gestion de tables

Suppression d’une table

Pour supprimer une table

I c

DROP TABLE nom_table;
ELH
U
L MO
f E
chre
c A

H & H: Research and Training 7 / 22


Gestion de tables

Suppression d’une table

Pour supprimer une table

I c

DROP TABLE nom_table;
ELH
U
L MO
f E
hre
Pour supprimer toutes les données d’une table sans supprimer la
table
A c
c
TRUNCATE
TABLE nom_table;

H & H: Research and Training 7 / 22


Gestion de tables

Modification d’une table (existante)


Ajouter une colonne (qui sera la dernière dans la table)
ALTER TABLE nom_table
ADD nom_colonne type propriété;

I c

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 8 / 22


Gestion de tables

Modification d’une table (existante)


Ajouter une colonne (qui sera la dernière dans la table)
ALTER TABLE nom_table
ADD nom_colonne type propriété;

I c

éeE
Ajouter une colonne à une position donnU
LH
ALTER TABLE nom_table L MO
ADD nom_colonne type
r e E
fpropriété AFTER
c h
c A
nom_colonne_existante;

H & H: Research and Training 8 / 22


Gestion de tables

Modification d’une table (existante)


Ajouter une colonne (qui sera la dernière dans la table)
ALTER TABLE nom_table
ADD nom_colonne type propriété;

I c

éeE
Ajouter une colonne à une position donnU
LH
ALTER TABLE nom_table L MO
ADD nom_colonne type
r e E
fpropriété AFTER
c h
c A
nom_colonne_existante;

Supprimer une colonne
ALTER TABLE nom_table
DROP nom_colonne ;

H & H: Research and Training 8 / 22


Gestion de tables

Modification d’une table (existante)

Modifier une colonne (possible de la renommer)


ALTER TABLE nom_table
I c

CHANGE ancien_nom nouveau_nom type propriété;
ELH
U
L MO
f E
chre
c A

H & H: Research and Training 9 / 22


Gestion de tables

Modification d’une table (existante)

Modifier une colonne (possible de la renommer)


ALTER TABLE nom_table
I c

CHANGE ancien_nom nouveau_nom type propriété;
ELH
U
L MO
f E
re pouvoir la renommer)
h
Modifier une colonne (sans
c

ALTER TABLEc A nom_table
MODIFY nom_colonne type propriété;

H & H: Research and Training 9 / 22


Gestion de tables

Les contraintes sur tables : les clés étrangères

Au moment de la création de la table


CREATE TABLE nom_table (
I c

nom_colonne1 type PRIMARY KEY,
ELH
...
U
nom_colonnen type,
L MO
f E
[CONSTRAINT nom_contrainte] FOREIGN KEY (
chre
nom_colonne) REFERENCES table_dorigine(
c A

nom_colonne)

);

H & H: Research and Training 10 / 22


Gestion de tables

Les contraintes sur tables : les clés étrangères

En modifiant la table
ALTER TABLE nom_table
ADD CONSTRAINT nom_contrainte FOREIGN KEY ( I c

nom_colonne) REFERENCES table_dorigine( ELH
U
nom_colonne) ;
L MO
f E
chre
c A

H & H: Research and Training 11 / 22


Gestion de tables

Les contraintes sur tables : les clés étrangères

En modifiant la table
ALTER TABLE nom_table
ADD CONSTRAINT nom_contrainte FOREIGN KEY ( I c

nom_colonne) REFERENCES table_dorigine( ELH
U
nom_colonne) ;
L MO
f E
chre
Attention c A

Il faut que les types des attributs référencés soient les mêmes.

H & H: Research and Training 11 / 22


Gestion de tables

Les contraintes sur tables : les clés étrangères

Pour supprimer une clé étrangère


ALTER TABLE nom_table
DROP FOREIGN KEY nom_contrainte
I c

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 12 / 22


Gestion de tables

Les contraintes sur tables : les clés étrangères

Pour supprimer une clé étrangère


ALTER TABLE nom_table
DROP FOREIGN KEY nom_contrainte
I c

ELH
U
L MO d’une valeur clé
Précisions sur la modification/suppression
étrangère
h r e fE
ALTER TABLE A c
nom_table
c
nom_constraint FOREIGN KEY (
ADD CONSTRAINT
nom_colonne) REFERENCES nom_table(nom_colonne)
ON DELETE SET NULL
ON UPDATE CASCADE;

H & H: Research and Training 12 / 22


Gestion de tables

Les contraintes sur tables : Les clés primaires


Nommer la contrainte clé primaire
CREATE TABLE nom_table (
nom_colonne1 type,
...
nom_colonnen type,
I c

CONSTRAINT nom_constraint PRIMARY KEY (
ELH
U
MO
colonnes_cles_primaires)
);
f E L
chre
c A

H & H: Research and Training 13 / 22


Gestion de tables

Les contraintes sur tables : Les clés primaires


Nommer la contrainte clé primaire
CREATE TABLE nom_table (
nom_colonne1 type,
...
nom_colonnen type,
I c

CONSTRAINT nom_constraint PRIMARY KEY (
ELH
U
MO
colonnes_cles_primaires)
);
f E L
Exemple
chre
c A

CREATE TABLE employee(
cin char(6),
prenom char(20),
nom char(20),
CONSTRAINT pk_employee PRIMARY KEY(nom,prenom)
);
H & H: Research and Training 13 / 22
Gestion de tables

Les contraintes sur tables : Les clés primaires

Supprimer une clé primaire


ALTER TABLE nom_table
I c

DROP PRIMARY KEY;
ELH
U
L MO
f E
chre
c A

H & H: Research and Training 14 / 22


Gestion de tables

Les contraintes sur tables : Les clés primaires

Supprimer une clé primaire


ALTER TABLE nom_table
I c

DROP PRIMARY KEY;
ELH
U
L MO
f E
Exemple
chre
c A

ALTER TABLE employee
DROP PRIMARY KEY ;

H & H: Research and Training 14 / 22


Gestion de tables

Les contraintes sur tables : Les clés primaires

Déclarer une clé primaire pour une table déjà existante


ALTER TABLE nom_table
I c

ADD [CONSTRAINT [nom_contrainte]] PRIMARY KEY (
ELH
colonnes_cles_primaires);
U
L MO
f E
chre
c A

H & H: Research and Training 15 / 22


Gestion de tables

Les contraintes sur tables : Les clés primaires

Déclarer une clé primaire pour une table déjà existante


ALTER TABLE nom_table
I c

ADD [CONSTRAINT [nom_contrainte]] PRIMARY KEY (
ELH
colonnes_cles_primaires);
U
L MO
f E
Exemple
A c hre
c
employee
ALTER TABLE
ADD CONSTRAINT pk_employee PRIMARY KEY (cin);

H & H: Research and Training 15 / 22


Gestion de tables

Pourquoi nommer les contraintes ?

Explication
Les tables peuvent avoir plusieurs contraintes I c

H
L é par le SGBD
Eattribu
O
Une contrainte non-nommée aura un nom U
En cas de violation d’uneE L M
d’erreur + le nomh r
de e f contrainte, le SGBD affiche un message
la contrainte violée
A c
c
connait pas le nom de la contrainte, on ne saura pas la
Si on ne
source du problème

H & H: Research and Training 16 / 22


Gestion de tables

Quelques exemples pratiques

AUTO INCREMENT
Par défaut, il commence de 1.

c

On peut toujours changer sa valeur initiale : AUTO INCREMENT
I
= 100
ELH
U
L MO
f E
chre
c A

H & H: Research and Training 17 / 22


Gestion de tables

Quelques exemples pratiques

AUTO INCREMENT
Par défaut, il commence de 1.

c

On peut toujours changer sa valeur initiale : AUTO INCREMENT
I
= 100
ELH
U
L MO
f E
chre
c A
CREATE TABLE etudiant(

num int PRIMARY KEY AUTO_INCREMENT,
age int
);

ALTER TABLE etudiant AUTO_INCREMENT = 100;

H & H: Research and Training 17 / 22


Gestion de tables

Quelques exemples pratiques

I c

H
Pour rendre une colonne auto-increment après création de la
EL
table
U
ALTER TABLE etudiant
L MO
f E
hre
MODIFY COLUMN num int AUTO_INCREMENT;
c
c A

H & H: Research and Training 18 / 22


Gestion de tables

Quelques exemples pratiques

Exemple de CHECK
I c

CREATE TABLE etudiant(
ELH
U
num int,
L MO
age int,
f E
CHECK (age < 150)
chre
c A
);

H & H: Research and Training 19 / 22


Gestion de tables

Quelques exemples pratiques


Consulter la liste des tables d’une base de données
SHOW TABLES;

I c

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 20 / 22


Gestion de tables

Quelques exemples pratiques


Consulter la liste des tables d’une base de données
SHOW TABLES;

I c

Afficher le schéma d’une table (la description)
ELH
DESC[RIBE] nom_table; U
L MO
f E
chre
c A

H & H: Research and Training 20 / 22


Gestion de tables

Quelques exemples pratiques


Consulter la liste des tables d’une base de données
SHOW TABLES;

I c

Afficher le schéma d’une table (la description)
ELH
DESC[RIBE] nom_table; U
L MO
f E
ou
A c hre
EXPLAIN c
nom_table;

H & H: Research and Training 20 / 22


Gestion de tables

Quelques exemples pratiques


Consulter la liste des tables d’une base de données
SHOW TABLES;

I c

Afficher le schéma d’une table (la description)
ELH
DESC[RIBE] nom_table; U
L MO
f E
ou
A c hre
EXPLAIN c
nom_table;

ou aussi
SHOW COLUMNS FROM nom_table;
H & H: Research and Training 20 / 22
Gestion de tables

Quelques exemples pratiques


Afficher le nom de la base de données courante
SELECT DATABASE();

I c

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 21 / 22


Gestion de tables

Quelques exemples pratiques


Afficher le nom de la base de données courante
SELECT DATABASE();

I c

Afficher les détails sur ma base de données
ELH
USE INFORMATION_SCHEMA; U
SELECT TABLE_NAME,
L MO
f E
hre
COLUMN_NAME,
CONSTRAINT_NAME, c
c A

REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME
FROM KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = "nom_BD"
AND TABLE_NAME = "nom_table"
AND REFERENCED_COLUMN_NAME IS NOT NULL;
H & H: Research and Training 21 / 22
Gestion de tables

Quelques exemples pratiques

Pour changer le moteur d’une table


ALTER TABLE nom_table
engine = InnoDB;
I c

ELH
U
L MO
f E
chre
c A

H & H: Research and Training 22 / 22


Gestion de tables

Quelques exemples pratiques

Pour changer le moteur d’une table


ALTER TABLE nom_table
engine = InnoDB;
I c

ELH
Pour changer l’encodage d’une table O
U
L M
ALTER TABLE nom_table
ref E
c h
c A
charset = utf8;

H & H: Research and Training 22 / 22


Gestion de tables

Quelques exemples pratiques

Pour changer le moteur d’une table


ALTER TABLE nom_table
engine = InnoDB;
I c

ELH
Pour changer l’encodage d’une table O
U
L M
ALTER TABLE nom_table
ref E
c h
c A
charset = utf8;

Pour consulter le code de création d’une table
SHOW CREATE TABLE nom_table;

H & H: Research and Training 22 / 22