Vous êtes sur la page 1sur 129

By Pr.-Dr.-Ing.

Franklin Tchakounte

Introduction aux bases


de donnees
Administration des bases de donnees

Pr.-Dr.-Ing. Franklin Tchakounte


www.cycomai.com
By Pr.-Dr.-Ing. Franklin Tchakounte 2

Au terme de ce tutoriel
• L’apprenant pourra
• Installer l’environnement du serveur de bases de données
By Pr.-Dr.-Ing. Franklin Tchakounte 3

Documents
• Ce tutoriel a été élaboré en s’appuyant sur les deux livres suivants

• Cours OpenClassRooms : Implémentez vos bases de données relationnelles


avec SQL

• ITL Education Solutions Limited : Introduction To Database Systems. Pearson India


(2010)

• Satinder Bal Gupta, Aditya Mittal : Introduction to Database Management System,


2nd Edition. University Science Press (2017)
By Pr.-Dr.-Ing. Franklin Tchakounte 4

Client / Serveur

SQL
ADMINISTRATEUR

CLIENT SERVEUR
SGBD
MYSQL MYSQL
By Pr.-Dr.-Ing. Franklin Tchakounte 5

Source: OpenClassrooms
By Pr.-Dr.-Ing. Franklin Tchakounte 6

Administrer
• Installation et paramétrage
• Gestion des utilisateurs et privilèges
• Gestion des requêtes transactions
• Gestion de la sécurité
• Gestion des logs (fichiers journaux)
• Gestion des sauvegardes
By Pr.-Dr.-Ing. Franklin Tchakounte 7

Installation de
l’environnement
By Pr.-Dr.-Ing. Franklin Tchakounte 8

MYSQL SERVER
By Pr.-Dr.-Ing. Franklin Tchakounte 9

Téléchargement
• Lien : https://dev.mysql.com/downloads/installer/
• Choisir le deuxième programme d’installation
By Pr.-Dr.-Ing. Franklin Tchakounte 10

Lancement
• Double-cliquer
• Autoriser le programme
• Choisir la version
Serveur only
• Cliquer bouton Next
• Sur la page suivante,
• Cliquer sur Execute
By Pr.-Dr.-Ing. Franklin Tchakounte 11

Téléchargement de MySQL
By Pr.-Dr.-Ing. Franklin Tchakounte 12

Execution
• Une fois MySQL
téléchargé, cliquez sur Next
puis Execute.
• Une fois cette étape
passée, cliquez
sur Execute et/ou Next.
By Pr.-Dr.-Ing. Franklin Tchakounte 13

Installation terminee
• Vous devriez être sur
cette page
• Il faut maintenant
configurer MySQL.
• Cliquez sur simplement
sur Next.
• Sélectionner, bien
sur, Use Strong
Password, puis Next..
By Pr.-Dr.-Ing. Franklin Tchakounte 14

Config des utilisateurs


• Il faut définir votre
mot de passe de
l’utilisateur root
• un utilisateur qui a
tous les droits
(création,
suppression, mise à
jour)
• A ne jamais l’utiliser en Pour votre mot de passe je vous conseille :
production ! •Au moins 12 caractères ;
•Avec des majuscules et des minuscules ;
• On clique sur Next, •Avec des chiffres ( 4, 2, 1...) ;
puis Next, •Avec des caractères spéciaux (!, ?, /, +, =...) ;
•Sans date de naissance, sans prénom etc. Pas de ("Alex" ou de
"04/12/1982").
By Pr.-Dr.-Ing. Franklin Tchakounte 15

• Une fois que tous les


boutons sont cochés,
on clique sur Finish, Next
et Finish, et voila, le
programme se ferme.
• Pour appliquer tous les
changements

• L'installation de MySQL
est terminée
By Pr.-Dr.-Ing. Franklin Tchakounte 16

Lancer Mysql
• Sélectionner MySQ
L Command Line
Client. Cela va
lancer un
programme en
ligne de
commande.
• Taper votre mot de
passe et vous
devriez avoir ceci :

• Bravo! Vous avez


terminé votre
installation de
MySQL.
By Pr.-Dr.-Ing. Franklin Tchakounte 17

XAMMP
By Pr.-Dr.-Ing. Franklin Tchakounte 18

Telechargement
• Lien: Download XAMPP
(apachefriends.org)
• Installer le
• Lancer le panneau de
contrôle
• Cocher sur ‘Start’
concernant MYSQL et
Apache
By Pr.-Dr.-Ing. Franklin Tchakounte 19

Lancer le client MYSQL

• mysql –u root –p
• Valider
• BRAVO VOUS AVEZ REUSSI!
By Pr.-Dr.-Ing. Franklin Tchakounte 20
By Pr.-Dr.-Ing. Franklin Tchakounte 21
By Pr.-Dr.-Ing. Franklin Tchakounte 22

FLOAT signifie que le champ contiendra des chiffres décimaux


BOOLEAN Il ne peut stocker que les valeurs TRUE et FALSE
DEFAULT Valeur par defaut
By Pr.-Dr.-Ing. Franklin Tchakounte 23
By Pr.-Dr.-Ing. Franklin Tchakounte 24

Un exemple avec clé étrangère


CREATE TABLE entity (
id INTEGER,
name TEXT NOT NULL,
jurisdiction TEXT,
jurisdiction_description TEXT,
company_type TEXT,
id_address INTEGER,
incorporation_date DATE,
inactivation_date DATE,
status TEXT,
service_provider TEXT,
country_codes TEXT,
countries TEXT,
source TEXT,
PRIMARY KEY(id),
FOREIGN KEY(id_address) REFERENCES address(id)
)
By Pr.-Dr.-Ing. Franklin Tchakounte 25

Insertion
By Pr.-Dr.-Ing. Franklin Tchakounte 26

Pour verifier le contenu d’une table


• SELECT * FROM TABLE;
By Pr.-Dr.-Ing. Franklin Tchakounte 27

Appliquer au cas suivant


By Pr.-Dr.-Ing. Franklin Tchakounte 28

Ensuite
• Réaliser Evaluations 3, 4
• Et ceci Les contraintes d'intégrité avec MySQL - apcpedagogie
By Pr.-Dr.-Ing. Franklin Tchakounte 29

Mise a jour
UPDATE table Indique à SQL le souhait
de mettre à jour de la
donnée dans la BDD. On
indique aussi la table
dans laquelle se
trouve(nt) le ou les objets
qu’il faudra modifier.
SET colonne = valeur Indique à SQL la ou
les colonnes à modifier,
et la ou
les valeurs qu’elles
doivent désormais
prendre.
WHERE colonne = valeur Ceci est le filtre ou condition.
Il sert à restreindre la
commande en cours à un ou
des objets répondant à des
conditions précises.
By Pr.-Dr.-Ing. Franklin Tchakounte 30

Suppression
• Mot clé DELETE: très simple à utiliser mais
dangereuse! Car une fois la donnée
supprimée de la BDD, impossible de la
récupérer ! Il faudra faire attention dans
son utilisation!
1. Suppression d’un objet
• DELETE FROM table WHERE condition;
• DELETE FROM `utilisateur` WHERE `id` = ‘2’;
• Attention! Sans le WHERE, vous risquez de
supprimer tous les objets d’une table
• DELETE FROM `utilisateur` ;
By Pr.-Dr.-Ing. Franklin Tchakounte 31

Suppression
• Mot clé DELETE: très simple à utiliser mais
dangereuse! Car une fois la donnée
supprimée de la BDD, impossible de la
récupérer ! Il faudra faire attention dans
son utilisation!
2. Suppression de tous les objets d'une
table
• DELETE FROM table;
• DELETE FROM utilisateur;
• Résultat: Toute la table est vidée
By Pr.-Dr.-Ing. Franklin Tchakounte 32

