Programmer avec MySQL
6e édition
SQL • Transactions • PHP • Java • Optimisations • XML.JSON
Christian Soutou
Éditions Eyrolles
Introduction
1
SQL, une norme, un succès
1
Modèle de données
2
Tables et données2
Les clés3
MySQL
3
Les produits4
Services Cloud4
Licences5
Les versions5
Architecture6
Moteurs de stockage7
Oracle devient propriétaire8
Notion de database [schéma]9
Notion d'hôte10
Aspects étudiés11
Mise en oeuvre de MySQL [sous Windows]
11
Installation11
Premiers pas
13
L'interface de commande13
Création d'un utilisateur14
Connexion au serveur14
Vérification de la version15
Options de base15
Batch16
Votre prompt, et vite !17
Commandes de base18
Partie 1 SQL de base19
1 Définition des données
21
Tables relationnelles
21
Création d'une table [Create Table]21
Délimiteurs22
Sensibilité à la casse23
Commentaires23
Premier exemple24
Contraintes25
Conventions recommandées26
Types des colonnes28
Structure d'une table [Describe]32
Restrictions32
Les collations et jeux de caractères33
Index
34
Arbres balancés34
Création d'un index [Create Index]35
Bilan36
Destruction d'un schéma
36
Suppression d'une table [Drop Table]37
Ordre des suppressions37
Exercices
38
2 Manipulation des données
41
Insertions d'enregistrements [Insert]41
Syntaxe41
Les doublons42
Renseigner toutes les colonnes42
Renseigner certaines colonnes43
Renseignez vos colonnes !43
Plusieurs enregistrements44
Ne pas respecter des contraintes44
Insertions multilignes45
Données binaires46
Énumérations46
Dates et heures49
Séquences
53
Utilisation en tant que clé primaire53
Modification d'une séquence54
Utilisation en tant que clé étrangère55
Modifications de colonnes
56
Syntaxe [Update]56
Modification d'une colonne57
Modification de plusieurs colonnes57
Modification de plusieurs enregistrements57
Ne pas respecter les contraintes58
Restrictions59
Dates et intervalles59
Remplacement d'un enregistrement
63
Suppressions d'enregistrements
63
Instruction Delete64
Instruction Truncate64
Intégrité référentielle
65
Syntaxe65
Cohérences assurées66
Contraintes côté « père »67
Contraintes côté « fils »67
Clés composites et nulles68
Cohérence du fils vers le père68
Cohérence du père vers le fils69
En résumé71
Insertions à partir d'un fichier
71
Exercices
74
3 Evolution d'un schéma
77
Renommer une table [Rename]
77
Modifications structurelles [alter table]
78
Ajout de colonnes78
Renommer des colonnes79
Modifier le type des colonnes79
Valeurs par défaut80
Supprimer des colonnes80
Énumérations81
Colonnes virtuelles82
Modifications comportementales
84
Ajout de contraintes84
Suppression de contraintes86
Désactivation des contraintes88
Réactivation des contraintes89
Contraintes différées92
Les collations et jeux de caractères93
Création d'une table par clonage93
Exercices
94
4 Interrogation des données
97
Généralités
97
Syntaxe [Select]98
Pseudotable98
Projection [éléments du Select]
99
Extraction de toutes les colonnes100
Extraction de certaines colonnes101
Alias101
Duplicatas102
Expressions simples102
Ordonnancement103
Concaténation104
Insertion multiligne104
Limitation du nombre de lignes105
Restriction [Where]
105
Opérateurs de comparaison106
Opérateurs logiques107
Opérateurs intégrés107
Alias109
Fonctions
109
Caractères109
Numériques113
Fonctions pour les bits114
Dates115
Fonctions pour les Null119
Conversions120
Comparaisons121
Énumérations122
Fonctions pour les UUID124
Autres fonctions127
Regroupements
127
Fonctions de groupe128
Étude du Group By et Having130
Opérateurs ensemblistes
132
Intersection133
Opérateurs Union et Union All134
Différence135
Produit cartésien136
Division137
Ordonner des résultats139
Bilan140
Jointures
141
Classification141
Jointure relationnelle142
Jointures SQL2142
Types de jointures142
Équijointure143
Autojointure145
Inéquijointure146
Jointures externes148
Jointures procédurales150
Tables dérivées (et CTE)154
Sous-interrogations synchronisées156
Autres directives SQL2157
Récursivité avec les CTE162
Transformations de résultats167
Exercices
170
5 Contrôle des données
173
Gestion des utilisateurs
174
Classification174
Création d'un utilisateur [Create User]174
Modification d'un utilisateur176
Renommer un utilisateur [Rename User]176
Verrouillage d'un utilisateur177
Suppression d'un utilisateur [Drop User]177
Gestion des bases de données
178
Création d'une base [Create Database]178
Sélection d'une base de données [USE]178
Modification d'une base [Alter Database]179
Suppression d'une base [Drop Database]179
Création des espaces de stockage180
Privilèges
181
Niveaux de privilèges181
Tables de la base mysql182
Table mysql. user182
Attribution de privilèges [Grant]186
Table mysql. db190
Table mysql. host191
Table mysql. tables_priv191
Table mysql. columns_priv191
Table mysql .procs_priv192
Révocation de privilèges [Revoke]193
Attributions et révocations « sauvages »195
Rôles196
Accès distants
199
Connexion par l'interface de commande199
Table mysql. host200
Vues
201
Création d'une vue [Create View]202
Classification203
Vues monotables204
Vues complexes208
Autres utilisations de vues212
Transmission de droits215
Modification d'une vue [Alter View]216
Visualisation d'une vue [Show Create View]216
Suppression d'une vue [Drop View]216
Dictionnaire des données
217
Constitution217
Modèle graphique du dictionnaire des données218
Démarche à suivre219
Classification des vues221
Moteurs du serveur223
Bases de données du serveur223
Composition d'une base224
Détail de stockage d'une base224
Structure d'une table225
Les collations et jeux de caractères227
Recherche des contraintes d'une table228
Composition des contraintes d'une table229
Détails des contraintes référentielles229
Recherche du code source d'un sous-programme231
Paramètres des sous-programmes stockés232
Privilèges des utilisateurs d'une base de données232
Commande SHOW234
Exercices
236
Partie II Programmation procédurale239
6 Bases du langage de programmation
241
Généralités
241
Environnement client-serveur241
Avantages242
Structure d'un bloc242
Portée des objets243
Casse et lisibilité243
Identificateurs244
Commentaires244
Variables
244
Variables scalaires245
Affectations245
Restrictions245
Résolution de noms246
Opérateurs246
Variables de session247
Conventions recommandées248
Test des exemples
248
Structures de contrôle
249
Structures conditionnelles249
Structures répétitives251
Interactions avec la base
254
Extraire des données254
Manipuler des données256
Gestion des transactions
259
Début et fin d'une transaction259
Gestion des anomalies transactionnelles262
Transactions en lecture seule267
Le problème du verrou mortel [deadlock]268
Verrouillage manuel269
Contrôle des transactions270
Quel mode adopter ?271
Où placer les transactions ?271
Modes d'exécution SQL
272
Le contexte272
Programmation transactionnelle272
Les dates273
Les séquences275
Chaînes de caractères276
Les moteurs277
Portabilité278
Les combinaisons279
Exercices
281
7 Programmation avancée
283
Sous-programmes
283
Généralités283
Procédures cataloguées284
Fonctions cataloguées285
Structure d'un sous-programme285
Exemples286
Fonction n'interagissant pas avec la base288
Compilation289
Appel d'un sous-programme289
Récursivité291
Sous-programmes imbriqués292
Modification d'un sous-programme293
Destruction d'un sous-programme293
Restrictions294
Curseurs
294
Généralités294
Instructions295
Parcours d'un curseur296
Accès concurrents [For Update]297
Restrictions298
Erreurs [codes et messages]
298
Exceptions
299
Généralités300
Exceptions avec Exit301
Exceptions avec Continue305
Gestion des autres erreurs [Sqlexception]306
Même erreur sur différentes instructions308
Exceptions nommées311
Déroutements [Signal et Resignal]313
Déclencheurs
320
Généralités320
À quoi sert un déclencheur ?320
Mécanisme général321
Syntaxe322
Déclencheurs LMD [de lignes]323
Appel de sous-programmes329
Dictionnaire des données331
Programmation d'une contrainte de vérification332
Programmation dans un déclencheur334
Exceptions dans un déclencheur334
Tables mutantes337
Restrictions338
Suppression d'un déclencheur338
SQL dynamique
338
Syntaxe339
Exemples340
Restrictions341
Paramètres de retour344
Programmation d'événements
345
Le contexte345
Création d'une planification345
Exemple347
Dictionnaire des données349
Modification350
Restrictions actuelles351
Gestion de XML
351
Fonctions XML351
Gestion des erreurs358
Limitations359
Chargement XML [Load XML]361
Gestion de JSON
366
Mise en place de l'environnement Document Store366
Les documents JSON368
Les collections JSON369
Méthodes pour les documents JSON375
Fonctions SQL pour JSON379
Exercices
392
Partie III Langages et outils395
8 Utilisation avec Java
397
JDBC avec Connector/J
397
Classification des pilotes [drivers]398
Le paquetage java. sql399
Structure d'un programme399
Test de votre configuration400
Connexion à une base
401
Base Access402
Base MySQL403
Interface Connection403
États d'une connexion
404
Interfaces disponibles404
Méthodes génériques pour les paramètres404
États simples [interface Statement]405
Méthodes à utiliser406
Correspondances de types
406
Manipulations avec la base
408
Suppression de données408
Ajout d'enregistrements409
Modification d'enregistrements409
Extraction de données
409
Curseurs statiques410
Curseurs navigables411
Curseurs modifiables
415
Suppressions417
Modifications418
Insertions418
Gestion des séquences
419
Méthode getGeneratedKeys420
Curseur modifiable420
Interface ResultSetMetaData
421
Interface DatabaseMetaData
422
Instructions paramétrées [PreparedStatement]
424
Extraction de données [executeQuery]424
Mises à jour [executeUpdate]425
Instruction LDD [execute]425
Procédures cataloguées
426
Exemple427
Transactions
428
Points de validation429
Traitement des exceptions
430
Affichage des erreurs431
Traitement des erreurs431
Exercices
433
9 Utilisation avec PHP
435
Configuration adoptée
435
Logiciels436
Fichiers de configuration436
Test d'Apache et de PHP437
Test d'Apache, de PHP et de MySQL437
API de PHP pour MySQL
438
Connexion438
Interactions avec la base439
Extractions441
Instructions paramétrées444
Gestion des séquences446
Traitement des erreurs447
Procédures cataloguées448
Métadonnées450
Style d'écriture objet454
Exercices
455
10 Optimisations
459
Cadre général
459
Les acteurs459
Contexte et objectifs460
Causes possibles460
Présentation du jeu d'exemples461
L'optimiseur461
L'estimateur463
Les statistiques destinées à l'optimiseur
464
Collecte465
Visualisation des statistiques466
Quand mettre à jour les statistiques ?467
Outils de mesure de performances
468
MySQL Query Analyzer468
Visualisation des plans d'exécution470
Organisation des données
475
Les contraintes475
Indexation477
Jointures490
Index invisibles492
Configuration de l'optimiseur [les hints]494
Tables temporaires496
Partitionnement497
11 Nouveauté des versions 8
509
Fonctionnalités ajoutées
509
Définition des données509
Manipulation des données510
Contrôle des données512
Requêtes514
Fonctions SQL519
Fonctions pour JSON526
Optimisations537
Fonctionnalités obsolètes
540
Fonctionnalités supprimées
541
Annexe : bibliographie et webographie543
Index545