Académique Documents
Professionnel Documents
Culture Documents
SQ L
CO PY R IG HT
- SQL par David HURTREL est mis à disposition selon les termes
de la Licence Creative Commons Attribution - Pas d'Utilisation
Commerciale - Pas de Modi cation 4.0 International (CC BY-
NC-ND 4.0).
fi
fi
fi
fi
SQ L
5. performance et intégrité
SQ L
BDD
SGBD
SGBDR
B DD - SGB D - SGB DR
H ISTO IR E
- 1956 : invention des disques durs (utilisation des ordinateurs pour stocker des données)
- 1970 : apparition du terme "algèbre relationnelle" (origine des bases de données relationnelles)
B DD - SGB D - SGB DR
BDD
- BDD = Base De Données
- ensemble de données :
‣ structurées
‣ organisées
- permet de facilement consulter leur contenu il faut aussi :
B DD - SGB D - SGB DR
CL ASS IFICATION
- les BDD sont classées selon leur structuration :
‣ objet
B DD - SGB D - SGB DR
SGBD
- SGBD = Sytème de Gestion de Bases de Données
- logiciel (ou ensemble de logiciels) permettant de manipuler les données d’une BDD
- ex.: MySQL
fi
fi
B DD - SGB D - SGB DR
SGBDR
- SGBDR = SGBD = Sytème de Gestion de Bases de Données Relationnelles
- les données sont contenues dans des relations, représentées sous forme de tables
- une BDD peut comporter plusieurs tables, chaque table dé nissant un certain nombre de
colonnes (caractéristiques de l’objet, attributs de l’en-tête)
fi
B DD - SGB D - SGB DR
B DD - SGB D - SGB DR
AU TRES S G BD R
- Oracle Database : coût élevé, gère bien les grands
volumes de données, plus performant, langage
procédural puissant (PL/SQL)
B DD - SGB D - SGB DR
SQL
- SQL = Structured Query Language
B DD - SGB D - SGB DR
OPÉ R ATIO NS
- considérons A et B deux relations
SQ L
MYSQL
M YS QL
PRÉSE NTATION
- SGBDR
M YS QL
I N STA L LATION
M-W-L-X
- télécharger un serveur web local :
‣ Mac : MAMP A
‣ Windows : WAMP
‣ Linux : LAMP M
‣ tous : XAMPP
- MySQL est compris dans les serveurs web P
locaux
MAMP
- l’installation avec une plateforme AMP permet WAMP
aussi de prendre de l’avance lors du module PHP LAMP
XAMPP
M YS QL
‣ démarrer WAMP
‣ démarrer MAMP
fi
fi
M YS QL
M YS QL
U TIL I SATIO N E N L I G N E D E C O M M AN D E -
PRÉ PA RAT I O N
- Windows:
XAMPP
- Mac : C:\xampp\mysql\bin
‣ démarrer MAMP
‣ démarrer le serveur
fi
fi
M YS QL
- connexion :
mysql -u root -p
(le mot de passe pour l’utilisateur "root" sera demandé)
- déconnexion :
M YS QL
- MySQL Front
M YS QL
SYN TAXE
SYNTAX E UTILIT É EXEMPLE
; n d’instruction
\n retour à la ligne
\t tabulation
\\ antislash
% pourcent
_ souligné
fi
M YS QL
CO NVE NTIO NS
- pas d’espaces ou d'accents dans les noms de bases, tables ou colonnes
M YS QL
CA LCU L
- pas de guillemets
donnera 9 et 7
M YS QL
U TILISATE U R
- root a tous les droits
- IDENTIFIED BY 'mot_de_passe' (dé nit le mot de passe de GRANT ALL PRIVILEGES ON maBase.* TO
l’utilisateur) 'etudiant'@'localhost';
- ON cours.* (BDD sur laquelle ces droits sont acquis pour toutes
les tables *)
fi
fi
fi
SQ L
TYPES DE
DONNÉES
TY P ES D E DO N N É ES
POU RQU O I
- comprendre les usages et particularités pour mieux choisir et éviter :
‣ gaspillage de mémoire
‣ problèmes de performance
TY P ES D E DO N N É ES
TY P ES D E DO N N É ES
INT(4) ZEROFILL
12 0012
123 0123
1234 1234
12345 12345
fi
TY P ES D E DO N N É ES
fi
TY P ES D E DO N N É ES
TY P E S A L PH A N UMÉR IQU ES - C H A Î N E S D E TY P E T E X T E
TEXT 28 octets
- suite de caractères
- pas d’af chage par encodage ou interclassent, c’est une suite d’octets
- une chaîne binaire traite directement l'octet et pas le caractère que l’octet représente
(sensible à la casse)
TY P ES D E DO N N É ES
BLOB 28 octets
- si valeur non autorisée : ' ' sera stocké dans le champ EXEMPLE
- si on a donné l’autorisation de ne pas contenir de ENUM('HTML', 'CSS', 'JS')
valeur : NULL sera stocké
la colonne pourra contenir les chaînes HTML, CSS et JS
- deux possibilités pour remplir un champ ENUM : la colonne ne pourra pas contenir les chaînes SQL, PHP
fi
TY P ES D E DO N N É ES
- semblable à ENUM
virgule, sans espace, la totalité entourée de la colonne pourra contenir : '' (chaîne vide), 'HTML',
'HTML,CSS', 'HTML,CSS,JS' — …
guillemets
TY P ES D E DO N N É ES
- exemples :
‣ AAAA-MM-JJ
‣ AAAA/MM/JJ
‣ AAAAMMJJ
‣ AA-MM-JJ
- MySQL supporte les DATE de 1001-01-01 à 9999-12-31
TY P ES D E DO N N É ES
- exemples :
‣ HH:MM:SS
‣ HHH:MM:SS
‣ MM:SS
‣ HH-MM-SS
- MySQL supporte les TIME de -838:59:59 à 838:59:59
TY P ES D E DO N N É ES
- exemples :
TY P ES D E DO N N É ES
TY P ES D E DO N N É ES
- utilise 4 octets
TY P ES D E DO N N É ES
TY PE VALEUR PA R DÉFAUT
DATE 0000-00-00
TIME 00:00:00
YEAR 0000
TIMESTAMP 00000000000000
SQ L
CONCEVOIR
UNE BDD
CO NCE VO IR UN E B DD
CO NC E PTIO N D'UN E BD D
- on utilise la méthodologie Merise et les diagrammes entités-relations
CO NCE VO IR UN E B DD
CO NCE VO IR UN E B DD
DOMA I NE
- analyse du domaine : étude du problème et consignation sans un document
‣ documents existants (formulaire papier, che description produit, tableur, BDD existante…)
fi
CO NCE VO IR UN E B DD
M CD
- MCD = Modèle Conceptuel de Données
- outils en ligne :
‣ Creately : creately.com
‣ …
CO NCE VO IR UN E B DD
VO CAB U LAIRE
- entité : regroupement d’informations
(ex.: utilisateur et article)
fi
CO NCE VO IR UN E B DD
MLD
- MLD = Modèle Logique de Données
- se déduit du MCD
CO NCE VO IR UN E B DD
M L D - É TA P E S
- pour passer du MCD au MLD :
1. une entité devient une table (possibilité de fusionner les entités homogènes)
‣ relation binaire (0, 1) : création d’une clé étrangère dans l’une des tables
‣ relation binaire (1, 1) : fusion des deux tables ou création d’une clé étrangère dans l’une des tables
‣ relation binaire (1, n) : création d’une clé étrangère dans la table côté 1
‣ relation binaire (n, m) : création d’une table reprenant deux clés étrangères correspondant aux clés
primaires de chaque table
fi
fi
CO NCE VO IR UN E B DD
M L D - E XE M PLES
- il est possible d’utiliser MysqlWorkBench ou un outil de visualisation pour réaliser un MLD
- il est possible concevoir sa BDD sans MCD une fois le MLD compris
CO NCE VO IR UN E B DD
M YSQL WO R K B EN CH
- MysqlWorkBench permet aussi de se connecter aux BDD pour les manipuler
- il est possible concevoir sa BDD sans MCD une fois le MLD compris
- MySQL Workbench :
CO NCE VO IR UN E B DD
CREATE TABLE IF NOT EXISTS `mydb`.`article` (
`id` INT NOT NULL AUTO_INCREMENT,
`titre` VARCHAR(255) NOT NULL,
`contenu` LONGTEXT NOT NULL,
M PD `img` VARCHAR(255) NOT NULL,
`date_redaction` DATETIME NOT NULL,
`id_utilisateur` INT NOT NULL,
PRIMARY KEY (`id`),
- MPD = Modèle Physique de Données UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE,
INDEX `fk_article_utilisateur1_idx`
(`utilisateur_id` ASC) VISIBLE,
- traduction du MLD en SQL CONSTRAINT `fk_article_utilisateur1`
FOREIGN KEY (`utilisateur_id`)
REFERENCES `mydb`.`utilisateur` (`id`)
- MysqlWorkBench permet d’exporter ON DELETE NO ACTION
ON UPDATE NO ACTION
directement un MLD en SQL )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;
CO NCE VO IR UN E B DD
SCHÉMA - DATA
- schéma = structure
- data = données
id nom prenom
1 Hurtrel David
2 Dupont Jean
fi
SQ L
MYSQL
WORKBENCH
SQ L
M A NIPU LER U N E
BAS E DE DONNÉES
M A NIPU LE R UN BASE D E D ON N É E S
CO MM ENTA IRE S
- -- commentaire jusqu’à la n de la ligne
fi
fi
M A NIPU LE R UN BASE D E D ON N É E S
CR E ATE DATABASE
- commande permettant la création d’une base
de données
données existe déjà crée la base blog si celle-ci n’existe pas déjà
fi
M A NIPU LE R UN BASE D E D ON N É E S
fi
M A NIPU LE R UN BASE D E D ON N É E S
CR E ATE TA BLE
- commande permettant la création d’une table
dans une base de données EXEMPLE
- CREATE TABLE table ( CREATE TABLE `utilisateur` (
'id' INT NOT NULL,
colonne1 type_de_donnees, 'nom' VARCHAR(45),
colonne2 type_de_donnees, 'prenom' VARCHAR(45),
'email' VARCHAR(100),
colonne3 type_de_donnees, 'mot_de_passe' VARCHAR(255),
);
colonne4 type_de_donnees
) crée la table utilisateurs
M A NIPU LE R UN BASE D E D ON N É E S
PRIM A RY K E Y
- permet d’identi er chaque enregistrement dans une table
fi
M A NIPU LE R UN BASE D E D ON N É E S
fi
M A NIPU LE R UN BASE D E D ON N É E S
ALTER TA B L E EXEMPLE
Ajouter une colonne role à la table
- permet de modi er une table existante utilisateur :
fi
M A NIPU LE R UN BASE D E D ON N É E S
DROP TA BL E
- permet de supprimer une table
M A NIPU LE R UN BASE D E D ON N É E S
T RU NCATE TAB LE
- permet de supprimer le contenu d’une table
sans supprimer la table elle-même
M A NIPU LE R UN BASE D E D ON N É E S
M E RGE
- permet d’insérer ou mettre à jour des données dans une table (upsert)
- les différents SGBD n’implémentent pas cette fonctionnalité de la même façon (standard, UPSERT, non standard)
fi
fi
M A NIPU LE R UN BASE D E D ON N É E S
SE L ECT
- permet de lire les données
M A NIPU LE R UN BASE D E D ON N É E S
DISTIN CT
- permet d’éviter les redondances (lignes en
double)
M A NIPU LE R UN BASE D E D ON N É E S
WH E R E
- permet d’extraire des lignes selon une
condition
EXEMPLE
- SELECT colonnes
FROM table SELECT DISTINCT `nom`
FROM `utilisateur`
WHERE condition; WHERE `prenom` = 'David';
M A NIPU LE R UN BASE D E D ON N É E S
AN D & O R
EXEMPLE
- opérateurs logiques permettant de combiner
des conditions SELECT `email`
FROM `utilisateur`
WHERE `prenom` = 'David'
- AND : et AND `nom` = 'HURTREL';
M A NIPU LE R UN BASE D E D ON N É E S
IN
- opérateur logique permettant de véri er si EXEMPLE
une colonne est égale à une des valeurs
SELECT `email`
indiquées FROM `utilisateur`
WHERE `prenom` = 'David'
OR `prenom` = 'Jean'
- évite d’utiliser OR plusieurs fois OR `prenom` = 'Pierre';
fi
M A NIPU LE R UN BASE D E D ON N É E S
BET WE EN
- opérateur permettant de sélectionner un
intervalle de données
EXEMPLE
- SELECT *
SELECT *
FROM table FROM `article`
WHERE colonne WHERE `date_redaction`
BETWEEN '2020-01-01 00:00:00'
BETWEEN 'valeur1' AND 'valeur2'; AND '2020-12-31 23:59:59';
M A NIPU LE R UN BASE D E D ON N É E S
L IK E
- opérateur permettant d’effectuer une recherche sur un
modèle particulier
- SELECT * EXEMPLE
FROM table
WHERE colonne SELECT *
LIKE modele; FROM `utilisateur`
WHERE `email`
LIKE '%gmail.com';
- %a : termine par a
donne la liste des utilisateurs ayant
- b% : commence par b un email se terminant par gmail.com
- %c% : utilise c
- h_i : _ peut être remplacé par un seul caractère (ex.: hai, hbi,
…)
M A NIPU LE R UN BASE D E D ON N É E S
fi
M A NIPU LE R UN BASE D E D ON N É E S
GROU P BY
- commande utilisée pour grouper plusieurs
résultats et utiliser une fonction de totaux sur
un groupe de résultats EXEMPLE
- SELECT colonne1, fonction(colonne2) SELECT `client`, SUM(`tarif`)
FROM `achat`
FROM table GROUP BY `client`;
GROUP BY colonne1; donne le montant total des
achats de chaque client
M A NIPU LE R UN BASE D E D ON N É E S
H AV IN G
- conditions permettant de ltrer en utilisant
des fonctions
EXEMPLE
- SELECT colonne1, SUM(colonne2)
SELECT `client`, SUM(`tarif`)
FROM table FROM `achat`
GROUP BY colonne1 GROUP BY `client`
HAVING SUM(`tarif`) > 50;
HAVING fonction(colonne2) operateur valeur;
donne la liste des clients ayant acheté pour
au moins 50 € toute commandes confondues
fi
M A NIPU LE R UN BASE D E D ON N É E S
ORDE R BY
- commande permettant de trier les lignes
dans le résultat d’une requête
EXEMPLE
- SELECT colonne1, colonne2
FROM table SELECT *
FROM `utilisateur`
ORDER BY colonne1; ORDER BY `nom` DESC;
- DESC : décroissant
M A NIPU LE R UN BASE D E D ON N É E S
AS
- alias permettant de renommer
temporairement une colonne ou une table
dans une requête EXEMPLE
- SELECT colonne1 AS c1, colonne2 SELECT *p_nom_fr AS nom, p_prix_euro AS prix
FROM `produit`
FROM table; ORDER BY `nom` DESC;
M A NIPU LE R UN BASE D E D ON N É E S
L IM IT & O FFS ET
- LIMIT : clause permettant de spéci er la limite EXEMPLE
maximum de résultats d’une requête
SELECT *
FROM `article`
- OFFSET : décalage LIMIT 20;
fi
M A NIPU LE R UN BASE D E D ON N É E S
CASE
- permet l’utilisation de conditions si / sinon
EXEMPLE
- CASE a SELECT `id`, `titre`, `commentaires`
WHEN 1 THEN 'un' CASE
WHEN `commentaires` = NULL THEN 'Sans
WHEN 2 THEN 'deux' commentaire'
WHEN 3 THEN 'trois' WHEN `commentaires` > 10 THEN 'Trop de
commentaires'
ELSE 'autre' ELSE 'Article commenté'
END
END; FROM `article`;
M A NIPU LE R UN BASE D E D ON N É E S
U NION
- permet de mettre bout à bout les résultats de
plusieurs requêtes (permet de concaténer des
résultats)
M A NIPU LE R UN BASE D E D ON N É E S
I N TE R SEC T
- permet d’obtenir l’intersection des résultats
de deux requêtes (enregistrements communs)
M A NIPU LE R UN BASE D E D ON N É E S
M A NIPU LE R UN BASE D E D ON N É E S
I MP ORT
- SOURCE /chemin/du/dossier/désiré/nom_ chier.sql
ou
mysql -u nom_utilisateur -p -h localhost base_de_données < nom_ chier.sql
fi
fi
M A NIPU LE R UN BASE D E D ON N É E S
E XP ORT
- cd chemin/vers/le/dossier/désiré
fi
SQ L
CRUD
CR UD
DÉ FIN IT IO N
- opérations de base pour la manipulation de données
CR UD
I N SERT EXEMPLE
INSERT INTO `utilisateur`
- permet d’insérer des données dans une table VALUES ('Hurtrel', 'David',
'david.hurtrel@gmail.com');
CR UD
SE L ECT
- permet de lire les données
CR UD
U PDAT E
- permet de modi er des données déjà
existantes
fi
CR UD
DE L E T E
- permet de supprimer des données dans une
table
SQ L
FONCTIONS
FONC TI O N S
FO NC TI ONS D'AGRÉGATIO N
- MIN(nom_colonne) FROM table
- …
FONC TI O N S
FO NC TI ONS DE CH AÎN E DE C A R AC T È R E
- CONCAT(colonne1, '-', colonne2) => colonne1-colonne2
- LENGTH('Exemple') => 7
- …
FONC TI O N S
FO NC TI ON D E DATE
- DATE_FORMAT(date, format)
- TIMESTAMP("YYYY-MM-DD", "HH:MM");
- NOW();
- TIME_TO_SEC(00:00:01) => 1
- …
FONC TI O N S
AU TRES FO NC TIONS
- RAND();
- MD5('mot_de_passe');
- SHA1('mot_de_passe');
- …
SQ L
SOUS-
REQUÊTES
SO U S- REQU ÊT ES
SOUS- R EQ U ÊT E
- aussi appelée requête imbriquée ou requête en cascade
SO U S- REQU ÊT ES
E XISTS
- clause conditionnelle pour véri er la présence (ou non) de lignes
- SELECT colonne1
FROM table1
WHERE EXISTS (
SELECT colonne2
FROM table2
WHERE colonne3 = 10
);
fi
SO U S- REQU ÊT ES
E XISTS
- permet de comparer une valeur dans l’ensemble des valeurs de la sous-requête
- opérateurs conditionnels : =, <, >, <>, !=, <=, >=, !>, !<
- SELECT *
FROM table1
WHERE condition > ALL (
SELECT *
FROM table2
WHERE condition2
);
SO U S- REQU ÊT ES
AN Y - S O M E
- permet de comparer une valeur avec le résultat d’une sous-requête
- SELECT *
FROM table1
WHERE condition > ANY (
SELECT *
FROM table2
WHERE condition2
);
SQ L
JOINTURES
J O INT URE S
J OIN T UR E S
- permet de récupérer des données de plusieurs tables en une seule requête
J O INT URE S
- retourne les enregistrements lorsqu’il y a au SELECT `id`, `nom`, `prenom`, `num_cmde`, `montant`
FROM `clients`
moins une ligne dans chaque colonne qui INNER JOIN `commandes`
ON `clients`.`id` = `commandes`.`id_client`;
correspond à la condition
- SELECT * RÉSULTAT
FROM table1
INNER JOIN table2 I D N OM P R E NOM N UM _ C MD E M ONTA NT
J O INT URE S
HOMM E FEMME
CROSS JO IN I D _ H P R E NOM N OM I D _ F I D _ CL I E N T M ONTA NT
- souvent associé à une clause WHERE pour SELECT * FROM `homme` CROSS JOIN `femme`;
- SELECT * RÉSULTAT
FROM table1 I D _ H P R E NOM N OM I D _ F P R E NOM N OM
CROSS JOIN table2; 1 Alain David 1 Daisy Rable
J O INT URE S
- permet de lister tout les résultats de la table 2 Dupont Jean 2 1 C00352 2,99
la deuxième table
SELECT *
- aussi appelée LEFT OUTER JOIN FROM `clients`
LEFT JOIN `commandes`
ON `clients`.`id` = `commandes`.`id_client`;
- SELECT *
FROM table1
LEFT JOIN table2 ON table1.id = table2.fk_id; RÉSULTAT
I D N OM P R E NOM N UM _ C MD E M ONTA NT
J O INT URE S
FROM table1
RIGHT JOIN table2 ON table1.id = table2.fk_id; RÉSULTAT
ID N OM P R E NOM N UM _ C MD E M ONTA N
T
1 Hurtrel David C00123 19,99
J O INT URE S
FU L L JO IN I D N OM P R E NOM I D I D _ CL I E N T N UM _ C MD E M ONTA NT
- SELECT * RÉSULTAT
FROM table1
ID N OM P R E NOM N UM _ C MD E M ONTA NT
FULL JOIN table2 ON table1.id = table2.fk_id;
1 Hurtrel David C00123 19,99
J O INT URE S
SE L F J OIN
- jointure d’une table avec elle-même
J O INT URE S
3 kiwi 2 3 Allemagne
1 1 pomme France
3 3 kiwi Allemagne
SQ L
PERFORMANCE
ET INTÉGRITÉ
SQ L
PHPMYADMIN
SQ L
DIVERS
SQ L
POUR ALL ER
PLUS LOI N
P O UR ALL ER P LUS LO IN
SOURC E S
M
fi