Suppression
• Mot clé DELETE: très simple à utiliser mais
dangereuse! Car une fois la donnée
supprimée de la BDD, impossible de la
récupérer ! Il faudra faire attention dans
son utilisation!
3. Suppression d’une table ou une base de
données
• DROP TABLE table;
• DROP TABLE `utilisateur`;

• Résultat: Toute la table ou base de données


supprimée
By Pr.-Dr.-Ing. Franklin Tchakounte 33

Être spécifique dans les requêtes


• Cf. cours sur algèbre relationnel et langage SQL et tire de ce lien
• SELECT * FROM table WHERE condition;
• SELECT * FROM aliment WHERE id = 4;
• SELECT * FROM aliment WHERE calories < 90;

• LIKE extrait les objets dont le texte d’une colonne satisfait à un modèle spécifique
• SELECT * FROM utilisateur WHERE email LIKE "%gmail.com";
• Texte se terminant par gmail.com
• SELECT * FROM utilisateur WHERE email LIKE "gmail.com%"; SELECT *
• Texte commençant par gmail.com FROM aliment
• SELECT * FROM utilisateur WHERE email LIKE "%gmail.com%"; WHERE (calories < 90) AND (sucre >10)
• Texte commençant contenant gmail.com au d ORDER BY calories DESC;
• ébut et a la fin
• SELECT * FROM utilisateur ORDER BY prenom ASC;
• affiche les utilisateurs avec les prénoms affichés par ordre alphabétique (croissant);
• SELECT * FROM utilisateur ORDER BY prenom DESC;
• affiche les utilisateurs avec les prénoms affichés par ordre anti-alphabétique (décroissant).
By Pr.-Dr.-Ing. Franklin Tchakounte 34

Des requêtes faites d'opérations


• COUNT(*) ou COUNT(colonne)
• Pour compter le nombre d’enregistrements
• SELECT COUNT(email)
• FROM utilisateur
• WHERE email LIKE "%gmail.com";
• Le mot clé DISTINCT compte le nombre d'objets différents et identifie donc s'il
existe des doublons dans un champ.
• SELECT DISTINCT nom from users;
• Utiliser des alias
• Le mot clé AS attribue des noms "artificiels" aux variables ou aux colonnes.
• SELECT COUNT(DISTINCT nom) AS "produits différents contenant le mot pomme"
• FROM aliment
• WHERE nom LIKE "%pomme%";
By Pr.-Dr.-Ing. Franklin Tchakounte 35

Des requêtes faites d'opérations


• AVG : moyenne de la colonne sur la sélection ;
• SUM : somme de la colonne sur la sélection ;
• MAX : maximum de la colonne sur la sélection ;
• MIN : minimum de la colonne sur la sélection.

• SELECT MAX(sucre) AS "taux de sucre maximum"


• FROM aliment;

• SELECT AVG(calories) AS "calories moyennes des aliments > 30g"


• FROM aliment
• WHERE calories > 30;
By Pr.-Dr.-Ing. Franklin Tchakounte 36

Créer des vues


• Objectif: Sauvegarder les requêtes pour ne pas avoir a les taper deux fois
• CREATE VIEW
• Si on veut créer une vue pour sauvegarder la catégorie des enseignants dont l’adresse e-mail
est une adresse Gmail
• CREATE VIEW enseignant_nom_vw AS -- vw est une convention pour view
• ( SELECT *
• FROM enseignant
• WHERE Nom_Enseignant LIKE “t%"
• );
• Ensuite, SELECT * FROM enseignant_nom_vw;
By Pr.-Dr.-Ing. Franklin Tchakounte 37

Modifiez la structure d’un objet


• ALTER TABLE
• Ajoutez un champ : un email a un
enseignant
• ALTER TABLE enseignant ADD email
VARCHAR (255);
By Pr.-Dr.-Ing. Franklin Tchakounte 38

Modifiez la structure d’un objet


• ALTER TABLE
• Supprimer un champ : le champ
email a un enseignant
• ALTER TABLE enseignant DROP
email;
By Pr.-Dr.-Ing. Franklin Tchakounte 39

Modifiez la structure d’un objet


• ALTER TABLE
• Modifiez un champ existant: le
champ nom_enseignant doit passer a
une taille de 500
• ALTER TABLE enseignant MODIFY
nom_enseignant VARCHAR(500)
NOT NULL;
By Pr.-Dr.-Ing. Franklin Tchakounte 40

Modifiez la structure d’un objet


• ALTER TABLE
• Renommez un champ: le champ
Salle devient Salle_cours
• ALTER TABLE enseignant CHANGE
Salle Salle_cours INT(11);
By Pr.-Dr.-Ing. Franklin Tchakounte 41

Relation un à plusieurs
Individu
Famille
1,n 1,1 id_Ind
id_Famille
Contient nom_Ind
nom_Famille
prenom_ind
CREATE TABLE famille
1
(
2
id_famille INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Mysql – u root –p nom_Famille VARCHAR(100) NOT NULL
);
Create database family
CREATE TABLE Individu
Show databases (
Use family 3
id_Ind INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
nom_Ind VARCHAR(100) NOT NULL,
Show tables prenom_ind VARCHAR(100) NOT NULL
);
By Pr.-Dr.-Ing. Franklin Tchakounte 42

Relation un à plusieurs
Individu
Famille
1,n 1,1 id_Ind
id_Famille
Contient nom_Ind
nom_Famille
prenom_Ind

INSERT INTO Famille (nom_Famille) VALUES (‘’Tchakounte’’), (‘’Effa’’), (‘’Dassi’’);


INSERT INTO Individu (nom_Ind, prenom_Ind) VALUES (‘’Tchak’’, ‘’Frank’’), (‘’Noubissi’’, ‘’Eric’’), (‘’Siewe’’,
‘’Brice’’), (‘’Effa’’, ‘’Yves’’);

SELECT * FROM Famille;


SELECT * FROM Individu;
By Pr.-Dr.-Ing. Franklin Tchakounte 43

Relation un à plusieurs
Individu
Famille
id_Ind
id_Famille
nom_Ind
nom_Famille
prenom_Ind
#famille_id
ALTER TABLE Individu ADD famille_id INT NULL;

ALTER TABLE Individu


ADD FOREIGN KEY (famille_id) REFERENCES Famille (id_Famille)
ON DELETE CASCADE;
By Pr.-Dr.-Ing. Franklin Tchakounte 44

Relation un à plusieurs
Individu
Famille
id_Ind
id_Famille
nom_Ind
nom_Famille
prenom_Ind
#famille_id
UPDATE Individu SET famille_id = 1 WHERE nom_Ind = "Tchak";

SELECT *
FROM Individu
JOIN famille ON Individu.famille_id = Famille. id_Famille
WHERE Individu. nom_Ind = "Tchak";
By Pr.-Dr.-Ing. Franklin Tchakounte 45

Relation plusieurs à plusieurs


Lieu
Article
id_Lieu 1,n
1,n id_Article
nom_Lieu Vente nom_Article
type_Lieu
prix_Article
CREATE TABLE Lieu
(
2 id_Lieu INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Mysql – u root –p nom_Lieu VARCHAR(100) NOT NULL,
type_Lieu VARCHAR(100) NOT NULL
Create database vendre );
Show databases CREATE TABLE Article
(
Use vendre id_Article INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
3 nom_Article VARCHAR(100) NOT NULL,
Show tables prix_Article INTEGER NOT NULL
);
By Pr.-Dr.-Ing. Franklin Tchakounte 46

Relation plusieurs à plusieurs


Lieu
Article
id_Lieu 1,n
1,n id_Article
nom_Lieu Vente nom_Article
type_Lieu
prix_Article

INSERT INTO Lieu (nom_Lieu, type_Lieu) VALUES ("Carrefour 140", "supermarché"), ("Avenue
Kennedy", "Boutique"), ("Essos", « Pharmacie");

INSERT INTO Article (nom_Article, prix_Article) VALUES ("Biscuit", 500), ("Chocolat", 1000),
("Seringue", 100);
By Pr.-Dr.-Ing. Franklin Tchakounte 47

