Michael Kofler. MySQL 5. Guide de l'administrateur et du développeur. © Groupe
Eyrolles .... Exemple d'application PHP/MySQL : réaliser un sondage en ligne .
Titre_MySQL5
19/08/05
11:31
Page 1
MySQL 5 Guide de l'administrateur et du développeur
Michael
© Groupe Eyrolles, 2005 pour l’édition française, ISBN : 2-212-11633-0
Kofler
Table des matières Avant-propos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
XVII XIX
PARTIE I Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
CHAPITRE 1
Qu’est-ce que MySQL? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
Qu’est-ce qu’une base de données ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
Propriétés de MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
Limites de MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
Numéros de version MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
Licence de MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
CHAPITRE 2
Mise en place d’un environnement de test . . . . . . . . . . . . . . . . .
21
Windows ou Unix/Linux ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Environnement de développement . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21 22
Installation sous Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
Installer Apache 2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Installer MySQL 5.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Installer PHP 5.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23 24 28
Installation sous SUSE Linux 9.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
VI
MySQL 5 — Guide de l'administrateur et du développeur
Installer Apache 2 et PHP 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Installer MySQL 5.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30 33
Installation sous Red Hat Enterprise Linux 4 . . . . . . . . . . . . . . . . . . . . . . Installer Apache 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Installer MySQL 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Compiler manuellement PHP 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Configurer Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fichiers de configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Configurer PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Configurer MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35 35 37 37 40 40 46 49
CHAPITRE 3
Exemple d'application PHP/MySQL : réaliser un sondage en ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Aperçu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ébauche de base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Formulaire de sondage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Traiter le formulaire et afficher le résultat . . . . . . . . . . . . . . . . . . . . . . . . .
51 51 53 58 59
PARTIE II Outils d’administration et interfaces utilisateur . . . . . . . . . . . . . .
65
CHAPITRE 4
mysql, mysqladmin et mysqldump . . . . . . . . . . . . . . . . . . . . . . . . .
67
mysql . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Démarrer mysql . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Options de mysql . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Utiliser mysql interactivement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Astuces d’utilisation de mysql sous Unix/Linux . . . . . . . . . . . . . . . . . . . Astuces d’utilisation de mysql sous Windows . . . . . . . . . . . . . . . . . . . . . Traiter des fichiers SQL avec mysql . . . . . . . . . . . . . . . . . . . . . . . . . . . . mysqladmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . mysqldump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
68 68 69 71 73 75 77 78 79
CHAPITRE 5
MySQL Administrator et MySQL Query Browser . . . . . . . . . . .
81
Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
82
Table des matières
VII
Établir une connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
MySQL Administrator. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
84
Server Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Service Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Paramètres de démarrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . User Administration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Server Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Health . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Server Logs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Backup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Restore Backup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Replication Status . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
85 86 86 86 90 90 90 91 93 93 94
MySQL Query Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
95
CHAPITRE 6
phpMyAdmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
101
Installation et configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
102
Installer les fichiers phpMyAdmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Configurer phpMyAdmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Authentification config . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Authentification http et cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
102 103 103 107
Administrer des utilisateurs, sécuriser MySQL . . . . . . . . . . . . . . . . . . . . .
110
Sécuriser MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Configurer un nouvel utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
110 112
Créer et modifier des bases de données . . . . . . . . . . . . . . . . . . . . . . . . . . .
115
Créer une base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Créer une table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modifier une table existante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Créer un index sur plusieurs colonnes . . . . . . . . . . . . . . . . . . . . . . . . . . . Créer une contrainte de clé étrangère . . . . . . . . . . . . . . . . . . . . . . . . . . . Documenter la structure de la base de données . . . . . . . . . . . . . . . . . . . .
115 116 117 117 118 119
Afficher, ajouter et modifier des données . . . . . . . . . . . . . . . . . . . . . . . . .
120
Exécuter des commandes SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
121
Importer et exporter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
122
Administrer le serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
127
VIII
MySQL 5 — Guide de l'administrateur et du développeur
PARTIE III Principes de base
.............................................
129
Conception d’une base de données . . . . . . . . . . . . . . . . . . . . . . . .
131
Types de tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tables MyISAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tables InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tables HEAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tables temporaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Autres types de tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Les fichiers de tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Types de données MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Nombres entiers (xxxINT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Nombres à virgule flottante (FLOAT et DOUBLE) . . . . . . . . . . . . . . . . Nombres à virgule fixe (DECIMAL) . . . . . . . . . . . . . . . . . . . . . . . . . . . Date et heure (DATE, TIME, DATETIME, TIMESTAMP) . . . . . . . . . . Chaînes de caractères (CHAR, VARCHAR, xxxTEXT) . . . . . . . . . . . . . Données binaires (xxxBLOB et BIT) . . . . . . . . . . . . . . . . . . . . . . . . . . . Autres types de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Options et attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Concevoir une base de données - trucs et astuces . . . . . . . . . . . . . . . . . . .
132
CHAPITRE 7
132 133 135 136 136 137 138 138 140 140 141 144 148 149 150 151
Règles de normalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Première forme normale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Deuxième forme normale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Troisième forme normale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Théorie de la normalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
154 155 157 159
Gérer les hiérarchies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
160
Relations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
167
Clés primaires et clés étrangères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Clé primaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Clé étrangère . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Intégrité référentielle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Index simple, index unique et index primaire . . . . . . . . . . . . . . . . . . . . . Index en texte intégral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
170
152
170 172 173 177 177 179 180
Table des matières
IX
Optimisation de la requête et de l’index . . . . . . . . . . . . . . . . . . . . . . . . .
181
Vues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Base de données d’exemple mylibrary . . . . . . . . . . . . . . . . . . . . . . . . . . . Exceptions de la base de données d’exemple . . . . . . . . . . . . . . . . . . . . . .
183 186 189
CHAPITRE 8
Introduction à SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
193
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Requêtes simples (SELECT) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Trier les enregistrements (ORDER BY) . . . . . . . . . . . . . . . . . . . . . . . . . . Sélectionner des enregistrements (WHERE, HAVING) . . . . . . . . . . . . . . Effectuer une jointure entre plusieurs tables . . . . . . . . . . . . . . . . . . . . . . . Jointure sur deux tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Jointure sur trois tables ou plus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Combiner le résultat de plusieurs requêtes . . . . . . . . . . . . . . . . . . . . . . . . Requêtes groupées, fonctions d’agrégat . . . . . . . . . . . . . . . . . . . . . . . . . . Modifier les données (INSERT, UPDATE et DELETE) . . . . . . . . . . . . . Effectuer une sauvegarde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Insérer des enregistrements (INSERT) . . . . . . . . . . . . . . . . . . . . . . . . . . Modifier des enregistrements (UPDATE) . . . . . . . . . . . . . . . . . . . . . . . . Supprimer des enregistrements (DELETE) . . . . . . . . . . . . . . . . . . . . . . . Créer des bases de données, des tables et des index . . . . . . . . . . . . . . . . . Créer une base de données (CREATE DATABASE) . . . . . . . . . . . . . . . Créer une table (CREATE TABLE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . Créer un index (CREATE INDEX) . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modifier une table (ALTER TABLE) . . . . . . . . . . . . . . . . . . . . . . . . . . . Supprimer une base de données ou une table (DROP) . . . . . . . . . . . . . . . Modifications automatiques des colonnes . . . . . . . . . . . . . . . . . . . . . . . . Obtenir des métadonnées via des bases de données et des tables . . . . . . .
193 194 197 200 202 202 203 206 207 212 212 213 215 216 218 219 219 221 222 223 223 224
CHAPITRE 9
Formules SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
229
Chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fonctions de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modifier le jeu de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Paramétrer le jeu de caractères client . . . . . . . . . . . . . . . . . . . . . . . . . . . Comparaison de modèles avec LIKE . . . . . . . . . . . . . . . . . . . . . . . . . . .
229 229 231 232 233
X
MySQL 5 — Guide de l'administrateur et du développeur
Date et heure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
235
Syntaxe de date et d’heure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Calculs avec la date et l’heure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Timestamps Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Éviter les changements TIMESTAMP . . . . . . . . . . . . . . . . . . . . . . . . . . Fuseaux horaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
235 237 240 241 242
ENUM et SET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
245
Variables et conditions (IF, CASE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
246
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
247
Requêtes IF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Structure conditionnelle CASE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
249 249
Copier des données d’une table dans une autre . . . . . . . . . . . . . . . . . . . . .
250
Créer une nouvelle table lors de la copie . . . . . . . . . . . . . . . . . . . . . . . . . Copier dans des tables existantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
250 251
Tables croisées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
252
Sous-requêtes SELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
256
Variantes de syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
256 258
Assurer l’intégrité des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
260
Rechercher les doublons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
262
Modifier les n premiers/derniers enregistrements . . . . . . . . . . . . . . . . . . .
263
Sélectionner des enregistrements aléatoirement . . . . . . . . . . . . . . . . . . .
264
Recherche en texte intégral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
266
Principes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Recherche de livres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
267 270
Verrouillage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
272
Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
274
Les transactions, pour quoi faire ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Gérer des transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tester les transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Transactions et verrouillage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Niveau d’isolation des transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sécurisation contre les erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
274 276 278 279 281 283
Table des matières
XI
CHAPITRE 10
Gestion de l’accès et sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
285
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Communication entre le client et le serveur MySQL . . . . . . . . . . . . . . . . Gérer l’accès . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Notions de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sécuriser l’installation de MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Configurer une nouvelle base de données et de nouveaux utilisateurs . . . Accorder les privilèges de création de bases de données . . . . . . . . . . . . . Mot de passe root oublié . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Au cœur du système d’accès . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Privilèges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Base de données mysql . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Table user . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Colonne user.Host . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tables db et host . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tables tables_priv et columns_priv . . . . . . . . . . . . . . . . . . . . . . . . . . . . Table procs_priv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Paramétrer les droits d’accès plus facilement . . . . . . . . . . . . . . . . . . . . . . Modifier les droits d’accès avec GRANT et REVOKE . . . . . . . . . . . . . . Afficher les droits d’accès avec SHOW GRANTS . . . . . . . . . . . . . . . . . Changer le mot de passe avec mysqladmin . . . . . . . . . . . . . . . . . . . . . . . Authentification par mot de passe plus sûre depuis MySQL 4.1 . . . . . . . .
285
Problèmes lors de l’établissement de la connexion . . . . . . . . . . . . . . . . . .
285 287 292 292 294 296 297 298 298 302 304 308 312 314 316 316 316 318 319 320 322
CHAPITRE 11
Procédures stockées et triggers . . . . . . . . . . . . . . . . . . . . . . . . . . .
327
Les procédures stockées et les triggers, pour quoi faire ? . . . . . . . . . . . . .
328
Hello World! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Implémenter des procédures stockées . . . . . . . . . . . . . . . . . . . . . . . . . . . .
329
Administrer des procédures stockées. . . . . . . . . . . . . . . . . . . . . . . . . . . . . Créer, modifier et supprimer des procédures stockées . . . . . . . . . . . . . . . Sécurité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sauvegarder et restaurer les procédures stockées . . . . . . . . . . . . . . . . . . Syntaxe et éléments de langage des procédures stockées . . . . . . . . . . . . . Règles générales de syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Appeler des procédures stockées (CALL) . . . . . . . . . . . . . . . . . . . . . . . .
333 334 334 337 338 338 339 340
XII
MySQL 5 — Guide de l'administrateur et du développeur
Paramètres et valeurs de retour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bloc de commandes (BEGIN-END) . . . . . . . . . . . . . . . . . . . . . . . . . . . . Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Structures conditionnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Gestionnaire d’erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Curseur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
342 343 344 345 346 348 350
Exemples de procédures stockées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ajouter une catégorie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ajouter un titre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Obtenir les catégories parentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Obtenir des listes de catégories hiérarchisées . . . . . . . . . . . . . . . . . . . . . Trigger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
352 352 353 356 357 360
CHAPITRE 12
Administration et configuration du serveur . . . . . . . . . . . . . . . .
365
Premiers pas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Utiliser les outils d’administration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Paramétrer le mot de passe root . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fichier de configuration du serveur MySQL . . . . . . . . . . . . . . . . . . . . . . Redémarrer le serveur MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Configuration du serveur MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dossiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Paramètres de communication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Format de table par défaut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Chaîne de caractères et ordre de tri par défaut des nouvelles tables . . . . . Fuseaux horaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Langue des messages d’erreur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mode SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Effectuer une sauvegarde. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sauvegarder une base de données (mysqldump) . . . . . . . . . . . . . . . . . . . Restaurer une base de données (mysql) . . . . . . . . . . . . . . . . . . . . . . . . . . Faire migrer une base de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Importer et exporter des fichiers texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . Importer avec LOAD DATA INFILE . . . . . . . . . . . . . . . . . . . . . . . . . . . Importer avec mysqlimport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exporter avec SELECT ... INTO OUTFILE . . . . . . . . . . . . . . . . . . . . . . Exporter avec mysqldump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
365 366 367 367 368 369 369 369 370 371 371 372 373 374 376 379 381 384 386 389 390 392
Table des matières
XIII
Exporter avec mysql en mode batch . . . . . . . . . . . . . . . . . . . . . . . . . . . .
393
Journalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Journaliser les mises à jour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Erreurs, connexion et requêtes lentes . . . . . . . . . . . . . . . . . . . . . . . . . . . Administrer les fichiers de journalisation . . . . . . . . . . . . . . . . . . . . . . . . Réplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Configurer un système de réplication maître . . . . . . . . . . . . . . . . . . . . . . Configurer un système de réplication esclave . . . . . . . . . . . . . . . . . . . . . Mettre en œuvre un système de réplication avec LOAD DATA . . . . . . . Au cœur de la réplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Programmation client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Administrer des tables MyISAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
395
Administrer des tables InnoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Administrer des espaces de tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fichiers de journalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Conseils d’optimisation des performances . . . . . . . . . . . . . . . . . . . . . . . Régler le serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bien utiliser la mémoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Cache de requêtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
397 400 401 402 402 404 407 409 411 413 414 417 417 423 426 428 428 430
PARTIE IV Programmation PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
433
CHAPITRE 13
Initiation à PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
435
Fonctions mysql . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Établir la connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exécuter des commandes SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Évaluer les résultats SELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Éviter les erreurs ou les détecter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
436
Référence de syntaxe mysql . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Classes, méthodes et propriétés mysqli . . . . . . . . . . . . . . . . . . . . . . . . . . . Établir la connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exécuter des commandes SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
436 437 439 443 443 444 450 452 453
XIV
MySQL 5 — Guide de l'administrateur et du développeur
Évaluer les résultats SELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exécuter simultanément plusieurs commandes SQL . . . . . . . . . . . . . . . . Commandes préparées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
454 456 457 460
Référence de la syntaxe mysqli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Classe mysqli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Classe mysqli_result . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Classe mysqli_stmt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
461 461 463 464
CHAPITRE 14
Exemples et techniques de programmation PHP . . . . . . . . . . .
467
Déplacer les fonctions de base de données dans une classe . . . . . . . . . . . . Fichier distinct pour le mot de passe . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sécurité et confort avec la classe MyDb . . . . . . . . . . . . . . . . . . . . . . . . . Afficher les résultats SELECT dans un tableau . . . . . . . . . . . . . . . . . . . . .
467
Chaînes de caractères, date, heure, BLOB et NULL . . . . . . . . . . . . . . . . . Chaînes de caractères et BLOB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Date et heure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . NULL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Insérer des enregistrements liés entre eux . . . . . . . . . . . . . . . . . . . . . . . . . Traiter des entrées de formulaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Structure du code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Structure du formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Valider des données de formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Stocker des données de formulaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Supprimer un titre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Possibilités d’extension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Afficher les résultats de recherche par page . . . . . . . . . . . . . . . . . . . . . . . Structure du code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Recherche d’auteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Recherche de titres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Afficher les résultats de la recherche . . . . . . . . . . . . . . . . . . . . . . . . . . . Liens vers d’autres pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Gérer des données hiérarchisées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Structure du code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Afficher l’arborescence des catégories . . . . . . . . . . . . . . . . . . . . . . . . . . Insérer une sous-catégorie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Supprimer des catégories et des sous-catégories . . . . . . . . . . . . . . . . . . .
475
468 469 473 475 477 478 478 479 480 484 489 490 494 494 495 497 499 500 501 503 504 505 507 510 512
Table des matières
XV
Rechercher des catégories parentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rechercher les sous-catégories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
513 515
Optimiser les performances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Principes de base pour un code efficace . . . . . . . . . . . . . . . . . . . . . . . . . Statistiques et banc d’essai . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemple : créer une liste de catégories performante . . . . . . . . . . . . . . . .
515 516 517 519
Unicode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
523
Données binaires (BLOB) et images . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
528
Principes et techniques de programmation . . . . . . . . . . . . . . . . . . . . . . . Code du programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
528 532
Procédures stockées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
536
PARTIE V Référence
......................................................
539
CHAPITRE 15
Référence SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
541
Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
541
Opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
547
Variables et constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
551
Types de données MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
554
Aperçu thématique des commandes . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
557
Référence des commandes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
561
Référence des fonctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fonctions arithmétiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fonctions de comparaisons, requêtes et structures de contrôle . . . . . . . . . Transtypage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Traiter des chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Date et heure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fonctions d’agrégat (GROUP BY) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
610 610 611 612 612 617 623
Éléments de langage pour les procédures stockées et les triggers . . . . . . .
625
CHAPITRE 16
Outils et options MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
629
Aperçu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
629
XVI
MySQL 5 — Guide de l'administrateur et du développeur
Options et fichiers de configuration communs . . . . . . . . . . . . . . . . . . . . . mysqld (serveur) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . mysql (interpréteur de commandes SQL) . . . . . . . . . . . . . . . . . . . . . . . . . mysqladmin (administration) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . mysqldump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
630 636 648 651 652
ANNEXE
Les exemples du livre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
657
INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
659