Introduction aux Bases de Données
Prof : A.Oukhatar
2023/2024
Filière: Licence Cyber Securite
a.oukhatar@uiz.ac.ma
ayoub.oukhatar@gmail.com
Programme du cours
❑Introduction
❑Les SGBD
❑Modèle de données
❑Modèle conceptuel de données (Modèle Entité/Association)
❑Le Modèle Relationnel
❑Algèbre relationnelle
❑Le Langage SQL
LES REQUETES SQL
E. F. CODD : premiers articles dans les années 70 IBM crée le langage SEQUEL
(Structured English Query Language) ancêtre du langage SQL Ce langage devient SQL
(Structured Query Language, prononcer sikuel) En 1979, Relational Software Inc. (devenu
depuis Oracle) met en place la première version commerciale de SQL Principaux SGBDR
: Oracle, DB2, Informix, SQL-Server, Ingres, MySQL, Interbase, ….
Ce langage a fait l’objet de normalisations successives de la part de l’ANSI
(American National Standards Institute) pour aboutir: en 1992 à SQL 2 puis en
1999 à SQL 3 et SQL:2016 en dernière version
SQL est un langage formé de plusieurs sous langages
SQL signifie langage d’interrogation structuré, SQL est un Langage
complet de gestion de bases de Données
relationnelles.
SQL regroupe les langages suivants:
Un langage de définition des données
(LDD ; ordres CREATE, ALTER, DROP)
Un langage de manipulation des données
(LMD; ordres UPDATE, INSERT, DELETE)
Un langage d'interrogation de la base
(LID; ordre SELECT)
Un langage de contrôle de l'accès aux données
(LCD ; ordres GRANT,REVOKE).
OPERATIONS SQL
4
SQL le SGBD MYSQL
▪ Aujourd’hui :Il est devenu le langage standard
des systèmes de gestion de bases de données
(SGBD) relationnelles
▪ Le langage SQL est utilisé par les principaux
SGBDR : DB2, Oracle, Informix, Ingres, RDB,
MySQL,... Chacun de ces SGBDR a cependant sa
propre variante du langage.
SQL(Structured query language)
5
SQL le SGBD MYSQL
LDD
SQL(Structured query language)
Cette partie décrit les instructions SQL qui constituent l’aspect LDD.
(LDD ; ordres CREATE, ALTER, DROP)
Création d’une base de données:
Syntaxe: CREATE DATABASE [IF NOT EXISTS] name_database;
Exemple: CREATE DATABASE gestioneducation;
Suppression d’une base de données:
Syntaxe: DROP DATABASE [IF EXISTS] name_database;
Exemple: DROP DATABASE gestioneducation;
La destruction d’une base entraîne aussi la suppression de ses tables.
NOTES:
1. L’option IF NOT EXISTS permet de n’est créée la BD que si elle n’existe pas déjà. Cela
évite les messages d’erreur.
2.Les noms des bases de données, tables… peuvent contenir les caractères spéciaux $ et _.
LDD: Langage Définition des données
7
SQL le SGBD MYSQL
Création d’une table :
Syntaxe:
CREATE TABLE nomTable
( colonne1 type1 [NOT NULL | NULL] [DEFAULT ‘valeur1’]
,colonne2 type2 [NOT NULL | NULL] [DEFAULT ‘valeur2’]
,colonne3 type3 [NOT NULL | NULL] [DEFAULT ‘valeur3’]
[CONSTRAINT nomContrainte1 typeContrainte1]...
) ;
« , »: Séparateur entre les champs.
LDD: Création des tables
8
SQL le SGBD MYSQL
Création d’une table :
Exemple:
LDD: Création des tables:Exemple
9
SQL le SGBD MYSQL
CREATE TABLE ETUDIANT
(
CODE_MASAR char(20) not null,
NOM char(20),
PRENOM char(20),
DATE_NAISSANCE date,
primary key (CODE_MASAR)
);
Déclaration des contraintes:
Les contraintes peuvent être déclarées de deux manières :
1.contraintes en ligne (inline constraints):
Se définissent en même temps que la déclaration de la colonne;
2.Contraintes hors ligne (out-of-line constraints). :
Se définissent après que la colonne est déclarée ; ces contraintes ne sont pas
limitées à une colonne et peuvent être personnalisées par un nom.
Il est recommandé de déclarer les contraintes NOT NULL en ligne, les
autres peuvent soit être déclarées en ligne, soit être nommées
LDD: Les contraintes (1)
10
SQL le SGBD MYSQL
NOT NULL: pour que chaque enregistrement de l’attribut ait obligatoirement une
valeur non nulle.
Exemple: nom_attr VARCHAR(10) NOT NULL;
DEFAULT : 'valeur_défaut' permet de définir une valeur par défaut pour l’attribut
si aucune valeur n’y est enregistrée.
Exemple: nom_attr VARCHAR(10) DEFAULT 'valeur_défaut';
LDD: Les contraintes (2)
11
SQL le SGBD MYSQL
AUTO_INCREMENT: Pour qu’un attribut numérique entier soit
automatiquement incrémenté d’une unité à chaque insertion
d’un enregistrement.
Exemple: id tinyint NOT NULL auto_increment;
Pour que cette contrainte soit valable, il faut que l’attribut soit
indexé ou qu’il soit la clé primaire.
COMMENT : (jusqu’à 60 caractères) permet de commenter une colonne.
LDD: Les contraintes (3)
12
SQL le SGBD MYSQL
INDEX[nom_index] (nom_attribut1,nom_attribut2,...) crée un index pour la
table à partir des colonnes précisées.
Exemple: INDEX mon_index (nom,prenom);
crée un index nommé mon_index sur les colonnes nom et prenom.
La création d’index sur des colonnes de la table facilite les recherches quand ces colonnes
sont utilisées comme critère de recherche.
LDD: Les contraintes (4)
13
SQL le SGBD MYSQL
sont les clés primaires, les clés étrangères, l’unicité….
Syntaxe de base:
CONSTRAINT nomContraintei typeContraintei;
: nom de la contrainte suivi de son type
Syntaxe développée :
CONSTRAINT nomContrainte
UNIQUE (colonne1 [,colonne2]...)
PRIMARY KEY (colonne1 [,colonne2]...)
FOREIGN KEY (colonne1 [,colonne2]...)
REFERENCES nomTablePere [(colonne1 [,colonne2]...)]
CHECK (condition)
LDD: Les contraintes nommées
14
SQL le SGBD MYSQL
PRIMARY KEY : pour définir l’attribut comme clé primaire de la table.
Exemple1: id_etud tinyint(4) NOT NULL AUTO_INCREMENT, PRIMARY KEY (id_etud);
id_etud tinyint(4) NOT NULL AUTO_INCREMENT PRIMARY KEY ;
ou
CONSTRAINT pk_nom PRIMARY KEY(nom);
définit l’attribut nom comme une clé primaire.
Exemple2: PRIMARY KEY (nom, prenom);
ou CONSTRAINT pk_np PRIMARY KEY(nom,prenom);
crée une clé primaire composée des deux attributs, nom et prenom.
LDD: La contrainte PRIMARY KEY
15
SQL le SGBD MYSQL
UNIQUE(nom_attribut1,nom_attribut2,...) pour que chaque enregistrement ait une
valeur unique dans la colonne des attributs précisés.
Exemple: UNIQUE(nom, prenom);
ou
CONSTRAINT un_nom UNIQUE(nom,prenom);
Empêche d’enregistrer deux personnes ayant le même nom et le même
prénom. Par contre, deux noms identiques avec deux prénoms
différents sont acceptés.
LDD: La contrainte UNIQUE
16
SQL le SGBD MYSQL
FOREIGN KEY: Définit une clé étrangère
Exemple: Dans la table module on peut écrire
FOREIGN KEY(code_masar) REFERENCES etudiant(code_masar)
Ou
CONSTRAINT fk_etud FOREIGN KEY (Code_masar) REFERENCES
etudiant (Code_masar));
LDD: La contrainte FOREIGN KEY
17
SQL le SGBD MYSQL
« ;» : symbole par défaut qui termine une instruction MySQL en mode ligne
de commande.
Délimiteurs
En mode ligne de commande, il est possible (par la directive delimiter
de choisir le symbole qui terminera chaque instruction).
Exemple:
delimiter $
CREATE TABLE Test (t CHAR(8))$
Sensibilité à la casse
MySQL est sensible par défaut à la casse (au niveau des noms de base et
de table) dans la plupart des distributions Unix, il ne l’est pas pour Windows
LDD: Délimiteurs
18
SQL le SGBD MYSQL
Commentaires
Dans toute instruction SQL (déclaration, manipulation, interrogation et contrôle des données), il
est possible d’inclure des retours chariot, des Tabulations, espaces et commentaires :
 sur une ligne précédée de deux tirets «-- »,
 en fin de ligne à l’aide du dièse « # »,
 au sein d’une ligne ou sur plusieurs lignes entre « /* » et « */ ».