Relation plusieurs à plusieurs


Lieu Article_Lieu Article
id_Lieu article_id id_Article
nom_Lieu lieu_id nom_Article
type_Lieu
prix_Article
CREATE TABLE Article_lieu (
article_id INT NOT NULL,
lieu_id INT NOT NULL,
1 FOREIGN KEY (article_id) REFERENCES Article (id_Article) ON DELETE RESTRICT ON UPDATE CASCADE,
FOREIGN KEY (lieu_id) REFERENCES Lieu (id_Lieu) ON DELETE RESTRICT ON UPDATE CASCADE,
PRIMARY KEY (article_id, lieu_id)
);
INSERT INTO Article_lieu (article_id, lieu_id) VALUES (2, 1);

SELECT *
2 FROM Article
JOIN Article ON Article. id_Article = Article_Lieu.article_id
JOIN Lieu ON Lieu.id_Lieu = Article_Lieu.lieu_id
WHERE Article.id_Article = 2;
By Pr.-Dr.-Ing. Franklin Tchakounte 48

Gestion des utilisateurs


By Pr.-Dr.-Ing. Franklin Tchakounte 49

TOUT D’ABORD
• SHOW DATABASES; SHOW SCHEMAS; Pour avoir l’état actuel de vos
bases de données et schemas
By Pr.-Dr.-Ing. Franklin Tchakounte 50

Utilisateur
• L'utilisateur est donc défini par deux éléments :
• son login ;
• l'hôte à partir duquel il se connecte.
• Toutes les informations sont dans la bases de données Mysql
• Login
• Le login est un simple identifiant. On peut le choisir comme on veut. Il
n'est pas obligatoire de l'entourer de guillemets, sauf s'il contient des
caractères spéciaux comme - ou @. C'est cependant conseillé.
• Hôte
• L'hôte est l'adresse à partir de laquelle l'utilisateur va se connecter. Si
l'utilisateur se connecte à partir de la machine sur laquelle le serveur
MySQL se trouve, on peut utiliser 'localhost'. Sinon, on utilise en
général une adresse IP ou un nom de domaine. Exemple: 192.168.3.4
By Pr.-Dr.-Ing. Franklin Tchakounte 51

Utilisateur
• L'utilisateur est donc défini par deux éléments :
• son login ;
• l'hôte à partir duquel il se connecte.
• Login
• Le login est un simple identifiant. On peut le choisir comme on veut. Il n'est pas
obligatoire de l'entourer de guillemets, sauf s'il contient des caractères spéciaux
comme - ou @. C'est cependant conseillé.
• Hôte
• L'hôte est l'adresse à partir de laquelle l'utilisateur va se connecter. Si l'utilisateur se
connecte à partir de la machine sur laquelle le serveur MySQL se trouve, on peut
utiliser 'localhost'. Sinon, on utilise en général une adresse IP ou un nom de domaine.
Exemple: 192.168.3.4
By Pr.-Dr.-Ing. Franklin Tchakounte 52

Utilisateur
• CREATE USER ‘landry’@ ‘localhost’ IDENTIFIED BY
‘landrythebest’;
• CREATE USER ‘pelagie’@ ‘194.28.12.4’ IDENTIFIED BY ‘pelagie1’;
• CREATE USER ‘nina’@‘arb.brab.net’ IDENTIFIED BY ‘ninapower’;

• Il est également possible de permettre à un utilisateur de se


connecter à partir de plusieurs hôtes différents (sans devoir créer un
utilisateur par hôte) : en utilisant le joker %, on peut préciser des
noms d'hôtes partiels, ou permettre à l'utilisateur de se connecter à
partir de n'importe quel hôte.
By Pr.-Dr.-Ing. Franklin Tchakounte 53

Utilisateur
• -- franklin peut se connecter à partir de n'importe quel hôte dont l'adresse IP
commence par 194.28.12.
• CREATE USER ‘franklin’@'194.28.12.%' IDENTIFIED BY ‘tchafros’;

• -- elisa peut se connecter à partir de n'importe quel hôte du domaine brab.net


• CREATE USER ‘elisa’@‘%.brab.net’ IDENTIFIED BY ‘elisauser’;

• -- vero peut se connecter à partir de n'importe quel hôte


• CREATE USER ‘vero’@‘%’ IDENTIFIED BY ‘verol’;
By Pr.-Dr.-Ing. Franklin Tchakounte 54

Utilisateur
• Comme pour le login, les guillemets ne sont pas obligatoires, sauf si un
caractère spécial est utilisé (comme le joker % par exemple).

• Si on ne précise pas d'hôte, c'est comme si on autorisait tous les hôtes.


'hannah'@'%' est donc équivalent à 'hannah'.
By Pr.-Dr.-Ing. Franklin Tchakounte 55

Utilisateur
• Renommer l'utilisateur
• Pour modifier l'identifiant d'un utilisateur (login et/ou hôte), on peut utiliser
• RENAME USER ancien_utilisateur TO nouvel_utilisateur

• Exemple : on renomme max en maxime, en gardant le même hôte.

• RENAME USER ‘max’@‘localhost’ TO ‘maxime’@‘localhost’;


By Pr.-Dr.-Ing. Franklin Tchakounte 56

Utilisateur
• Mot de passe
• Le mot de passe de l'utilisateur est donné par la cause IDENTIFIED BY. Cette clause
n'est pas obligatoire, auquel cas l'utilisateur peut se connecter sans donner de mot de
passe. Ce n'est évidemment pas une bonne idée d'un point de vue sécurité. Éviter au
maximum les utilisateurs sans mot de passe ou ayant un mot de passe vide.
• Lorsqu’un mot de passe est précisé, il n'est pas stocké tel quel dans la table
mysql.user. Il est d'abord hashé, et c'est cette valeur hashée qui est stockée.
By Pr.-Dr.-Ing. Franklin Tchakounte 57

Utilisateur
• Modifier le mot de passe
• Pour modifier le mot de passe d'un utilisateur, on
peut utiliser la commande SET PASSWORD (à
condition d'avoir les privilèges nécessaires, ou
d'être connecté avec l'utilisateur dont on veut
changer le mot de passe).
• Cependant, cette commande ne hashe/crypte pas
le mot de passe automatiquement. Il faut donc
utiliser la fonction PASSWORD().
• SET PASSWORD FOR ‘franklin'@'194.28.12.%' =
PASSWORD(‘tchafros');
By Pr.-Dr.-Ing. Franklin Tchakounte 58

Utilisateur
• Suppression de l’utilisateur

• Il vous est possible de supprimer entièrement un utilisateur existant


en utilisant la commande suivante:

• DROP USER ‘landryboss’@’localhost’;


By Pr.-Dr.-Ing. Franklin Tchakounte 59

Privilèges
• Lorsque l'on crée un utilisateur avec CREATE USER, celui-ci n'a au départ
aucun privilège, aucun droit.

• En SQL, avoir un privilège, c'est avoir l'autorisation d'effectuer une action


sur un objet.

• Un utilisateur sans aucun privilège ne peut rien faire d'autre que se connecter.
Il n'aura pas accès aux données, ne pourra créer aucun objet
(base/table/procédure/autre), ni en utiliser.
By Pr.-Dr.-Ing. Franklin Tchakounte 60

Privilèges
• Privilèges du CRUD (Create, Read, Update, et Delete)
• Les privilèges SELECT, INSERT, UPDATE et DELETE permettent aux utilisateurs
d'utiliser ces mêmes commandes.
• Privilèges concernant les tables, les vues et les bases de données

Privilège Action autorisée


CREATE TABLE Création de tables
CREATE TEMPORARY TABLE Création de tables temporaires
Création de vues (il faut également avoir le privilège
CREATE VIEW
SELECT sur les colonnes sélectionnées par la vue)
ALTER Modification de tables (avec ALTER TABLE)
DROP Suppression de tables, vues et bases de données
By Pr.-Dr.-Ing. Franklin Tchakounte 61

Privilèges
• Privilèges du CRUD (Create, Read, Update, et Delete)
• Les privilèges SELECT, INSERT, UPDATE et DELETE permettent aux utilisateurs
d'utiliser ces mêmes commandes.
• Autres privilèges
Privilège Action autorisée
CREATE ROUTINE Création de procédures stockées (et de fonctions stockées - non couvert dans ce cours)
ALTER ROUTINE Modification et suppression de procédures stockées (et fonctions stockées)
EXECUTE Exécution de procédures stockées (et fonctions stockées)
INDEX Création et suppression d'index
TRIGGER Création et suppression de triggers
LOCK TABLES Verrouillage de tables (sur lesquelles on a le privilège SELECT)
Gestion d'utilisateur (commandes CREATE USER, DROP USER, RENAME USER et SET
CREATE USER
PASSWORD)
By Pr.-Dr.-Ing. Franklin Tchakounte 62

