Académique Documents
Professionnel Documents
Culture Documents
SUPPORT DE COURS
Page 2 sur 27
Programmation des BD avec MySql Eric Vekout, M. Ing.,
Objectif général
L’objectif général de ce cours est de vous apprendre à utiliser le langage SQL pour manipuler
des données stockées dans des bases de données relationnelles.
Objectifs spécifiques
Les objectifs spécifiques de ce cours sont les suivant :
❖ Savoir utiliser le langage SQL pour créer, modifier, supprimer et interroger des tables
❖ Savoir utiliser les contraintes d’intégrité pour garantir la cohérence et la qualité des
données
❖ Savoir utiliser les jointures pour combiner les données de plusieurs tables
❖ Savoir utiliser les fonctions d’agrégation pour calculer des statistiques sur les données
❖ Savoir utiliser les clauses GROUP BY et HAVING pour réaliser des calculs sur des
groupes de lignes
Page 3 sur 27
Programmation des BD avec MySql Eric Vekout, M. Ing.,
Vous pouvez vérifier que la base de données a bien été créée en utilisant la
commande SHOW DATABASES;, qui affiche la liste des bases de données
existantes :
Page 4 sur 27
Programmation des BD avec MySql Eric Vekout, M. Ing.,
SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| magasin |
| mysql |
| performance_schema |
| sys |
+--------------------+
Vous pouvez vérifier que la base de données est bien sélectionnée en utilisant la
commande SELECT DATABASE();, qui affiche le nom de la base de données
courante :
SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| magasin |
+------------+
Page 6 sur 27
Programmation des BD avec MySql Eric Vekout, M. Ing.,
Page 7 sur 27
Programmation des BD avec MySql Eric Vekout, M. Ing.,
Page 8 sur 27
Programmation des BD avec MySql Eric Vekout, M. Ing.,
1. La clé primaire
La clé primaire est une colonne ou un ensemble de colonnes qui permettent d’identifier
de manière unique chaque ligne d’une table. Une table ne peut avoir qu’une seule clé
primaire, qui doit respecter les conditions suivantes :
❖ La clé primaire ne peut pas être vide (NOT NULL)
❖ La clé primaire ne peut pas contenir de doublons (UNIQUE)
❖ La clé primaire ne peut pas être modifiée (CONSTRAINT)
La syntaxe pour définir une clé primaire est la suivante :
CREATE TABLE nom_table (
...
nom_colonne type_donnee [contraintes],
...
PRIMARY KEY (nom_colonne)
);
Page 9 sur 27
Programmation des BD avec MySql Eric Vekout, M. Ing.,
Si la clé primaire est composée de plusieurs colonnes, on les sépare par des virgules :
CREATE TABLE nom_table (
...
nom_colonne1 type_donnee [contraintes],
nom_colonne2 type_donnee [contraintes],
...
PRIMARY KEY (nom_colonne1, nom_colonne2)
);
Par exemple, la commande suivante permet de créer une table produit avec une clé
primaire sur la colonne id :
CREATE TABLE produit (
id INT NOT NULL,
nom VARCHAR(50) NOT NULL,
prix DECIMAL(10,2) NOT NULL,
categorie VARCHAR(20),
PRIMARY KEY (id)
);
2. La clé étrangère
La clé étrangère est une colonne ou un ensemble de colonnes qui permettent d’établir
une relation entre deux tables. Une table peut avoir plusieurs clés étrangères, qui
doivent respecter les conditions suivantes :
❖ La clé étrangère doit correspondre à la clé primaire d’une autre table
(REFERENCES)
❖ La clé étrangère peut être vide (NULL)
❖ La clé étrangère peut contenir des doublons
❖ La clé étrangère peut être modifiée, mais il faut respecter la contrainte de
référence (ON UPDATE)
La syntaxe pour définir une clé étrangère est la suivante :
Page 10 sur 27
Programmation des BD avec MySql Eric Vekout, M. Ing.,
Vous pouvez vérifier que les données ont bien été insérées en utilisant la commande
SELECT * FROM nom_table;, qui affiche toutes les lignes et toutes les colonnes de
la table :
SELECT * FROM client;
+----+--------+--------+----------------------+---------------+
| id | nom | prenom | email | date_naissance |
+----+--------+--------+----------------------+---------------+
| 1 | Atangana | Jean | jean.atango@email.com | 1990-01-01 |
| 2 | Ngo oum | Marie | marie.ngo@email.com | 1992-02-02 |
+----+--------+--------+----------------------+---------------+
est une expression logique qui filtre les lignes à modifier, par exemple nom_colonne =
valeur pour sélectionner les lignes où la colonne a une valeur donnée, nom_colonne1
< nom_colonne2 pour sélectionner les lignes où la première colonne est inférieure à
la deuxième, etc. On peut combiner plusieurs conditions avec les opérateurs logiques
AND, OR et NOT. Si vous ne spécifiez pas de condition, la commande modifie toutes
les lignes de la table.
Par exemple, la commande suivante permet de modifier l’email du client dont l’id est
1:
UPDATE client SET email = 'jean.atango@newemail.com' WHERE id = 1;
Vous pouvez vérifier que les données ont bien été modifiées en utilisant la commande
SELECT * FROM nom_table;, qui affiche toutes les lignes et toutes les colonnes de
la table :
SELECT * FROM client;
+----+--------+--------+----------------------+---------------+
| id | nom | prenom | email | date_naissance |
+----+--------+--------+----------------------+---------------+
| 1 | Atangana | Jean | jean.atango@newemail.com | 1990-01-01 |
| 2 | Ngo oum | Marie | marie.ngo@email.com | 1992-02-02 |
+----+--------+--------+----------------------+---------------+
Page 13 sur 27
Programmation des BD avec MySql Eric Vekout, M. Ing.,
Vous pouvez vérifier que les données ont bien été supprimées en utilisant la commande
SELECT * FROM nom_table;, qui affiche toutes les lignes et toutes les colonnes de
la table :
SELECT * FROM client;
+----+--------+--------+----------------------+---------------+
| id | nom | prenom | email | date_naissance |
+----+--------+--------+----------------------+---------------+
| 1 | Atangana | Jean | jean.atango@newemail.com | 1990-01-01 |
+----+--------+--------+----------------------+---------------+
Page 14 sur 27
Programmation des BD avec MySql Eric Vekout, M. Ing.,
❖ nom_colonne est le nom d’une colonne de l’une des tables ou * pour sélectionner
toutes les colonnes
❖ nom_table1 et nom_table2 sont les noms des tables à joindre
❖ type_de_jointure est le type de jointure à effectuer, par exemple INNER JOIN,
LEFT JOIN, etc.
❖ ON condition est la condition de correspondance entre les colonnes des deux
tables, par exemple nom_table1.nom_colonne = nom_table2.nom_colonne
❖ USING (nom_colonne) est une alternative à ON condition qui permet de
spécifier le nom d’une colonne commune aux deux tables
❖ WHERE condition est une expression logique qui filtre les lignes du résultat de
la jointure, par exemple nom_colonne = valeur pour sélectionner les lignes où la
colonne a une valeur donnée, nom_colonne1 < nom_colonne2 pour sélectionner
les lignes où la première colonne est inférieure à la deuxième, etc. On peut
combiner plusieurs conditions avec les opérateurs logiques AND, OR et NOT.
❖ ORDER BY nom_colonne [ASC|DESC] permet de trier les résultats par ordre
croissant (ASC) ou décroissant (DESC) selon la valeur d’une colonne
❖ LIMIT nombre permet de limiter le nombre de résultats à afficher
Par exemple, la commande suivante permet de sélectionner les noms, prénoms et emails
des clients qui ont passé au moins une commande, ainsi que le montant total de leurs
commandes :
Page 16 sur 27
Programmation des BD avec MySql Eric Vekout, M. Ing.,
Page 17 sur 27
Programmation des BD avec MySql Eric Vekout, M. Ing.,
Les sous-requêtes présentent des avantages et des inconvénients par rapport aux
requêtes simples ou aux jointures. Voici quelques-uns de ces avantages et
inconvénients :
Les avantages des sous-requêtes sont :
Page 20 sur 27
Programmation des BD avec MySql Eric Vekout, M. Ing.,
Page 21 sur 27
Programmation des BD avec MySql Eric Vekout, M. Ing.,
❖ BEGIN ... END est le bloc de code qui contient la logique de la fonction.
Par exemple, la fonction suivante permet de calculer le prix TTC (toutes taxes
comprises) d’un produit à partir de son prix HT (hors taxes) et du taux de TVA (taxe
sur la valeur ajoutée) :
CREATE FUNCTION prix_ttc (prix_ht DECIMAL(10,2), taux_tva DECIMAL(4,2))
RETURNS DECIMAL(10,2) DETERMINISTIC READS SQL DATA
BEGIN
DECLARE prix_ttc DECIMAL(10,2);
SET prix_ttc = prix_ht * (1 + taux_tva / 100);
RETURN prix_ttc;
END;
Pour utiliser une fonction que vous avez créée, vous devez l’appeler avec le nom de la
fonction et les paramètres entre parenthèses, comme si c’était une fonction intégrée à
MySQL. Par exemple, la commande suivante permet d’utiliser la fonction prix_ttc pour
afficher le nom et le prix TTC des produits :
SELECT produit.nom, prix_ttc(produit.prix, 20) AS prix_ttc
FROM produit;
Les fonctions présentent des avantages et des inconvénients par rapport aux requêtes
simples ou aux procédures stockées.
Les avantages des fonctions sont :
❖ Elles permettent d’écrire des requêtes plus simples et plus lisibles, en utilisant des noms
de fonctions explicites
❖ Elles permettent de réduire la duplication du code, en utilisant une seule fois une
fonction dans plusieurs requêtes
❖ Elles permettent de modulariser le code, en séparant les différentes étapes du calcul
Les inconvénients des fonctions sont :
❖ Elles peuvent réduire les performances des requêtes, en augmentant le nombre
d’appels et le temps d’exécution.
❖ Elles peuvent être difficiles à écrire et à déboguer, en nécessitant une bonne
maîtrise de la syntaxe et de la logique SQL.
Page 22 sur 27
Programmation des BD avec MySql Eric Vekout, M. Ing.,
❖ Elles peuvent être limitées par les capacités du système de gestion de bases de
données, en ne supportant pas certains types de fonctions ou en imposant des
restrictions sur leur utilisation.
Pour utiliser une procédure stockée que vous avez créée, vous devez l’appeler avec la
commande CALL nom_procedure (parametre1, parametre2, ... parametreN);, où
nom_procedure est le nom de la procédure stockée et parametre est la valeur ou la
variable à passer en paramètre. Par exemple, la commande suivante permet d’appeler la
procédure total_commandes pour le client dont l’id est 1, et d’afficher le résultat :
CALL total_commandes (1, @total);
SELECT @total AS total;
Les procédures stockées présentent des avantages et des inconvénients par rapport aux
requêtes simples ou aux fonctions.
Les avantages des procédures stockées sont :
❖ Elles permettent d’améliorer les performances des requêtes, en réduisant le
nombre d’appels et le temps de compilation
❖ Elles permettent d’améliorer la sécurité des données, en limitant l’accès et les
permissions aux utilisateurs autorisés
❖ Elles permettent d’implémenter une logique complexe, en utilisant des structures
de contrôle, des variables, des boucles, des exceptions, etc.
Les inconvénients des procédures stockées sont :
❖ Elles peuvent augmenter la complexité et la maintenance du code, en nécessitant
une bonne documentation et une bonne organisation
❖ Elles peuvent réduire la portabilité et l’interopérabilité du code, en dépendant du
système de gestion de bases de données utilisé
❖ Elles peuvent introduire des risques d’erreurs ou d’incohérences, en modifiant les
données sans contrôle de version ou de transaction
X. Les déclencheurs
Un déclencheur est un bloc de code qui s’exécute automatiquement lorsqu’un
événement se produit sur une table, par exemple une insertion, une modification ou une
suppression de données. Il peut être utilisé pour effectuer des actions complémentaires,
vérifier des contraintes, enregistrer des historiques, etc.
Pour créer un déclencheur avec MySQL, vous devez utiliser la commande CREATE
TRIGGER nom_declencheur [BEFORE | AFTER] [INSERT | UPDATE |
DELETE] ON nom_table FOR EACH ROW BEGIN ... END;, où
Page 24 sur 27
Programmation des BD avec MySql Eric Vekout, M. Ing.,
Pour utiliser un déclencheur que vous avez créé, vous n’avez pas besoin de l’appeler
explicitement, car il s’exécute automatiquement lors de l’événement spécifié. Par
exemple, si vous insérez ou modifiez un détail de commande, le déclencheur
maj_montant s’exécute et met à jour le montant de la commande correspondante.
Les déclencheurs présentent des avantages et des inconvénients par rapport aux
requêtes simples ou aux procédures stockées.
Les avantages des déclencheurs sont :
❖ Ils permettent d’automatiser des actions, en les exécutant sans intervention
humaine
❖ Ils permettent de garantir l’intégrité des données, en vérifiant des contraintes ou
en corrigeant des erreurs
Page 25 sur 27
Programmation des BD avec MySql Eric Vekout, M. Ing.,
START TRANSACTION;
UPDATE compte SET solde = solde - 100 WHERE id = 1;
UPDATE compte SET solde = solde + 100 WHERE id = 2;
-- Une erreur se produit ici
ROLLBACK;
Page 26 sur 27
Programmation des BD avec MySql Eric Vekout, M. Ing.,
Les transactions présentent des avantages et des inconvénients par rapport aux
requêtes simples ou aux procédures stockées.
Les avantages des transactions sont :
❖ Elles permettent de garantir la cohérence et la fiabilité des données, en
respectant les propriétés ACID
❖ Elles permettent de gérer les erreurs et les exceptions, en annulant les
modifications en cas de problème
❖ Elles permettent de contrôler le niveau d’isolation, en définissant le degré de
visibilité des modifications entre les transactions concurrentes
Les inconvénients des transactions sont :
❖ Elles peuvent réduire les performances des requêtes, en augmentant le nombre
d’opérations et le temps d’exécution
❖ Elles peuvent augmenter la complexité et la maintenance du code, en nécessitant
une bonne documentation et une bonne organisation
❖ Elles peuvent introduire des risques de blocage ou de conflit, en verrouillant les
données pendant la durée de la transaction
Page 27 sur 27