Exemple:
Sans commentaire
CREATE TABLE Test(colonne
DECIMAL(38,8));
CREATE TABLE
Test (
colonne
DECIMAL(38,8)
);
Avec commentaire
CREATE TABLE
-- nom de la table
Test( #début de la description
COLONNE DECIMAL(38,8)
)
-- fin, ne pas oublier le point-virgule.
;
CREATE TABLE Test (
/* une plus grande description
des colonnes */
COLONNE /* type : */ DECIMAL(38,8));
LDD: Commentaires
19
SQL le SGBD MYSQL
Exemple:
1.Deux contraintes en ligne
2. Une contrainte nommée de clé primaire.
Id_Entre nrue rue ville nomEntre
LDD: Exemple
20
SQL le SGBD MYSQL
CREATE TABLE entreprise(
Id_entre CHAR(4),
nrue INTEGER(3),
rue CHAR(20),
ville CHAR(15) DEFAULT ‘Ouarzazate’ COMMENT 'Par defaut : Ouarzazat’,
Nom_Entreprise CHAR(15) NOT NULL
CONSTRAINT pk_entreprise PRIMARY KEY(id_entre));
Exemple:
Une contrainte en ligne
et quatre contraintes nommées
LDD: Exemple
21
SQL le SGBD MYSQL
CREATE TABLE fonctionnaire(
id_fct CHAR(6), nom CHAR(15) NOT NULL,
nbH DECIMAL(7,2),
Id_entre CHAR(4),
CONSTRAINT pk_fonctionnaire PRIMARY KEY(id_fct),
CONSTRAINT ck_nbH CHECK(nbH BETWEEN 0 AND 20000),
CONSTRAINT un_nom UNIQUE (nom),
CONSTRAINT fk_fct_entre FOREIGN KEY (Id_entre) REFERENCES
Entreprise(Id_entre)
);
colonnei typei : nom d’une colonne (mêmes caractéristiques que pour les
noms des tables) et son type de données( INTEGER,
CHAR,DATE…).
Quels sont les types de données disponibles sous MySQL..?
MySQL permet de stocker des informations selon de nombreux types de
données. Cela donne la possibilité d’adapter le plus précisément possible le
type de donnée à l’information qui est enregistrée dans une table. Le choix du
type doit se faire de telle sorte que l’information occupe le moins d’octets
possible.
LDD: Les colonnes et leurs types
22
SQL le SGBD MYSQL
Les types numériques permettent de stocker toutes sortes de valeurs numériques entières ou décimales avec des
intervalles de valeurs très étendus.
Les entiers:
TINYINT: Un très petit entier prenant des valeurs de –128 (– 27) à 127 (27 – 1). S’il est suivi de l’option
UNSIGNED, les valeurs sont positives et varient de 0 à 255 (28 – 1). Chaque valeur occupe 1 octet.
SMALLINT: Un petit entier prenant des valeurs de –32768 (– 215) à 32767 (215 – 1). S’il est suivi de l’option
UNSIGNED, les valeurs sont positives et varient de 0 à 65535 (216 – 1). Chaque valeur occupe 2 octets.
MEDIUMINT: Entier moyen prenant des valeurs de –8388608 (– 223) à 8388607 (223 – 1).S’il est suivi de
l’option UNSIGNED, les valeurs sont positives et varient de 0 à 16777215 (224 – 1). Chaque valeur occupe
3 octets.
INT ou INTEGER Entier prenant des valeurs de –2147483648 (– 231) à 2147483647 (231 – 1). S’il est suivi de
l’option UNSIGNED, les valeurs sont positives et varient de 0 à 4294967295 soit 232 – 1. Chaque valeur
occupe 4 octets.
BIGINT Grand entier prenant des valeurs de –9223372036854775808 (– 263) à 9223372036854775807 (263 – 1).
S’il est suivi de l’option UNSIGNED, les
valeurs sont positives et varient de 0 à 18446744073709551615, soit 264 – 1. Chaque valeur occupe 8 octets
LDD: Types numériques(1)
23
SQL le SGBD MYSQL
FLOAT :Nombre à virgule flottante en simple précision prenant des valeurs de –3.402823466E+38 à –
1.75494351E–38 pour les nombres négatifs et de 1.75494351E–38 à 3.402823466E+38 pour les
positifs. S’il est suivi de l’option UNSIGNED, les valeurs sont uniquement positives. Avec les
options FLOAT (M,D), l’affichage s’effectue avec M chiffres dont D décimales. Chaque valeur
occupe 4 octets.
DOUBLE :Nombre à virgule flottante en double précision prenant des valeurs
de –1.7976931348623157E+308 à –2.2250738585072014E–308 pour les
nombres négatifs et de 2.2250738585072014E–308 à 1.7976931348623157E+308
pour les positifs. S’il est suivi de l’option UNSIGNED, les valeurs sont uniquement positives. Avec les
options DOUBLE (M,D) l’affichage se fait avec M chiffres dont D décimales. Chaque valeur
occupe 8 octets.
DECIMAL: Nombre à virgule flottante qui doit être signé. La valeur est stockée comme une chaîne de
caractères dont chaque caractère est un chiffre.
LDD: Les types réels(1)
24
SQL le SGBD MYSQL
Ces types permettent de stocker des chaînes de caractères de longueurs très
diverses, allant du simple caractère au chaine très Longue.
CHAR(M) : Chaîne de caractères de longueur fixe de M caractères complétée par des espaces si
la donnée stockée est plus petite. La longueur indiquée varie de 0 à 255 caractères. La chaîne
stockée occupe toujours M octets, même si elle ne contient qu’un seul caractère significatif.
VARCHAR(M) Chaîne de caractères de longueur variable comprise entre 1 et M caractères. La
valeur de M varie de 1 à 255 caractères. La chaîne stockée occupe N + 1 octets quand elle
comprend N caractères.
TINYTEXT/TINYBLOB: Texte d’une longueur comprise entre 1 et 255 caractères. Le type
TINYBLOB est sensible à la casse. La chaîne stockée occupe N + 1 octets quand elle
comprend N caractères.
LDD: Les types chaine de caratères(1)
25
SQL le SGBD MYSQL
ENUM :Permet le choix d’une seule valeur parmi une liste des N chaînes de caractères
définies dans le type.
Le type peut définir jusqu’à 65 535 valeurs.
ENUM('chaine1', ...,' chaineN')
SET :Permet le choix d’une ou plusieurs valeurs simultanément parmi l’ensemble des N
chaînes de caractères définies dans le type. L’ensemble peut contenir jusqu’à 64
valeurs.
SET('chaine1', ...,'chaineN')
Types booléens
BOOL, BOOLEAN : équivaut à TINYINT(1)
LDD: Liste et Booléen
26
SQL le SGBD MYSQL
DATE: Une date au format AAAA-MM-JJ dans l’intervalle de 1000-01-01 à 9999-12-31.
Chaque enregistrement occupe 3 octets.
DATETIME: Contient la date et l’heure au format AAAA-MM-JJ HH:MM:SS dans
l’intervalle de 1000-01-01 00:00:00 à 9999-12-31 23:59:59. Chaque enregistrement
occupe 8 octets.
TIME: Stocke l’heure au format HH:MM:SS ou HHH:MM:SS pour un intervalle de valeurs
allant de –838:59:59 à 838:59:59 permettant d’effectuer des calculs de durée excédant
24 heures. Chaque enregistrement occupe 3 octets.
YEAR: Représente les années au format YYYY pour un intervalle allant de 1901 à 2155. Si
l’année est fournie avec deux chiffres, les valeurs de 00 à 69 correspondent aux années
2000 à 2069 et les valeurs 70 à 99 aux années 1970 à 1999. Chaque enregistrement
occupe 1 octet.
LDD: Les types dates et heures
27
SQL le SGBD MYSQL
Structure d’une table :
Syntaxe:
DESCRIBE [nomBase.] nomTableouVue [colonne];
->Describe client;
->Describe client id_client;
LDD: Description d’une table
28
SQL le SGBD MYSQL
Suppression d’une table:
Syntaxe:
DROP [TEMPORARY] TABLE [IF EXISTS]
[nomBase.] nomTable1 [,[nomBase2.]nomTable2,...]
TEMPORARY : pour supprimer des tables temporaires.
IF EXISTS : permet d’éviter qu’une erreur se produise si la table n’existe pas.
Exemple:
Les « fils » puis les « pères » (le cas des clés étrangères)
DROP TABLE fonctionnaire;
DROP TABLE Entreprise;
DROP TABLE fonctionnaire, Entreprise;
LDD: Suppression d’une table
29
SQL le SGBD MYSQL
Évolution d’un schéma
L’évolution d’un schéma est un aspect permettant de modifier une base de données d’un point de vue
structurel (colonnes et index) mais aussi comportemental (contraintes).
L’instruction principalement utilisée est ALTER TABLE qui permet :
✓ d’ajouter,
✓ de renommer,
✓ de modifier,
✓ de supprimer des colonnes d’une table.
✓ d’ajouter et de supprimer des contraintes.
LDD: ALTER
30
SQL le SGBD MYSQL
Modifications structurelles
Ajout des colonnes
Syntaxe:
ALTER TABLE[nomBase].nomTable ADD [COLUMN]
nomcolonne typeMySQL [NOT NULL | NULL] [DEFAULT valeur]
[AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]
[COMMENT 'chaine’] [REFERENCES ...];
Exemple:
LDD: Ajout de colonne
31
SQL le SGBD MYSQL
ALTER TABLE fonctionnaire ADD (salaire DECIMAL(7,2));
ALTER TABLE fonctionnaire ADD (domaine VARCHAR(4) DEFAULT ‘dev',
pays VARCHAR(30) DEFAULT ‘Maroc' NOT NULL);
Modifications structurelles
Renommer des colonnes
Syntaxe:
ALTER TABLE [nomBase].nomTable CHANGE [COLUMN] ancienNom
nouveauNom typeMySQL [NOT NULL | NULL] [DEFAULT valeur]
[AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]
[COMMENT 'chaine’] [REFERENCES ...]
[FIRST|AFTER nomColonne ];
Exemple:
LDD: Renommer une colonne
32
SQL le SGBD MYSQL
ALTER TABLE fonctionnaire CHANGE ville adresse VARCHAR(30)
AFTER nbH;
Modifications structurelles
Modifier le type des colonnes
Syntaxe:
ALTER TABLE[nomBase].nomTable MODIFY [COLUMN] nomColonneAmodifier
typeMySQL [NOT NULL | NULL] [DEFAULT valeur]
[AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]
[COMMENT 'chaine’] [REFERENCES ...];
Exemple:
LDD: Modification type colonne(1)
33
SQL le SGBD MYSQL
ALTER TABLE fonctionnaire MODIFY id_entre VARCHAR(6) DEFAULT
'SING';
ALTER TABLE fonctionnaire MODIFY Id_entre CHAR(4) NOT NULL;
Modifications structurelles
Valeurs par défaut des colonnes
Syntaxe:
ALTER TABLE[nomBase].nomTable ALTER [COLUMN] nomColonneAmodifier
{SET DEFAULT ‘chaine’ | DROP DEFAULT};
Exemple:
définit une valeur par défaut pour la colonne adresse
puis supprime celle relative à la colonne id_entre
LDD: Modification type colonne(2)
34
SQL le SGBD MYSQL
ALTER TABLE fonctionnaire ALTER COLUMN adresse SET DEFAULT ‘Ouarzazate';
ALTER TABLE fonctionnaire ALTER COLUMN id_entre DROP DEFAULT;
Modifications structurelles
Supprimer des colonnes
Syntaxe:
ALTER TABLE [nomBase].nomTable DROP
{ [COLUMN] nomColonne};
Exemple:
LDD: Suppression d’une colonne
35
SQL le SGBD MYSQL
ALTER TABLE fonctionnaire DROP COLUMN adresse;
Ou
ALTER TABLE fonctionnaire DROP adresse;
Modifications des contraintes
Ajout de contraintes
Syntaxe:
ALTER TABLE [nomBase].nomTable ADD
{ INDEX [nomIndex] [typeIndex] (nomColonne1,...)
| CONSTRAINT nomContrainte typeContrainte };
Trois types de contraintes sont possibles :
 UNIQUE (colonne1 [,colonne2]...)
 PRIMARY KEY (colonne1 [,colonne2]...)
 FOREIGN KEY (colonne1 [,colonne2]...)
LDD: Ajout de contrainte(1)
36
SQL le SGBD MYSQL
Ajout de contraintes
Unicité
Exemple:
ALTER TABLE entreprise ADD CONSTRAINT un_nomE UNIQUE (Nom_Entreprise);
Clé étrangère
Exemple:
ALTER TABLE Fonctionnaire ADD INDEX (id_entre);
ALTER TABLE Fonctionnaire ADD CONSTRAINT fk_ Fonctionnaire
FOREIGN KEY(id_entre) REFERENCES Entreprise(id_entre);
Clé primaire
Exemple:
ALTER TABLE fonctionnaire ADD CONSTRAINT pk_fct
PRIMARY KEY (nom, id_fct);
valable dans le cas ou la table fonctionnaire ne contient pas aucune
clé primaire
LDD: Ajout de contrainte(2)
37
SQL le SGBD MYSQL
Modifications des contraintes
Suppression de contraintes
Contrainte NOT NULL
Exemple:
ALTER TABLE client MODIFY nom CHAR(10) NULL;
ALTER TABLE client MODIFY prenom CHAR(10) NULL;
Contrainte UNIQUE
Exemple:
ALTER TABLE Entreprise DROP INDEX un_nomE;
LDD: Suppression de contrainte(1)
38
SQL le SGBD MYSQL
Suppression de contraintes
Clé étrangère
ALTER TABLE [nomBase].nomTable DROP FOREIGN KEY nomContrainte;
Exemple:
ALTER TABLE fonctionnaire DROP FOREIGN KEY fk_fct_entre;
Clé primaire
Exemple:
 ALTER TABLE commande DROP FOREIGN KEY fk_client_commande;
 ALTER TABLE client DROP PRIMARY KEY;
Si la clé primaire à supprimée est référencée par des clés étrangères d’autres tables, il
faut d’abord ôter les contraintes de clé étrangère de ces autres tables.
LDD: Suppression de contrainte (2)
39
SQL le SGBD MYSQL
Employé
Numéro d’employé
Nom
Prénom
Date d’embauche
Fonction
Rémunération
Projet
Numéro du projet
Thème du projet
Titre du projet
Date de début
Date de fin
encadre
Tâche
Nom de la tâche
Coût de la tâche
coordonne
Constitué_de
participe
Date début
Date fin
0,1 0,n
0,n
0,n
1,n
1,1
1,1
1,n
a pour chef
est chef de
Travail à faire :
Proposer le modèle relationnel.
Ecrire le script de la création de cette base de données en attribuant des noms aux différentes contraintes.
40
SQL le SGBD MYSQL
Exemple
41
41
SQL le SGBD MYSQL

SQLcouredesqlapplicationSQLcmdes-LDD.pdf

  • 1.
    Introduction aux Basesde Données Prof : A.Oukhatar 2023/2024 Filière: Licence Cyber Securite a.oukhatar@uiz.ac.ma ayoub.oukhatar@gmail.com
  • 2.
    Programme du cours ❑Introduction ❑LesSGBD ❑Modèle de données ❑Modèle conceptuel de données (Modèle Entité/Association) ❑Le Modèle Relationnel ❑Algèbre relationnelle ❑Le Langage SQL
  • 3.
    LES REQUETES SQL E.F. CODD : premiers articles dans les années 70 IBM crée le langage SEQUEL (Structured English Query Language) ancêtre du langage SQL Ce langage devient SQL (Structured Query Language, prononcer sikuel) En 1979, Relational Software Inc. (devenu depuis Oracle) met en place la première version commerciale de SQL Principaux SGBDR : Oracle, DB2, Informix, SQL-Server, Ingres, MySQL, Interbase, …. Ce langage a fait l’objet de normalisations successives de la part de l’ANSI (American National Standards Institute) pour aboutir: en 1992 à SQL 2 puis en 1999 à SQL 3 et SQL:2016 en dernière version SQL est un langage formé de plusieurs sous langages SQL signifie langage d’interrogation structuré, SQL est un Langage complet de gestion de bases de Données relationnelles.
  • 4.
    SQL regroupe leslangages suivants: Un langage de définition des données (LDD ; ordres CREATE, ALTER, DROP) Un langage de manipulation des données (LMD; ordres UPDATE, INSERT, DELETE) Un langage d'interrogation de la base (LID; ordre SELECT) Un langage de contrôle de l'accès aux données (LCD ; ordres GRANT,REVOKE). OPERATIONS SQL 4 SQL le SGBD MYSQL
  • 5.
    ▪ Aujourd’hui :Ilest devenu le langage standard des systèmes de gestion de bases de données (SGBD) relationnelles ▪ Le langage SQL est utilisé par les principaux SGBDR : DB2, Oracle, Informix, Ingres, RDB, MySQL,... Chacun de ces SGBDR a cependant sa propre variante du langage. SQL(Structured query language) 5 SQL le SGBD MYSQL
  • 6.
  • 7.
    Cette partie décritles instructions SQL qui constituent l’aspect LDD. (LDD ; ordres CREATE, ALTER, DROP) Création d’une base de données: Syntaxe: CREATE DATABASE [IF NOT EXISTS] name_database; Exemple: CREATE DATABASE gestioneducation; Suppression d’une base de données: Syntaxe: DROP DATABASE [IF EXISTS] name_database; Exemple: DROP DATABASE gestioneducation; La destruction d’une base entraîne aussi la suppression de ses tables. NOTES: 1. L’option IF NOT EXISTS permet de n’est créée la BD que si elle n’existe pas déjà. Cela évite les messages d’erreur. 2.Les noms des bases de données, tables… peuvent contenir les caractères spéciaux $ et _. LDD: Langage Définition des données 7 SQL le SGBD MYSQL
  • 8.
    Création d’une table: Syntaxe: CREATE TABLE nomTable ( colonne1 type1 [NOT NULL | NULL] [DEFAULT ‘valeur1’] ,colonne2 type2 [NOT NULL | NULL] [DEFAULT ‘valeur2’] ,colonne3 type3 [NOT NULL | NULL] [DEFAULT ‘valeur3’] [CONSTRAINT nomContrainte1 typeContrainte1]... ) ; « , »: Séparateur entre les champs. LDD: Création des tables 8 SQL le SGBD MYSQL
  • 9.
    Création d’une table: Exemple: LDD: Création des tables:Exemple 9 SQL le SGBD MYSQL CREATE TABLE ETUDIANT ( CODE_MASAR char(20) not null, NOM char(20), PRENOM char(20), DATE_NAISSANCE date, primary key (CODE_MASAR) );
  • 10.
    Déclaration des contraintes: Lescontraintes peuvent être déclarées de deux manières : 1.contraintes en ligne (inline constraints): Se définissent en même temps que la déclaration de la colonne; 2.Contraintes hors ligne (out-of-line constraints). : Se définissent après que la colonne est déclarée ; ces contraintes ne sont pas limitées à une colonne et peuvent être personnalisées par un nom. Il est recommandé de déclarer les contraintes NOT NULL en ligne, les autres peuvent soit être déclarées en ligne, soit être nommées LDD: Les contraintes (1) 10 SQL le SGBD MYSQL
  • 11.
    NOT NULL: pourque chaque enregistrement de l’attribut ait obligatoirement une valeur non nulle. Exemple: nom_attr VARCHAR(10) NOT NULL; DEFAULT : 'valeur_défaut' permet de définir une valeur par défaut pour l’attribut si aucune valeur n’y est enregistrée. Exemple: nom_attr VARCHAR(10) DEFAULT 'valeur_défaut'; LDD: Les contraintes (2) 11 SQL le SGBD MYSQL
  • 12.
    AUTO_INCREMENT: Pour qu’unattribut numérique entier soit automatiquement incrémenté d’une unité à chaque insertion d’un enregistrement. Exemple: id tinyint NOT NULL auto_increment; Pour que cette contrainte soit valable, il faut que l’attribut soit indexé ou qu’il soit la clé primaire. COMMENT : (jusqu’à 60 caractères) permet de commenter une colonne. LDD: Les contraintes (3) 12 SQL le SGBD MYSQL
  • 13.
    INDEX[nom_index] (nom_attribut1,nom_attribut2,...) créeun index pour la table à partir des colonnes précisées. Exemple: INDEX mon_index (nom,prenom); crée un index nommé mon_index sur les colonnes nom et prenom. La création d’index sur des colonnes de la table facilite les recherches quand ces colonnes sont utilisées comme critère de recherche. LDD: Les contraintes (4) 13 SQL le SGBD MYSQL
  • 14.
    sont les clésprimaires, les clés étrangères, l’unicité…. Syntaxe de base: CONSTRAINT nomContraintei typeContraintei; : nom de la contrainte suivi de son type Syntaxe développée : CONSTRAINT nomContrainte UNIQUE (colonne1 [,colonne2]...) PRIMARY KEY (colonne1 [,colonne2]...) FOREIGN KEY (colonne1 [,colonne2]...) REFERENCES nomTablePere [(colonne1 [,colonne2]...)] CHECK (condition) LDD: Les contraintes nommées 14 SQL le SGBD MYSQL
  • 15.
    PRIMARY KEY :pour définir l’attribut comme clé primaire de la table. Exemple1: id_etud tinyint(4) NOT NULL AUTO_INCREMENT, PRIMARY KEY (id_etud); id_etud tinyint(4) NOT NULL AUTO_INCREMENT PRIMARY KEY ; ou CONSTRAINT pk_nom PRIMARY KEY(nom); définit l’attribut nom comme une clé primaire. Exemple2: PRIMARY KEY (nom, prenom); ou CONSTRAINT pk_np PRIMARY KEY(nom,prenom); crée une clé primaire composée des deux attributs, nom et prenom. LDD: La contrainte PRIMARY KEY 15 SQL le SGBD MYSQL
  • 16.
    UNIQUE(nom_attribut1,nom_attribut2,...) pour quechaque enregistrement ait une valeur unique dans la colonne des attributs précisés. Exemple: UNIQUE(nom, prenom); ou CONSTRAINT un_nom UNIQUE(nom,prenom); Empêche d’enregistrer deux personnes ayant le même nom et le même prénom. Par contre, deux noms identiques avec deux prénoms différents sont acceptés. LDD: La contrainte UNIQUE 16 SQL le SGBD MYSQL
  • 17.
    FOREIGN KEY: Définitune clé étrangère Exemple: Dans la table module on peut écrire FOREIGN KEY(code_masar) REFERENCES etudiant(code_masar) Ou CONSTRAINT fk_etud FOREIGN KEY (Code_masar) REFERENCES etudiant (Code_masar)); LDD: La contrainte FOREIGN KEY 17 SQL le SGBD MYSQL
  • 18.
    « ;» :symbole par défaut qui termine une instruction MySQL en mode ligne de commande. Délimiteurs En mode ligne de commande, il est possible (par la directive delimiter de choisir le symbole qui terminera chaque instruction). Exemple: delimiter $ CREATE TABLE Test (t CHAR(8))$ Sensibilité à la casse MySQL est sensible par défaut à la casse (au niveau des noms de base et de table) dans la plupart des distributions Unix, il ne l’est pas pour Windows LDD: Délimiteurs 18 SQL le SGBD MYSQL
  • 19.
    Commentaires Dans toute instructionSQL (déclaration, manipulation, interrogation et contrôle des données), il est possible d’inclure des retours chariot, des Tabulations, espaces et commentaires :  sur une ligne précédée de deux tirets «-- »,  en fin de ligne à l’aide du dièse « # »,  au sein d’une ligne ou sur plusieurs lignes entre « /* » et « */ ». Exemple: Sans commentaire CREATE TABLE Test(colonne DECIMAL(38,8)); CREATE TABLE Test ( colonne DECIMAL(38,8) ); Avec commentaire CREATE TABLE -- nom de la table Test( #début de la description COLONNE DECIMAL(38,8) ) -- fin, ne pas oublier le point-virgule. ; CREATE TABLE Test ( /* une plus grande description des colonnes */ COLONNE /* type : */ DECIMAL(38,8)); LDD: Commentaires 19 SQL le SGBD MYSQL
  • 20.
    Exemple: 1.Deux contraintes enligne 2. Une contrainte nommée de clé primaire. Id_Entre nrue rue ville nomEntre LDD: Exemple 20 SQL le SGBD MYSQL CREATE TABLE entreprise( Id_entre CHAR(4), nrue INTEGER(3), rue CHAR(20), ville CHAR(15) DEFAULT ‘Ouarzazate’ COMMENT 'Par defaut : Ouarzazat’, Nom_Entreprise CHAR(15) NOT NULL CONSTRAINT pk_entreprise PRIMARY KEY(id_entre));
  • 21.
    Exemple: Une contrainte enligne et quatre contraintes nommées LDD: Exemple 21 SQL le SGBD MYSQL CREATE TABLE fonctionnaire( id_fct CHAR(6), nom CHAR(15) NOT NULL, nbH DECIMAL(7,2), Id_entre CHAR(4), CONSTRAINT pk_fonctionnaire PRIMARY KEY(id_fct), CONSTRAINT ck_nbH CHECK(nbH BETWEEN 0 AND 20000), CONSTRAINT un_nom UNIQUE (nom), CONSTRAINT fk_fct_entre FOREIGN KEY (Id_entre) REFERENCES Entreprise(Id_entre) );
  • 22.
    colonnei typei :nom d’une colonne (mêmes caractéristiques que pour les noms des tables) et son type de données( INTEGER, CHAR,DATE…). Quels sont les types de données disponibles sous MySQL..? MySQL permet de stocker des informations selon de nombreux types de données. Cela donne la possibilité d’adapter le plus précisément possible le type de donnée à l’information qui est enregistrée dans une table. Le choix du type doit se faire de telle sorte que l’information occupe le moins d’octets possible. LDD: Les colonnes et leurs types 22 SQL le SGBD MYSQL
  • 23.
    Les types numériquespermettent de stocker toutes sortes de valeurs numériques entières ou décimales avec des intervalles de valeurs très étendus. Les entiers: TINYINT: Un très petit entier prenant des valeurs de –128 (– 27) à 127 (27 – 1). S’il est suivi de l’option UNSIGNED, les valeurs sont positives et varient de 0 à 255 (28 – 1). Chaque valeur occupe 1 octet. SMALLINT: Un petit entier prenant des valeurs de –32768 (– 215) à 32767 (215 – 1). S’il est suivi de l’option UNSIGNED, les valeurs sont positives et varient de 0 à 65535 (216 – 1). Chaque valeur occupe 2 octets. MEDIUMINT: Entier moyen prenant des valeurs de –8388608 (– 223) à 8388607 (223 – 1).S’il est suivi de l’option UNSIGNED, les valeurs sont positives et varient de 0 à 16777215 (224 – 1). Chaque valeur occupe 3 octets. INT ou INTEGER Entier prenant des valeurs de –2147483648 (– 231) à 2147483647 (231 – 1). S’il est suivi de l’option UNSIGNED, les valeurs sont positives et varient de 0 à 4294967295 soit 232 – 1. Chaque valeur occupe 4 octets. BIGINT Grand entier prenant des valeurs de –9223372036854775808 (– 263) à 9223372036854775807 (263 – 1). S’il est suivi de l’option UNSIGNED, les valeurs sont positives et varient de 0 à 18446744073709551615, soit 264 – 1. Chaque valeur occupe 8 octets LDD: Types numériques(1) 23 SQL le SGBD MYSQL
  • 24.
    FLOAT :Nombre àvirgule flottante en simple précision prenant des valeurs de –3.402823466E+38 à – 1.75494351E–38 pour les nombres négatifs et de 1.75494351E–38 à 3.402823466E+38 pour les positifs. S’il est suivi de l’option UNSIGNED, les valeurs sont uniquement positives. Avec les options FLOAT (M,D), l’affichage s’effectue avec M chiffres dont D décimales. Chaque valeur occupe 4 octets. DOUBLE :Nombre à virgule flottante en double précision prenant des valeurs de –1.7976931348623157E+308 à –2.2250738585072014E–308 pour les nombres négatifs et de 2.2250738585072014E–308 à 1.7976931348623157E+308 pour les positifs. S’il est suivi de l’option UNSIGNED, les valeurs sont uniquement positives. Avec les options DOUBLE (M,D) l’affichage se fait avec M chiffres dont D décimales. Chaque valeur occupe 8 octets. DECIMAL: Nombre à virgule flottante qui doit être signé. La valeur est stockée comme une chaîne de caractères dont chaque caractère est un chiffre. LDD: Les types réels(1) 24 SQL le SGBD MYSQL
  • 25.
    Ces types permettentde stocker des chaînes de caractères de longueurs très diverses, allant du simple caractère au chaine très Longue. CHAR(M) : Chaîne de caractères de longueur fixe de M caractères complétée par des espaces si la donnée stockée est plus petite. La longueur indiquée varie de 0 à 255 caractères. La chaîne stockée occupe toujours M octets, même si elle ne contient qu’un seul caractère significatif. VARCHAR(M) Chaîne de caractères de longueur variable comprise entre 1 et M caractères. La valeur de M varie de 1 à 255 caractères. La chaîne stockée occupe N + 1 octets quand elle comprend N caractères. TINYTEXT/TINYBLOB: Texte d’une longueur comprise entre 1 et 255 caractères. Le type TINYBLOB est sensible à la casse. La chaîne stockée occupe N + 1 octets quand elle comprend N caractères. LDD: Les types chaine de caratères(1) 25 SQL le SGBD MYSQL
  • 26.
    ENUM :Permet lechoix d’une seule valeur parmi une liste des N chaînes de caractères définies dans le type. Le type peut définir jusqu’à 65 535 valeurs. ENUM('chaine1', ...,' chaineN') SET :Permet le choix d’une ou plusieurs valeurs simultanément parmi l’ensemble des N chaînes de caractères définies dans le type. L’ensemble peut contenir jusqu’à 64 valeurs. SET('chaine1', ...,'chaineN') Types booléens BOOL, BOOLEAN : équivaut à TINYINT(1) LDD: Liste et Booléen 26 SQL le SGBD MYSQL
  • 27.
    DATE: Une dateau format AAAA-MM-JJ dans l’intervalle de 1000-01-01 à 9999-12-31. Chaque enregistrement occupe 3 octets. DATETIME: Contient la date et l’heure au format AAAA-MM-JJ HH:MM:SS dans l’intervalle de 1000-01-01 00:00:00 à 9999-12-31 23:59:59. Chaque enregistrement occupe 8 octets. TIME: Stocke l’heure au format HH:MM:SS ou HHH:MM:SS pour un intervalle de valeurs allant de –838:59:59 à 838:59:59 permettant d’effectuer des calculs de durée excédant 24 heures. Chaque enregistrement occupe 3 octets. YEAR: Représente les années au format YYYY pour un intervalle allant de 1901 à 2155. Si l’année est fournie avec deux chiffres, les valeurs de 00 à 69 correspondent aux années 2000 à 2069 et les valeurs 70 à 99 aux années 1970 à 1999. Chaque enregistrement occupe 1 octet. LDD: Les types dates et heures 27 SQL le SGBD MYSQL
  • 28.
    Structure d’une table: Syntaxe: DESCRIBE [nomBase.] nomTableouVue [colonne]; ->Describe client; ->Describe client id_client; LDD: Description d’une table 28 SQL le SGBD MYSQL
  • 29.
    Suppression d’une table: Syntaxe: DROP[TEMPORARY] TABLE [IF EXISTS] [nomBase.] nomTable1 [,[nomBase2.]nomTable2,...] TEMPORARY : pour supprimer des tables temporaires. IF EXISTS : permet d’éviter qu’une erreur se produise si la table n’existe pas. Exemple: Les « fils » puis les « pères » (le cas des clés étrangères) DROP TABLE fonctionnaire; DROP TABLE Entreprise; DROP TABLE fonctionnaire, Entreprise; LDD: Suppression d’une table 29 SQL le SGBD MYSQL
  • 30.
    Évolution d’un schéma L’évolutiond’un schéma est un aspect permettant de modifier une base de données d’un point de vue structurel (colonnes et index) mais aussi comportemental (contraintes). L’instruction principalement utilisée est ALTER TABLE qui permet : ✓ d’ajouter, ✓ de renommer, ✓ de modifier, ✓ de supprimer des colonnes d’une table. ✓ d’ajouter et de supprimer des contraintes. LDD: ALTER 30 SQL le SGBD MYSQL
  • 31.
    Modifications structurelles Ajout descolonnes Syntaxe: ALTER TABLE[nomBase].nomTable ADD [COLUMN] nomcolonne typeMySQL [NOT NULL | NULL] [DEFAULT valeur] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'chaine’] [REFERENCES ...]; Exemple: LDD: Ajout de colonne 31 SQL le SGBD MYSQL ALTER TABLE fonctionnaire ADD (salaire DECIMAL(7,2)); ALTER TABLE fonctionnaire ADD (domaine VARCHAR(4) DEFAULT ‘dev', pays VARCHAR(30) DEFAULT ‘Maroc' NOT NULL);
  • 32.
    Modifications structurelles Renommer descolonnes Syntaxe: ALTER TABLE [nomBase].nomTable CHANGE [COLUMN] ancienNom nouveauNom typeMySQL [NOT NULL | NULL] [DEFAULT valeur] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'chaine’] [REFERENCES ...] [FIRST|AFTER nomColonne ]; Exemple: LDD: Renommer une colonne 32 SQL le SGBD MYSQL ALTER TABLE fonctionnaire CHANGE ville adresse VARCHAR(30) AFTER nbH;
  • 33.
    Modifications structurelles Modifier letype des colonnes Syntaxe: ALTER TABLE[nomBase].nomTable MODIFY [COLUMN] nomColonneAmodifier typeMySQL [NOT NULL | NULL] [DEFAULT valeur] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'chaine’] [REFERENCES ...]; Exemple: LDD: Modification type colonne(1) 33 SQL le SGBD MYSQL ALTER TABLE fonctionnaire MODIFY id_entre VARCHAR(6) DEFAULT 'SING'; ALTER TABLE fonctionnaire MODIFY Id_entre CHAR(4) NOT NULL;
  • 34.
    Modifications structurelles Valeurs pardéfaut des colonnes Syntaxe: ALTER TABLE[nomBase].nomTable ALTER [COLUMN] nomColonneAmodifier {SET DEFAULT ‘chaine’ | DROP DEFAULT}; Exemple: définit une valeur par défaut pour la colonne adresse puis supprime celle relative à la colonne id_entre LDD: Modification type colonne(2) 34 SQL le SGBD MYSQL ALTER TABLE fonctionnaire ALTER COLUMN adresse SET DEFAULT ‘Ouarzazate'; ALTER TABLE fonctionnaire ALTER COLUMN id_entre DROP DEFAULT;
  • 35.
    Modifications structurelles Supprimer descolonnes Syntaxe: ALTER TABLE [nomBase].nomTable DROP { [COLUMN] nomColonne}; Exemple: LDD: Suppression d’une colonne 35 SQL le SGBD MYSQL ALTER TABLE fonctionnaire DROP COLUMN adresse; Ou ALTER TABLE fonctionnaire DROP adresse;
  • 36.
    Modifications des contraintes Ajoutde contraintes Syntaxe: ALTER TABLE [nomBase].nomTable ADD { INDEX [nomIndex] [typeIndex] (nomColonne1,...) | CONSTRAINT nomContrainte typeContrainte }; Trois types de contraintes sont possibles :  UNIQUE (colonne1 [,colonne2]...)  PRIMARY KEY (colonne1 [,colonne2]...)  FOREIGN KEY (colonne1 [,colonne2]...) LDD: Ajout de contrainte(1) 36 SQL le SGBD MYSQL
  • 37.
    Ajout de contraintes Unicité Exemple: ALTERTABLE entreprise ADD CONSTRAINT un_nomE UNIQUE (Nom_Entreprise); Clé étrangère Exemple: ALTER TABLE Fonctionnaire ADD INDEX (id_entre); ALTER TABLE Fonctionnaire ADD CONSTRAINT fk_ Fonctionnaire FOREIGN KEY(id_entre) REFERENCES Entreprise(id_entre); Clé primaire Exemple: ALTER TABLE fonctionnaire ADD CONSTRAINT pk_fct PRIMARY KEY (nom, id_fct); valable dans le cas ou la table fonctionnaire ne contient pas aucune clé primaire LDD: Ajout de contrainte(2) 37 SQL le SGBD MYSQL
  • 38.
    Modifications des contraintes Suppressionde contraintes Contrainte NOT NULL Exemple: ALTER TABLE client MODIFY nom CHAR(10) NULL; ALTER TABLE client MODIFY prenom CHAR(10) NULL; Contrainte UNIQUE Exemple: ALTER TABLE Entreprise DROP INDEX un_nomE; LDD: Suppression de contrainte(1) 38 SQL le SGBD MYSQL
  • 39.
    Suppression de contraintes Cléétrangère ALTER TABLE [nomBase].nomTable DROP FOREIGN KEY nomContrainte; Exemple: ALTER TABLE fonctionnaire DROP FOREIGN KEY fk_fct_entre; Clé primaire Exemple:  ALTER TABLE commande DROP FOREIGN KEY fk_client_commande;  ALTER TABLE client DROP PRIMARY KEY; Si la clé primaire à supprimée est référencée par des clés étrangères d’autres tables, il faut d’abord ôter les contraintes de clé étrangère de ces autres tables. LDD: Suppression de contrainte (2) 39 SQL le SGBD MYSQL
  • 40.
    Employé Numéro d’employé Nom Prénom Date d’embauche Fonction Rémunération Projet Numérodu projet Thème du projet Titre du projet Date de début Date de fin encadre Tâche Nom de la tâche Coût de la tâche coordonne Constitué_de participe Date début Date fin 0,1 0,n 0,n 0,n 1,n 1,1 1,1 1,n a pour chef est chef de Travail à faire : Proposer le modèle relationnel. Ecrire le script de la création de cette base de données en attribuant des noms aux différentes contraintes. 40 SQL le SGBD MYSQL Exemple
  • 41.