Privilèges
Les privilèges peuvent aussi être restreints à certaines colonnes,
auquel cas, ils seront stockés dans la table mysql.columns_priv.

• Différents niveaux d'application des privilèges


• Lorsque l'on accorde un privilège à un utilisateur, il faut également préciser à quoi
s'applique ce privilège.
Niveau Application du privilège

Privilège global : s'applique à toutes les bases de données, à tous les objets. Un privilège de ce niveau sera stocké
.
dans la table mysql.user.

Si aucune base de données n'a été préalablement sélectionnée (avec USE nom_bdd), c'est l'équivalent de . (privilège
* stocké dans mysql.user). Sinon, le privilège s'appliquera à tous les objets de la base de données qu'on utilise (et sera
stocké dans la table mysql.db).

nom_bdd.* Privilège de base de données : s'applique à tous les objets de la base nom_bdd (stocké dans mysql.db).

nom_bdd.nom_table Privilège de table (stocké dans mysql.tables_priv).

Privilège de table : s'applique à la table nom_table de la base de données dans laquelle on se trouve, sélectionnée au
nom_table
préalable avec USE nom_bdd (stocké dans mysql.tables_priv).

nom_bdd.nom_routine S'applique à la procédure (ou fonction) stockée nom_bdd.nom_routine (privilège stocké dans mysql.procs_priv).
By Pr.-Dr.-Ing. Franklin Tchakounte 63

Ajout et révocation de privilèges


Ajout de privilèges

• Pour pouvoir ajouter un privilège à un utilisateur, il faut posséder le privilège


GRANT OPTION.
• Pour l'instant, seul l'utilisateur "root" le possède. Étant donné qu'il s'agit d'un
privilège un peu particulier
• Donc se connecter avec "root" pour exécuter les commandes de cette partie.
By Pr.-Dr.-Ing. Franklin Tchakounte 64

Ajout et révocation de privilèges


Ajout de privilèges

• Précisions
• On peut accorder plusieurs privilèges en une fois : il suffit de séparer les privilèges
par une virgule. Si l'on veut restreindre tout ou partie des privilèges à certaines
colonnes, la liste doit en être précisée pour chaque privilège.
• Si l'utilisateur auquel on accorde les privilèges n'existe pas, il sera créé. Auquel cas,
il vaut mieux ne pas oublier la clause IDENTIFIED BY pour donner un mot de passe
à l'utilisateur. Sinon, il pourra se connecter sans mot de passe.
• Si l'utilisateur existe, et qu'on ajoute la clause IDENTIFIED BY, son mot de passe
sera modifié.
By Pr.-Dr.-Ing. Franklin Tchakounte 65

Ajout et révocation de privilèges


Ajout de privilèges

• Syntaxe
• GRANT privilege [(liste_colonnes)] [, privilege [(liste_colonnes)], ...]
• ON [type_objet] niveau_privilege
• TO utilisateur [IDENTIFIED BY mot_de_passe];

• privilege : le privilège à accorder à l'utilisateur (SELECT, CREATE VIEW, EXECUTE,…) ;


• (liste_colonnes) : facultatif - liste des colonnes auxquelles le privilège s'applique ;
• niveau_privilege : niveau auquel le privilège s'applique (., nom_bdd.nom_table,…) ;
• type_objet : en cas de noms ambigus, il est possible de préciser à quoi se rapporte le niveau : TABLE ou
PROCEDURE.
By Pr.-Dr.-Ing. Franklin Tchakounte 66

Ajout et révocation de privilèges


Ajout de privilèges
GRANT privilege [(liste_colonnes)] [, privilege [(liste_colonnes)], ...]
ON [type_objet] niveau_privilege
TO utilisateur [IDENTIFIED BY mot_de_passe];

• Exemples
• 1. On crée un utilisateur
'john'@'localhost', en lui donnant les
privilèges SELECT, INSERT et
DELETE sur la table elevage.Animal,
et UPDATE sur les colonnes nom,
sexe et commentaires de la table
elevage.Animal.
By Pr.-Dr.-Ing. Franklin Tchakounte 67

Ajout et révocation de privilèges


Ajout de privilèges
GRANT privilege [(liste_colonnes)] [, privilege [(liste_colonnes)], ...]
ON [type_objet] niveau_privilege
TO utilisateur [IDENTIFIED BY mot_de_passe];

• Exemples
• 2. On accorde le privilège SELECT à
l'utilisateur 'john'@'localhost' sur la
table elevage.Espece, et on modifie
son mot de passe.
By Pr.-Dr.-Ing. Franklin Tchakounte 68

Ajout et révocation de privilèges


Ajout de privilèges
GRANT privilege [(liste_colonnes)] [, privilege [(liste_colonnes)], ...]
ON [type_objet] niveau_privilege
TO utilisateur [IDENTIFIED BY mot_de_passe];

• Exemples
• 3. On accorde à 'john'@'localhost' le
privilège de créer et exécuter des
procédures stockées dans la base de
données elevage.
By Pr.-Dr.-Ing. Franklin Tchakounte 69

Ajout et révocation de privilèges


Révocation de privilèges
Pour retirer un ou plusieurs privilèges à un utilisateur, on utilise la commande
REVOKE.

Syntaxe
REVOKE privilege [, privilege, ...]
ON niveau_privilege
FROM utilisateur;

privilege : le privilège à accorder à l'utilisateur (SELECT, CREATE VIEW,


EXECUTE,…)
niveau_privilege : niveau auquel le privilège s'applique (., nom_bdd.nom_table,…) ;
By Pr.-Dr.-Ing. Franklin Tchakounte 70

Ajout et révocation de privilèges


Révocation de privilèges
Pour retirer un ou plusieurs privilèges à un utilisateur, on utilise la commande
REVOKE.

Syntaxe
REVOKE privilege [, privilege, ...]
ON niveau_privilege
FROM utilisateur;

• Révoquer tous les privilèges


• REVOKE ALL PRIVILEGES ON *.* FROM ‘user’@’localhost’
By Pr.-Dr.-Ing. Franklin Tchakounte 71

Ajout et révocation de privilèges


• Assurer-vous d’exécuter la commande FLUSH PRIVILEGES ; après avoir
effectué vos modifications.
By Pr.-Dr.-Ing. Franklin Tchakounte 72

Afficher les privilèges d’un compte


utilisateur MySQL
• De manière globale
• SHOW GRANTS;

• Afin de trouver quels privilèges ont déjà été accordés à un utilisateur MySQL
• SHOW GRANTS FOR 'nom_utilisateur'@'localhost’;

• SHOW GRANTS FOR ‘landryboss'@'localhost’;


By Pr.-Dr.-Ing. Franklin Tchakounte 73

Les privilèges ALL, USAGE et GRANT


