MySQL 5

10 downloads 214 Views 192KB Size Report
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