OPTION
• ALL
• Le privilège ALL (ou ALL PRIVILEGES), comme
son nom l'indique, représente tous les privilèges.
• Accorder le privilège ALL revient donc à accorder
tous les droits à l'utilisateur.
• Il faut évidemment préciser le niveau auquel tous
les droits sont accordés (on octroie tous les
privilèges possibles sur une table, ou sur une
base de données, etc.).
• Un privilège fait exception : GRANT OPTION n'est pas
compris dans les privilèges représentés par ALL.
• Exemple : on accorde tous les droits sur la table
Client à 'john'@'localhost'.
By Pr.-Dr.-Ing. Franklin Tchakounte 74

Les privilèges ALL, USAGE et GRANT


OPTION
• USAGE

• À l'inverse de ALL, le privilège USAGE signifie "aucun


privilège".
• De prime abord, utiliser la commande GRANT pour
n'accorder aucun privilège peut sembler un peu ridicule.
• En réalité, c'est extrêmement utile : USAGE permet en
fait de modifier les caractéristiques d'un compte avec la
commande GRANT, sans modifier les privilèges du
compte. USAGE est toujours utilisé comme un privilège
global (donc ON *.*).
• Exemple : Modification du mot de passe de
'john'@'localhost'. Ses privilèges ne changent pas.
By Pr.-Dr.-Ing. Franklin Tchakounte 75

Les privilèges ALL, USAGE et GRANT


OPTION
• GRANT OPTION

• Un utilisateur ayant ce privilège est autorisé à utiliser la commande


GRANT, pour accorder des privilèges à d'autres utilisateurs.
• Ce privilège n'est pas compris dans le privilège ALL. Par ailleurs, un
utilisateur ne peut accorder que les privilèges qu'il possède lui-
même!

• On peut accorder GRANT OPTION de deux manières :


• comme un privilège normal, après le mot GRANT ;
• à la fin de la commande GRANT, avec la clause WITH GRANT OPTION.
By Pr.-Dr.-Ing. Franklin Tchakounte 76

Les privilèges ALL, USAGE et GRANT


OPTION
• GRANT OPTION
• On peut accorder GRANT OPTION
de deux manières :
• comme un privilège normal, après le
mot GRANT ;
• à la fin de la commande GRANT, avec
la clause WITH GRANT OPTION.
• Exemple : on accorde les privilèges
SELECT, UPDATE, INSERT,
DELETE et GRANT OPTION sur la
base de données elevage à
'joseph'@'localhost'.
By Pr.-Dr.-Ing. Franklin Tchakounte 77

Options supplémentaires
• La commande GRANT possède encore deux clauses facultatives
supplémentaires, permettant de limiter les ressources serveur de l'utilisateur,
et d'obliger l'utilisateur à se connecter via SSL.

• 1) Limitation des ressources: On peut limiter trois choses différentes pour


un utilisateur :
• Le nombre de requêtes par heure (MAX_QUERIES_PER_HOUR) : limitation de toutes
les commandes exécutées par l'utilisateur ;
• Le nombre de modifications par heure (MAX_UPDATES_PER_HOUR) : limitation des
commandes entraînant la modification d'une table ou d'une base de données ;
• Le nombre de connexions au serveur par heure
(MAX_CONNECTIONS_PER_HOUR).
By Pr.-Dr.-Ing. Franklin Tchakounte 78

Options supplémentaires
• Exemple : création d'un compte ‘alvine'@'localhost' ayant tous les droits sur la
base de données elevage, mais avec des ressources limitées.

• Exemple: Pour limiter les ressources d'un utilisateur existant sans modifier
ses privilèges, on peut utiliser le privilège USAGE.
By Pr.-Dr.-Ing. Franklin Tchakounte 79

Options supplémentaires
• Exemple : Pour supprimer une limitation de ressources, il suffit de la mettre à
zéro.
By Pr.-Dr.-Ing. Franklin Tchakounte 80

Options supplémentaires
• Connexion SSL

• La clause REQUIRE de la commande GRANT permet d'obliger l'utilisateur à


se connecter via SSL, c'est-à-dire à l'aide d'une connexion sécurisée.

• Avec une telle connexion, toutes les données transitant entre le client et le
serveur sont chiffrées, et non plus passées en clair.

• Cette documentation vous donne les détails si vous êtes intéressés par le
sujet.
By Pr.-Dr.-Ing. Franklin Tchakounte 81

Sécuriser l'installation
By Pr.-Dr.-Ing. Franklin Tchakounte 82

Mettre un mot de passe au compte


utilisateur root
• C’est le superutilisateur de MySQL (à ne pas confondre avec l’administrateur
système root sous UNIX) ;
• Il a donc tous les droits sur le serveur ; il doit être protégé par un mot de passe.
Ceci est valable quel que soit le système d’exploitation.
• Dans certains cas, le mot de passe par défaut est le vide. Il faut egalement le
changer
By Pr.-Dr.-Ing. Franklin Tchakounte 83

Supprimer les comptes anonymes


• Dans le but de faciliter la prise en main du
logiciel, un compte anonyme, c’est-
à-dire un compte qui a le champ user à vide,
peut être présent lors de l’installation de votre
serveur.
• Il permet de se connecter au serveur avec
n’importe quel utilisateur, en local et sans mot
de passe.
• Sur un serveur de production un tel utilisateur
n’est pas à sa place, il faut donc le supprimer.
• Ce principe doit être étendu à tous les
comptes inutilisés, car c’est autant de
problèmes potentiels d'éliminés.
By Pr.-Dr.-Ing. Franklin Tchakounte 84

Supprimer le schéma/la base test


• Le schéma / la base de données test est créé(e) par MySQL lors de l’installation et
tous les utilisateurs ont le droit d’y accéder en lecture comme en écriture sans qu’il
soit nécessaire de spécifier explicitement les droits adéquats.
• Un utilisateur mal intentionné pourrait alors remplir de données votre disque dur et
ainsi empêcher le bon fonctionnement de votre application.
mysql> SHOW SCHEMAS; mysql> SHOW DATABASES;
mysql> DROP SCHEMA test; mysql> DROP DATABASE test;
mysql> SHOW SCHEMAS; mysql> SHOW DATABASES;
• À noter que cette recommandation s’applique également à tout schéma test qui
serait créé par la suite, mais également à tout schéma qui commencerait par le mot
test_.
By Pr.-Dr.-Ing. Franklin Tchakounte 85

Moteurs
By Pr.-Dr.-Ing. Franklin Tchakounte 86

Moteurs de tables
• Les moteurs de tables sont une spécificité de MySQL.
• Ce sont des moteurs de stockage.
• Cela permet de gérer différemment les tables selon l’utilité qu'on en a.
• Pour plus d'informations, je vous renvoie à la documentation officielle.
• Les deux moteurs les plus connus sont MyISAM et InnoDB.

• Il est souvent important de le préciser lorsqu’il faille créer une table


By Pr.-Dr.-Ing. Franklin Tchakounte 87

MyISAM
• C'est le moteur par défaut.
• Les commandes d'insertion et sélection de données sont particulièrement
rapides sur les tables utilisant ce moteur.
• Cependant, il ne gère pas certaines fonctionnalités importantes comme les
clés étrangères, qui permettent de vérifier l'intégrité d'une référence d'une
table à une autre table ou les transactions, qui permettent de réaliser des
séries de modifications « en bloc » ou au contraire d'annuler ces modifications
(voir la cinquième partie du cours).
By Pr.-Dr.-Ing. Franklin Tchakounte 88

InnoDB
• Plus lent et plus gourmand en ressources que MyISAM, ce moteur gère les
clés étrangères et les transactions.
• Dans les situations d’utilisations des clés étrangères, c'est celui-là qu’il faille
utiliser.
• De plus, en cas de crash du serveur, il possède un système de récupération
automatique des données.
By Pr.-Dr.-Ing. Franklin Tchakounte 89

Préciser un moteur lors de la création


de la table
• Pour qu'une table utilise le moteur de votre choix, il suffit d'ajouter ceci à la fin
de la commande de création :

• ENGINE = moteur;

• En remplaçant bien sûr "moteur" par le nom du moteur que nous voulons
utiliser, ici InnoDB :

• ENGINE = INNODB;
By Pr.-Dr.-Ing. Franklin Tchakounte 90

Application
table Animal

Vérifications
By Pr.-Dr.-Ing. Franklin Tchakounte 91

Autres informations
• Encodage - table ASCII (American Standard Code for Information Interchange)
• Le processeur d'un ordinateur, c'est-à-dire le composant qui s'occupe de traiter les informations,
exécuter les programmes, etc., ne comprend que les instructions formulées en binaire ; il ne peut que
lire une suite d’éléments pouvant être dans deux états : 0 ou 1.
• Donc, tous les programmes informatiques que vous pourriez écrire, toutes les instructions SQL, tous
les fichiers, sont in fine traduits en code machine, donc une longue suite de 0 et de 1, pour pouvoir
être lus ou exécutés. Chacun de ces 0 ou 1 est un bit. Ces bits sont regroupés par huit pour former
un octet.
• L'ordinateur ne connaît donc pas la notion de caractères. Il ne sait pas ce qu'est un "A", ou un "è". Il a
donc fallu créer une table de conversion pour traduire les caractères de la langue courante en une
série de bits. Il s’agit de la table ASCII.
• La table ASCII est donc une table de conversion, qui permet de traduire en code binaire 128
caractères, dont 33 caractères de contrôle (séparateur de fichier, saut de page, …) et 95
caractères affichables. Les caractères affichables sont les 26 lettres de l'alphabet, en majuscules et
en minuscules, les 10 chiffres arabes et toute une série de caractères spéciaux courants (#, ;, ), <,
…).
By Pr.-Dr.-Ing. Franklin Tchakounte 92

Autres informations
• Jeux de caractères
• On s'est ensuite rendu compte que ces 128 caractères n'étaient pas suffisants.
• En effet, ils ne comprennent pas les caractères accentués ("é", "à").
• Ils ne comprennent pas non plus tous les caractères cyrilliques, japonais, etc.
• On a alors commencé à utiliser le huitième bit. Ce qui permettait de représenter 128
caractères supplémentaires (donc 2 expo 8 = 256 en tout).
• Mais avec 128 caractères supplémentaires, on n'a pas de quoi représenter tous les
caractères qui n'existent pas dans la table ASCII. On a donc créé plusieurs jeux de
caractères différents.
By Pr.-Dr.-Ing. Franklin Tchakounte 93

Autres informations
• Jeux de caractères
• Exemples :

• ISO 8859-1 (ou latin1) : qui permet de couvrir une bonne partie des langues d'Europe
occidentale en ajoutant les lettres accentuées aux caractères ASCII de base ("å", "é", "ô", "ñ",
…)
• ISO 8859-7 : qui permet de représenter les lettres grecques
• ISO 8859-11 : qui contient une bonne partie des glyphes de la langue thaï
• ISO 8859-15 : qui est une révision de l'ISO 8859-1, et qui remplace quelques caractères peu
utilisés par d'autres, plus nécessaires, comme l'euro ("€")

• Dès lors, lorsque l'on crée un fichier, un programme ou autre, il faut préciser quel jeu de
caractère (ou encodage) est utilisé.
By Pr.-Dr.-Ing. Franklin Tchakounte 94

Autres informations
• Jeux de caractères
• UTF-8
• Il restait un petit problème : comment faire des documents (ou autres) qui doivent utiliser plusieurs jeux de
caractères différents ?
• On a donc créé un nouveau type d'encodage, permettant de représenter les caractères avec deux octets au
lieu d'un.
• 16 bits donnent 2 expo 16 = 65536 possibilités.
• On peut donc, en utilisant deux octets, représenter plus de 65000 caractères.
• Cet encodage s'appelle l'UTF-8.
• Le désavantage d'un tel encodage est évidemment le coût en mémoire, deux octets prenant plus de place
qu'un.
• Cependant, tous les caractères ne sont pas codés sur deux octets. S'il s'agit d'un caractère de base de la table
ASCII, le 8e bit est à 0, ce qui indique qu'il n'est codé que sur un octet.
• Par contre, lorsque le 8e bit est à 1, cela indique qu'on a affaire à un caractère spécial et qu'il est codé sur deux
octets. Donc, en UTF-8, un "é" prendra plus de place qu'un "e" (deux octets au lieu d'un).
By Pr.-Dr.-Ing. Franklin Tchakounte 95

Définir encodage
• A chaque connexion à MySQL, exécutez donc la commande suivante :

• SET NAMES 'utf8’;

Ou

• Il est également possible d'ajouter une option lors de la connexion, pour éviter
de devoir exécuter SET NAMES

• mysql -u root -p --default-character-set=utf8


By Pr.-Dr.-Ing. Franklin Tchakounte 96

Autres informations
• Interclassement
• Ensemble de règles qui vient s'ajouter à l'encodage. Pour chaque jeu de
caractères, plusieurs interclassements peuvent exister, qui définissent deux choses
:
• l'ordre des caractères : par exemple, l'ordre alphabétique. Lorsque l'on trie les données
avec MySQL, le tri sera basé sur l'interclassement.
• les équivalences de caractères : on peut par exemple définir que les majuscules sont
équivalentes aux minuscules (interclassement insensible à la casse). De sorte que si l'on
recherche les données qui contienne "a", on trouve également celles qui contiennent "A".
• Il est recommandé de garder l'interclassement par défaut (qui est insensible à la casse).
By Pr.-Dr.-Ing. Franklin Tchakounte 97

'AAAA-MM-JJ' (c'est sous ce format-ci qu'une DATE est stockée dans MySQL)

Types de données
'AAAA-MM-JJ HH:MM:SS' (c'est sous ce format-ci qu'un DATETIME est stocké dans MySQL)

MySQL supporte des DATETIME allant de '1001-01-01 00:00:00' à '9999-12-31 23:59:59'


MySQL supporte des TIME allant de '-838:59:59' à '838:59:59' MySQL supporte des DATE allant de '1001-01-01' à '9999-12-31'
By Pr.-Dr.-Ing. Franklin Tchakounte 98

Verrous
By Pr.-Dr.-Ing. Franklin Tchakounte 99

Principe
• Lorsqu’une session MySQL pose un verrou sur un élément de la base de données,
cela veut dire qu'il restreint, voire interdit, l'accès à cet élément aux autres
sessions MySQL qui voudraient y accéder.

• Il est possible de poser un verrou sur une table entière, ou seulement sur une ou
plusieurs lignes d'une table. Étant donné qu'un verrou empêche l'accès d'autres
sessions, il est en général plus intéressant de poser un verrou sur la plus petite
partie de la base possible.
• Par exemple, si l'on travaille avec les chiens de la table Animal.
• On peut poser un verrou sur toute la table Animal. Dans ce cas, les autres sessions n'auront
pas accès à cette table, tant que le verrou sera posé. Qu'elles veuillent en utiliser les chiens,
les chats, ou autre, tout leur sera refusé.
• On peut aussi poser un verrou uniquement sur les lignes de la table qui contiennent des
chiens. De cette manière, les autres sessions pourront accéder aux chats, aux perroquets, etc.
Elles pourront toujours travailler, tant qu'elles n'utilisent pas les chiens.
By Pr.-Dr.-Ing. Franklin Tchakounte 100

Principe
• Cette notion d'accès simultané aux données par plusieurs sessions différentes
s'appelle la concurrence.
• Plus la concurrence est possible, donc plus le nombre de sessions pouvant accéder
aux données simultanément est grand, mieux c'est.
• En effet, prenons l'exemple d'un site web.
• En général, on préfère permettre à plusieurs utilisateurs de surfer en même temps,
sans devoir attendre entre chaque action de pouvoir accéder aux informations
chacun à son tour.
• Or, chaque utilisateur crée une session chaque fois qu'il se connecte à la base de
données (pour lire les informations ou les modifier).
• Il est donc préférable d’utiliser (autant que possible) les verrous de ligne
plutôt que verrous de table !
By Pr.-Dr.-Ing. Franklin Tchakounte 101

Principe
• Les informations données dans ce tutoriel concernent exclusivement
MySQL, et en particulier les tables utilisant les moteurs MyISAM ou InnoDB
(selon le type de verrou utilisé).

• En effet, les verrous sont implémentés différemment selon les SGDB, et


même selon le moteur de table en ce qui concerne MySQL.

• Si le principe général reste toujours le même, certains comportements et


certaines options peuvent différer d'une implémentation à l'autre
By Pr.-Dr.-Ing. Franklin Tchakounte 102

Chargement BD a partir d’un fichier SQL


• Créer le fichier .sql

• Connexion a la BD
• SOURCE animal.sql; ou \. animal.sql;
ou
• mysql -u root -p nom_de_la_base_de_donnees < animal.sql
• N.B
• La base de données doit déjà exister
• Préciser le chemin pour le fichier
• Attention, le fichier SQL doit se terminer par un saut de ligne !
• SELECT * FROM Animal; -- Pour vérifier
By Pr.-Dr.-Ing. Franklin Tchakounte 103

Chargement BD a partir d’un fichier SQL


• Appliquer la même opération a clientAdoption.sql

• Connexion a la BD
• SOURCE clientAdoption.sql; ou \. clientAdoption.sql;
ou
• mysql -u root -p nom_de_la_base_de_donnees < clientAdoption.sql
• N.B
• La base de données doit déjà exister
• Préciser le chemin pour le fichier
• Attention, le fichier SQL doit se terminer par un saut de ligne !
• SELECT * FROM Client; -- Pour vérifier
• SELECT * FROM Adoption; -- Pour vérifier
By Pr.-Dr.-Ing. Franklin Tchakounte 104

Chargement BD a partir d’un fichier CSV


• Créer le fichier .csv
• Taper la commande suivante

LOAD DATA LOCAL INFILE 'animal.csv'


INTO TABLE Animal
FIELDS TERMINATED BY ';' ENCLOSED BY '"'
LINES TERMINATED BY '\n' -- ou '\r\n' selon l'ordinateur et le programme utilisés
pour créer le fichier
(espece, sexe, date_naissance, nom, commentaires);

• SELECT * FROM Animal; -- Pour vérifier


By Pr.-Dr.-Ing. Franklin Tchakounte 105

Syntaxe et utilisation : verrous de


table
• Les verrous de table sont les seuls supportés par MyISAM.
• Ils sont d'ailleurs principalement utilisés pour pallier en partie l'absence de
transactions dans MyISAM. Les tables InnoDB peuvent également utiliser ce type
de verrou.
• En utilisant READ, un verrou de lecture sera posé ; c'est-à-dire que les autres sessions
pourront toujours lire les données des tables verrouillées, mais ne pourront plus les modifier.
• En utilisant WRITE, un verrou d'écriture sera posé. Les autres sessions ne pourront plus ni lire
ni modifier les données des tables verrouillées.
• Pour déverrouiller les tables, on utilise UNLOCK TABLES. Cela déverrouille toutes
les tables verrouillées. Il n'est pas possible de préciser les tables à déverrouiller.
Tous les verrous de table d'une session sont relâchés en même temps.
By Pr.-Dr.-Ing. Franklin Tchakounte 106

Syntaxe et utilisation : verrous de


table
• Session ayant obtenu le verrou

• Lorsqu'une session acquiert un ou plusieurs verrous de table, cela a


plusieurs conséquences pour cette session :
• elle ne peut plus accéder qu'aux tables sur lesquelles elle a posé un verrou ;
• elle ne peut accéder à ces tables qu'en utilisant les noms qu'elle a donnés lors
du verrouillage (soit le nom de la table, soit le/les alias donné(s)) ;
• s'il s'agit d'un verrou de lecture (READ), elle peut uniquement lire les données, pas
les modifier.
By Pr.-Dr.-Ing. Franklin Tchakounte 107

Syntaxe et utilisation : verrous de


table
• on pose deux verrous, l'un READ, l'autre WRITE, l'un en donnant un alias au nom de la table,
l'autre sans.

Sélection dans Espece, sans alias.


• SELECT id, nom_courant FROM Espece;
• Pas de problème, on a bien un verrou sur Espece, sans alias.

Sélection dans Espece, avec alias.


• SELECT id, nom_courant
• FROM Espece AS table_espece;
By Pr.-Dr.-Ing. Franklin Tchakounte 108

Syntaxe et utilisation : verrous de


table
• on pose deux verrous, l'un READ, l'autre WRITE, l'un en donnant un alias au
nom de la table, l'autre sans.

• Modification dans Espece, sans alias.


• UPDATE Espece
• SET description = 'Petit piaf bruyant’
• WHERE id = 4;

Avec ou sans alias, impossible de modifier la table Espece, puisque le verrou que l'on possède dessus est un verrou de lecture.
By Pr.-Dr.-Ing. Franklin Tchakounte 109

Syntaxe et utilisation : verrous de


table
• on pose deux verrous, l'un READ, l'autre WRITE, l'un en donnant un alias au
nom de la table, l'autre sans.

• Sélection dans Adoption, sans alias.


• SELECT client_id, animal_id
• FROM Adoption;

Cette fois, c'est le contraire, sans alias, ça ne passe pas.


By Pr.-Dr.-Ing. Franklin Tchakounte 110

Syntaxe et utilisation : verrous de


table
• on pose deux verrous, l'un READ, l'autre WRITE, l'un en donnant un alias au
nom de la table, l'autre sans.

• Sélection dans Adoption, avec alias.


• SELECT client_id, animal_id
• FROM Adoption AS adopt
• WHERE client_id = 4;
By Pr.-Dr.-Ing. Franklin Tchakounte 111

Syntaxe et utilisation : verrous de


table
• on pose deux verrous, l'un READ, l'autre WRITE, l'un en donnant un alias au nom
de la table, l'autre sans.

• Modification dans Adoption, sans alias.


• UPDATE Adoption
• SET paye = 0
• WHERE client_id = 10 AND animal_id = 49;

Idem pour la modification, l'alias est indispensable.


By Pr.-Dr.-Ing. Franklin Tchakounte 112

Syntaxe et utilisation : verrous de


table
• on pose deux verrous, l'un READ, l'autre WRITE, l'un en donnant un alias au nom
de la table, l'autre sans.

• Modification dans Adoption, avec alias.


• UPDATE Adoption AS adopt
• SET paye = 0
• WHERE client_id = 10 AND animal_id = 49;
By Pr.-Dr.-Ing. Franklin Tchakounte 113

Syntaxe et utilisation : verrous de


table
• Il faut donc penser à acquérir tous les verrous nécessaires aux requêtes à
exécuter.
• De plus, il faut les obtenir en une seule requête LOCK TABLES.
• En effet, LOCK TABLES commence par enlever tous les verrous de table
de la session avant d'en acquérir de nouveaux.
• Il est bien entendu possible de poser plusieurs verrous sur la même table en
une seule requête afin de verrouiller son nom ainsi qu'un ou plusieurs
alias.
By Pr.-Dr.-Ing. Franklin Tchakounte 114

Syntaxe et utilisation : verrous de


table
• on pose un verrou de lecture sur Adoption, puis avec une seconde requête, on
pose deux verrous de lecture sur la table Espece, l'un avec alias, l'autre sans.
• UNLOCK TABLES; -- On relâche d'abord les deux verrous précédents
• LOCK TABLES Adoption READ;
• LOCK TABLES Espece READ, Espece AS table_espece READ;

• Une fois ces deux requêtes effectuées, on aura donc bien deux verrous de lecture
sur la table Espece : un avec son nom, l'autre avec un alias. Par contre, le verrou
sur Adoption n'existera plus puisqu'il aura été relâché par l'exécution de la seconde
requête LOCK TABLES.
By Pr.-Dr.-Ing. Franklin Tchakounte 115

Syntaxe et utilisation : verrous de


table
• on pose un verrou de lecture sur Adoption, puis avec une seconde requête,
on pose deux verrous de lecture sur la table Espece, l'un avec alias, l'autre
sans.
• UNLOCK TABLES; -- On relâche d'abord les deux verrous précédents
• LOCK TABLES Adoption READ;
• LOCK TABLES Espece READ, Espece AS table_espece READ;

• Sélection dans Espece, sans alias.


• SELECT id, nom_courant FROM Espece;
By Pr.-Dr.-Ing. Franklin Tchakounte 116

Syntaxe et utilisation : verrous de


table
• on pose un verrou de lecture sur Adoption, puis avec une seconde requête,
on pose deux verrous de lecture sur la table Espece, l'un avec alias, l'autre
sans.
• UNLOCK TABLES; -- On relâche d'abord les deux verrous précédents
• LOCK TABLES Adoption READ;
• LOCK TABLES Espece READ, Espece AS table_espece READ;

• Sélection dans Espece, avec alias.


• SELECT id, nom_courant FROM Espece AS table_espece;

Avec ou sans alias, on peut sélectionner les données de la table Espece, puisque l'on a un
verrou sur Espece et sur Espece AS table_espece.
By Pr.-Dr.-Ing. Franklin Tchakounte 117

Syntaxe et utilisation : verrous de


table
• on pose un verrou de lecture sur Adoption, puis avec une seconde requête,
on pose deux verrous de lecture sur la table Espece, l'un avec alias, l'autre
sans.
• UNLOCK TABLES; -- On relâche d'abord les deux verrous précédents
• LOCK TABLES Adoption READ;
• LOCK TABLES Espece READ, Espece AS table_espece READ;

• Sélection dans Espece, avec mauvais alias.


• SELECT id, nom_courant FROM Espece AS table_esp;

Bien entendu, cela ne fonctionne que pour l'alias que l'on a donné lors du verrouillage.
By Pr.-Dr.-Ing. Franklin Tchakounte 118

Syntaxe et utilisation : verrous de


table
• on pose un verrou de lecture sur Adoption, puis avec une seconde requête,
on pose deux verrous de lecture sur la table Espece, l'un avec alias, l'autre
sans.
• UNLOCK TABLES; -- On relâche d'abord les deux verrous précédents
• LOCK TABLES Adoption READ;
• LOCK TABLES Espece READ, Espece AS table_espece READ;

• Sélection dans Adoption, sans alias.


• SELECT * FROM Adoption;

Le verrou sur Adoption a été relâché lorsque l'on a posé les verrous sur Espece. On ne peut donc pas lire les données d'Adoption
(avec ou sans alias).
By Pr.-Dr.-Ing. Franklin Tchakounte 119

Conséquences pour les autres


sessions
• Si une session a obtenu un verrou de lecture sur une table, les autres
sessions :
• peuvent lire les données de la table ;
• peuvent également acquérir un verrou de lecture sur cette table ;
• ne peuvent pas modifier les données, ni acquérir un verrou d'écriture sur cette table.
• Si par contre une session a obtenu un verrou d'écriture, les autres sessions
ne peuvent absolument pas accéder à cette table tant que ce verrou existe.
By Pr.-Dr.-Ing. Franklin Tchakounte 120

Conséquences pour les autres


sessions
• Ouvrir un deuxième client MySQL et connectez-vous à votre base de
données, afin d'avoir deux sessions ouvertes.
Session 1 :
• Sélection sur des tables verrouillées à partir d'une autre session.
• LOCK TABLES Client READ, -- Verrou de lecture sur Client
• Adoption WRITE; -- Verrou d'écriture sur Adoption
Session 2 :
• SELECT id, nom, prenom, ville, email
• FROM Client
• WHERE ville = 'Houtsiplou’;

La sélection sur Client se fait sans problème.


By Pr.-Dr.-Ing. Franklin Tchakounte 121

Conséquences pour les autres


sessions
• Ouvrir un deuxième client MySQL et connectez-vous à votre base de données, afin
d'avoir deux sessions ouvertes.
Session 1 :
• Sélection sur des tables verrouillées à partir d'une autre session.
• LOCK TABLES Client READ, -- Verrou de lecture sur Client
• Adoption WRITE; -- Verrou d'écriture sur Adoption
Session 2 :
• SELECT *
• FROM Adoption
• WHERE client_id = 4;

Par contre, la sélection sur Adoption ne passe pas. La session se bloque, jusqu'à ce
que la session 1 déverrouille les tables avec UNLOCK TABLES.
By Pr.-Dr.-Ing. Franklin Tchakounte 122

Conséquences pour les autres


sessions
• 2. Modification sur des tables verrouillées à partir d'une autre session.
Session 1 :
• Reverrouillez les tables avec la session 1 :
• LOCK TABLES Client READ, -- Verrou de lecture sur Client
• Adoption WRITE; -- Verrou d'écriture sur Adoption
Session 2 :
• UPDATE Client
• SET pays = 'Suisse'
• WHERE id = 5;
La modification sur Client, contrairement à la sélection, est bloquée jusqu'au
déverrouillage. Déverrouillez puis verrouillez à nouveau avec la session 1.
By Pr.-Dr.-Ing. Franklin Tchakounte 123

Conséquences pour les autres


sessions
• 2. Modification sur des tables verrouillées à partir d'une autre session.
Session 1 :
• Reverrouillez les tables avec la session 1 :
• LOCK TABLES Client READ, -- Verrou de lecture sur Client
• Adoption WRITE; -- Verrou d'écriture sur Adoption
Session 2 :
• UPDATE Adoption
• SET paye = 1
• WHERE client_id = 3;

• Bien entendu, la modification sur la table Adoption attend également que les verrous
soient relâchés par la session 1.
By Pr.-Dr.-Ing. Franklin Tchakounte 124

Sauvegarde de la BD, TABLE


• Syntaxe mysqldump
• mysqldump [OPTIONS] ma_base_de_donnee [ma_table1, ma_table2,...]
• Sauvegarder la base entière
• mysqldump -u login -p password -h nom_serveur_rmysql --opt nom_base >
sauvegarde_de_ma_base.sql
• Sauvegarder une table spécifique de la base
• mysqldump -u login -p password -h nom_serveur_rmysql --opt nom_base nom_table >
sauvegarde_dune_seule_table_de_la_base.sql
• L’argument -- opt permet entre autres d’exporter la structure de la table, de mettre à jour les données en
écrasant la table.
• On peut aussi sauvegarder toutes les bases avec l'option --all-databases (Attention, ça
sauvegarde même les tables mysql contenant les utilisateurs et la configuration !)
• mysqldump -u root -p --all-databases > backup-full_dbs.sql
By Pr.-Dr.-Ing. Franklin Tchakounte 125

Sauvegarde de la BD, TABLE


• Création de répertoire de sauvegarde

• Changer de répertoire

• Sauvegarde complète
• Vérifications
By Pr.-Dr.-Ing. Franklin Tchakounte 126

Sauvegarde de la BD, TABLE


• Vérifications
By Pr.-Dr.-Ing. Franklin Tchakounte 127

Restauration de la BD, TABLE


• mysql ma_base < sauvegarde_de_ma_base.sql
• N.B La base doit être créée au préalable

ou

• mysql ma_base < sauvegarde_dune_seule_table_de_la_base.sql


• N.B La base doit être créée au préalable
By Pr.-Dr.-Ing. Franklin Tchakounte 128

Tell me
• What did you learn?
• Provide a list of key words
By Pr.-Dr.-Ing. Franklin Tchakounte 129

Exercises
• Cf. Exercise Sheet

Vous aimerez peut-être aussi