CHEZ LE MÊME ÉDITEUR Documents...ÉDITIONS EYROLLES 61, bd Saint-Germain 75240 Paris Cedex 05 Le...
Transcript of CHEZ LE MÊME ÉDITEUR Documents...ÉDITIONS EYROLLES 61, bd Saint-Germain 75240 Paris Cedex 05 Le...
-
CHEZ LE MÊME ÉDITEUR
Du même auteur
C. SOUTOU. – De UML à SQL.N°11098, 2002, 500 pages.
C. SOUTOU. – SQL pour Oracle – 2e édition.N°11697, 2005, 480 pages.
Autour de SQL et MySQL
P. J. PRATT – Initiation à SQL.N°9285, 2001, 328 pages.
A.G. TAYLOR. – SQL Web Training.N°25413, 2002, 428 pages.
R. LENTZNER. – 300 astuces pour SQL et MySQL.N°25359, 2001, 254 pages.
M. KOFLER. – MySQL 5. Guide de lʼadministrateur et du développeur.N°11633, 2005, 672 pages.
J.-M. AQUILINA. – Aide-mémoire MySQL.N°25451, 2002, 384 pages.
J.-M. DEFRANCE. – PHP/MySQL avec Flash MX 2004.N°11468, 2005, 710 pages.
P. CHALÉAT, D. CHARNAY et J.-R. ROUET. – Les Cahiers du programmeur PHP/MySQL et JavaScript.N°11678, 2005, 212 pages.
J.-M. DEFRANCE. – PHP/MySQL avec Dreamweaver 2004 (best of).N°11709, 2005, 550 pages.
-
����������������
���������
��� ���������
��������������������������
-
ÉDITIONS EYROLLES61, bd Saint-Germain75240 Paris Cedex 05
www.editions-eyrolles.com
Le code de la propriété intellectuelle du 1er juillet 1992 interdit en effet expressément la photocopie à usage collectif sans autorisation des ayants droit. Or, cette pratique s’est généralisée notamment dans les établissements d’enseignement, provoquant une baisse brutale des achats de livres, au point que la possibilité même pour les auteurs de créer des œuvres nouvelles et de les faire éditer correctement est aujourd’hui menacée.En application de la loi du 11 mars 1957, il est interdit de reproduire intégralement ou partiellement le
présent ouvrage, sur quelque support que ce soit, sans autorisation de l’éditeur ou du Centre Français d’Exploitation du Droit de Copie, 20, rue des Grands-Augustins, 75006 Paris.© Groupe Eyrolles, 2006, ISBN : 2-212-11915-1
http://www.editions-eyrolles.com
-
Pour Aurélia, mon chat aux yeux si bleus, si verts, si gris.
Pour René et Lydie, Jean et Denise qui sont devenus mes parents.
4055_00a_Dedi Page V Jeudi, 2. mars 2006 2:12 14 > Apogee FrameMaker Noir
-
4055_00a_Dedi Page VI Jeudi, 2. mars 2006 2:12 14 > Apogee FrameMaker Noir
-
© Éditions Eyrolles
VII
Table des matières
Remerciements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XVII
Avant-propos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XIX
Guide de lecture
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXPremière partie : SQL de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXDeuxième partie : programmation procédurale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXTroisième partie : langages et outils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXAnnexe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XX
Typographie
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XXI
Contact avec l’auteur – Corrigés des exercices
. . . . . . . . . . . . . . . . . . . . . . . . . . . . XXII
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
SQL, une norme, un succès
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Modèle de données
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2Tables et données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2Les clés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
MySQL
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3Un peu d’histoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4Offre du moment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5Licences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6Et la concurrence ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6Notion de schéma (database) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6Notion d’hôte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7Aspects étudiés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
Mise en œuvre de MySQL (sous Windows)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9Désinstallation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10Reconfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
Premiers pas
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10L’interface de commande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10Création d’un utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11Connexion au serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12Vérification de la version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12Options de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13Batch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14Votre prompt, et vite ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14Commandes de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4055_00b_TDM.fm Page VII Jeudi, 2. mars 2006 2:12 14 > Apogee FrameMaker Noir
-
Apprendre SQL avec MySQL Table des matières
VIII
© Éditions Eyrolles
Partie I SQL de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1 Définition des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Tables relationnelles
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19Création d’une table (
CREATE TABLE
) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19Délimiteurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20Sensibilité à la casse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20Commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21Premier exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22Contraintes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23Conventions recommandées. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24Types des colonnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26Structure d’une table (
DESCRIBE
). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29Restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Index
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30Arbres balancés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31Création d’un index (
CREATE INDEX
) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32Bilan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Destruction d’un schéma
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33Suppression d’une table (
DROP TABLE
) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33Ordre des suppressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Exercices
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2 Manipulation des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Insertions d’enregistrements (
INSERT
)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37Renseigner toutes les colonnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38Renseigner certaines colonnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38Plusieurs enregistrements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39Ne pas respecter des contraintes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39Données binaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40Énumérations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40Dates et heures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
Séquences
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44Utilisation en tant que clé primaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44Modification d’une séquence. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45Utilisation en tant que clé étrangère . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Modifications de colonnes
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47Syntaxe (
UPDATE
) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47Modification d’une colonne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48Modification de plusieurs colonnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48Modification de plusieurs enregistrements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48Ne pas respecter les contraintes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
4055_00b_TDM.fm Page VIII Jeudi, 2. mars 2006 2:12 14 > Apogee FrameMaker Noir
-
© Éditions Eyrolles
IX
Table des matières Apprendre SQL avec MySQL
Restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50Dates et intervalles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Remplacement d’un enregistrement
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Suppressions d’enregistrements
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54Instruction
DELETE
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54Instruction
TRUNCATE
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Intégrité référentielle
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56Cohérences assurées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56Contraintes côté « père » . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57Contraintes côté « fils » . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58Clés composites et nulles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58Cohérence du fils vers le père. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59Cohérence du père vers le fils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60En résumé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Insertions à partir d’un fichier
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Exercices
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
3 Évolution d’un schéma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Renommer une table (
RENAME
)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Modifications structurelles (
ALTER TABLE
)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68Ajout de colonnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68Renommer des colonnes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69Modifier le type des colonnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69Valeurs par défaut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70Supprimer des colonnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Modifications comportementales
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71Ajout de contraintes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71Suppression de contraintes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73Désactivation des contraintes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75Réactivation des contraintes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77Contraintes différées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Exercices
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
4 Interrogation des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Généralités
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83Syntaxe (
SELECT
) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84Pseudotable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Projection (éléments du
SELECT
)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85Extraction de toutes les colonnes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86Extraction de certaines colonnes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86Alias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87Duplicatas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
4055_00b_TDM.fm Page IX Jeudi, 2. mars 2006 2:12 14 > Apogee FrameMaker Noir
-
Apprendre SQL avec MySQL Table des matières
X
© Éditions Eyrolles
Expressions et valeurs nulles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88Ordonnancement. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89Concaténation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89Insertion multiligne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90Limitation du nombre de lignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Restriction (
WHERE
)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91Opérateurs de comparaison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92Opérateurs logiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93Opérateurs intégrés. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93Alias. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Fonctions
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95Caractères. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95Numériques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99Fonction pour les bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100Dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105Comparaisons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106Énumérations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107Autres fonctions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Regroupements
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109Fonctions de groupe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110Étude du
GROUP BY
et
HAVING
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Opérateurs ensemblistes
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114Restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115Intersection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115Opérateurs
UNION
et
UNION ALL
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116Différence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117Ordonner les résultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118Produit cartésien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119Bilan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Jointures
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121Classification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121Jointure relationnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122Jointures SQL2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122Types de jointures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123Équijointure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123Autojointure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125Inéquijointure. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127Jointures externes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128Jointures procédurales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132Jointures mixtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136Sous-interrogations synchronisées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137Autres directives SQL2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
4055_00b_TDM.fm Page X Jeudi, 2. mars 2006 2:12 14 > Apogee FrameMaker Noir
-
© Éditions Eyrolles
XI
Table des matières Apprendre SQL avec MySQL
Division
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143Classification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143Division inexacte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144Division exacte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Résulats en HTML ou XML
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Écriture dans un fichier
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
Exercices
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
5 Contrôle des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Gestion des utilisateurs
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152Classification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152Création d’un utilisateur (
CREATE USER
) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152Modification d’un utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154Renommer un utilisateur (
RENAME USER
) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154Suppression d’un utilisateur (
DROP USER
) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Gestion des bases de données
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155Création d’une base (
CREATE DATABASE
) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156Sélection d’une base de données (
USE
) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157Modification d’une base (
ALTER DATABASE
) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158Suppression d’une base (
DROP DATABASE
) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Privilèges
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158Niveaux de privilèges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159Tables de la base
mysql
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159Table
mysql.user
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160Attribution de privilèges (
GRANT
) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163Table
mysql.db
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167Table
mysql.host
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167Table
mysql.tables_priv
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168Table
mysql.columns_priv
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168Table
mysql.procs_priv
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168Révocation de privilèges (
REVOKE
) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170Attributions et révocations « sauvages ». . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Accès distants
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172Connexion par l’interface de commande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173Table
mysql.host
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Vues
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175Création d’une vue (
CREATE VIEW
). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176Classification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177Vues monotables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177Vues complexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181Autres utilisations de vues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185Transmission de droits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188Modification d’une vue (
ALTER VIEW
) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
4055_00b_TDM.fm Page XI Jeudi, 2. mars 2006 2:12 14 > Apogee FrameMaker Noir
-
Apprendre SQL avec MySQL Table des matières
XII
© Éditions Eyrolles
Visualisation d’une vue (
SHOW CREATE VIEW
) . . . . . . . . . . . . . . . . . . . . . . . . . . 189Suppression d’une vue (
DROP VIEW
). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Dictionnaire des données
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190Constitution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190Modèle graphique du dictionnaire des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191Démarche à suivre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191Classification des vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193Bases de données du serveur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194Composition d’une base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195Détail de stockage d’une base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195Structure d’une table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196Recherche des contraintes d’une table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198Composition des contraintes d’une table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199Recherche du code source d’un sous-programme . . . . . . . . . . . . . . . . . . . . . . . . . . 200Privilèges des utilisateurs d’une base de données . . . . . . . . . . . . . . . . . . . . . . . . . . 201Commande
SHOW
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
Exercices
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Partie II Programmation procédurale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
6 Bases du langage de programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Environnement client-serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209Avantages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210Structure d’un bloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210Portée des objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211Casse et lisibilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211Identificateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212Commentaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212Variables scalaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213Affectations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213Restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213Résolution de noms. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214Opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214Variables de session . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215Conventions recommandées. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Test des exemples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216Structures de contrôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
Structures conditionnelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217Structures répétitives. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
Interactions avec la base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222Extraire des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223Manipuler des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
4055_00b_TDM.fm Page XII Jeudi, 2. mars 2006 2:12 14 > Apogee FrameMaker Noir
-
© Éditions Eyrolles XIII
Table des matières Apprendre SQL avec MySQL
Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227Caractéristiques. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227Début et fin d’une transaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228Mode de validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228Votre première transaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228Contrôle des transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229Transactions imbriquées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
7 Programmation avancée. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233Sous-programmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233Procédures cataloguées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234Fonctions cataloguées. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235Structure d’un sous-programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236Exemples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236Fonction n’interagissant pas avec la base. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239Appel d’un sous-programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239Récursivité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241Sous-programmes imbriqués . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242Modification d’un sous-programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243Destruction d’un sous-programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243Restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
Curseurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245Parcours d’un curseur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246Accès concurrents (FOR UPDATE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247Restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248Restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250Exceptions avec EXIT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250Exceptions avec CONTINUE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254Gestion des autres erreurs (SQLEXCEPTION) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255Même erreur sur différentes instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257Exceptions nommées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
Déclencheurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262À quoi sert un déclencheur ?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262Mécanisme général . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263Déclencheurs LMD (de lignes) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
4055_00b_TDM.fm Page XIII Jeudi, 2. mars 2006 2:12 14 > Apogee FrameMaker Noir
-
Apprendre SQL avec MySQL Table des matières
XIV © Éditions Eyrolles
Appel de sous-programmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271Dictionnaire des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272Programmation d’une contrainte de vérification . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273Invalidation dans le déclencheur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275Tables mutantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277Restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278Suppression d’un déclencheur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
SQL dynamique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279Exemples. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280Restrictions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Partie III Langages et outils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
8 Utilisation avec Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289JDBC avec Connector/J . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Classification des pilotes (drivers). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290Le paquetage java.sql . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291Structure d’un programme. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291Test de votre configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
Connexion à une base. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293Base Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294Base MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295Interface Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
États d’une connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296Interfaces disponibles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296Méthodes génériques pour les paramètres. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296États simples (interface Statement) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297Méthodes à utiliser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
Correspondances de types. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298Manipulations avec la base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
Suppression de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300Ajout d’enregistrements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301Modification d’enregistrements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
Extraction de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301Curseurs statiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302Curseurs navigables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
Curseurs modifiables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307Suppressions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309Modifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310Insertions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
4055_00b_TDM.fm Page XIV Jeudi, 2. mars 2006 2:12 14 > Apogee FrameMaker Noir
-
© Éditions Eyrolles XV
Table des matières Apprendre SQL avec MySQL
Gestion des séquences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311Méthode getGeneratedKeys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312Curseur modifiable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
Interface ResultSetMetaData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313Interface DatabaseMetaData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314Instructions paramétrées (PreparedStatement) . . . . . . . . . . . . . . . . . . . . . . . . 316
Extraction de données (executeQuery). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316Mises à jour (executeUpdate). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317Instruction LDD (execute) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
Procédures cataloguées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318Exemple. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
Transactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320Points de validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
Traitement des exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322Affichage des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323Traitement des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
9 Utilisation avec PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327Configuration adoptée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
Logiciels. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327Fichiers de configuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327Test d’Apache et de PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328Test d’Apache, de PHP et de MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
API de PHP pour MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329Connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330Interactions avec la base. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330Extractions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332Instructions paramétrées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335Gestion des séquences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337Traitement des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337Procédures cataloguées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339Métadonnées. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Exercices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
10 Outils graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349MySQL Administrator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
Connexion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349Connexion nommée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350Liste des accès utilisateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351Gestion des privilèges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351Caractéristiques système . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352Options scripts SQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353Composition d’une base . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
4055_00b_TDM.fm Page XV Jeudi, 2. mars 2006 2:12 14 > Apogee FrameMaker Noir
-
Apprendre SQL avec MySQL Table des matières
XVI © Éditions Eyrolles
Composition d’une table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355Composition des index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356Modification d’un schéma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356Restriction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
MySQL Query Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359Fenêtre principale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359Extraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360Modification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
phpMyAdmin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362Composition de la base. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363Structure d’une table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364Administrer une table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364Extractions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365Rechercher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366Exporter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367Utilisateurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368
TOAD for MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368Administration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369Instructions en ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370Développement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371Création d’objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371Recherche d’objets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373Exportations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
Navicat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374Création d’une table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375Définition d’une contrainte. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376Création d’une requête . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377Importation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378Gestion des utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
MySQL Manager. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379Création d’une table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380Création d’une requête . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382Procédures cataloguées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382Gestion des utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383Gestion des privilèges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
Bilan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
Annexe : bibliographie et webographie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
4055_00b_TDM.fm Page XVI Jeudi, 2. mars 2006 2:12 14 > Apogee FrameMaker Noir
-
© Éditions Eyrolles
XVII
Remerciements
Je n’ai que deux personnes à remercier. Il s’agit de deux jeunes informaticiens rencontrés auhasard d’un forum. Ils sont talentueux et désintéressés, ce qui devient tellement rare dans cemonde d’individualisme exacerbé. Le premier recherchait un emploi à la période de la rédac-tion, souhaitons qu’il trouve clavier à ses mains. Le second dirige la rubrique MySQL du siteDeveloppez.com.
Merci, Pierre Caboche, pour la lecture de la première moitié de l’ouvrage, pour tes remarquesque j’ai (presque) toutes prises en compte, pour les compléments en ligne à propos des opéra-teurs ensemblistes dans les requêtes.
Merci, Guillaume Lebur, pour tous tes commentaires de qualité et pour tes corrections àpropos de la programmation sous MySQL. Merci pour ton activité et tes tutoriels mis en lignesur le site de Developpez.com.
4055_00c_Lim Page XVII Jeudi, 2. mars 2006 2:13 14 > Apogee FrameMaker Noir
-
4055_00c_Lim Page XVIII Jeudi, 2. mars 2006 2:13 14 > Apogee FrameMaker Noir
-
© Éditions Eyrolles
XIX
Avant-propos
Nombre d’ouvrages traitent de SQL et de MySQL ; certains résultent d’une traduction hasar-deuse et sans vocation pédagogique, d’autres ressemblent à des Bottin téléphoniques ouproviennent de la traduction de la documentation officielle en moins bien. Les survivants nesont peut-être plus vraiment à jour.
Ce livre a été rédigé avec une volonté de concision et de progression dans sa démarche ; il estillustré par ailleurs de nombreux exemples et figures. Bien que la source principale d’informa-tions fût la documentation officielle de MySQL (http://dev.mysql.com/doc), l’ouvrage neconstitue pas un condensé de commandes SQL. Chaque notion importante est introduite parun exemple simple et que j’espère démonstratif. En fin de chaque chapitre des exercices vouspermettront de tester vos connaissances.
La documentation en ligne de MySQL (
MySQL 5 Reference Manual
) représente une dizainede mégaoctets au format HTML. Tous les concepts s’y trouvant ne pourraient pas être icidécemment expliqués, sauf peut-être si cet ouvrage ressemblait à un annuaire. J’ai tenté d’enextraire seulement les aspects fondamentaux sous la forme d’une synthèse.
Vous n’y trouverez donc pas des considérations à propos d’aspects avancés du langage ou duserveur comme l’optimisation de requêtes, la restauration d’une base, la réplication, la versiondu serveur à partir de laquelle telle ou telle fonction est apparue, etc.
Ce livre résulte de mon expérience de l’enseignement dans le domaine des bases de donnéesen premier, deuxième et troisième cycles universitaires dans des cursus d’informatique àvocation professionnelle (IUT, licences et masters professionnels).
Cet ouvrage s’adresse principalement aux novices désireux de découvrir SQL en program-mant sous MySQL
.
●
Les étudiants et enseignants trouveront des exemples pédagogiques pour chaque conceptabordé, ainsi que des exercices thématiques.
●
Les développeurs PHP ou Java découvriront des moyens de stocker leurs données.
4055_00c_Lim Page XIX Jeudi, 2. mars 2006 2:13 14 > Apogee FrameMaker Noir
http://dev.mysql.com/doc
-
Apprendre SQL avec MySQL
XX
© Éditions Eyrolles
Guide de lecture
Ce livre s’organise autour de trois parties distinctes mais complémentaires. La première inté-ressera le lecteur débutant en la matière, car elle concerne les instructions SQL et les notionsde base de MySQL. La deuxième partie décrit la programmation avec le langage procéduralde MySQL. La troisième partie attirera l’attention des programmeurs qui envisagent d’utiliserMySQL à l’aide d’outils natifs, ou tout en programmant avec des langages évolués ou via desinterfaces Web (PHP ou Java).
Première partie : SQL de base
Cette partie présente les différents aspects du langage SQL de MySQL, en étudiant en détailles instructions de base. À partir d’exemples, j’explique notamment comment déclarer, mani-puler, faire évoluer et interroger des tables avec leurs différentes caractéristiques et leurséléments associés (contraintes, index, vues, séquences). Nous étudions aussi SQL dans uncontexte multi-utilisateur (droits d’accès), et au niveau du dictionnaire de données.
Deuxième partie : programmation procédurale
Cette partie décrit les caractéristiques du langage procédural de MySQL. Le chapitre 6 traitedes éléments de base (structure d’un programme, variables, structures de contrôle, interactionsavec la base et transactions). Le chapitre 7 traite des sous-programmes, des curseurs, de lagestion des exceptions, des déclencheurs et de l’utilisation du SQL dynamique.
Troisième partie : langages et outils
Cette partie intéressera les programmeurs qui envisagent d’exploiter une base MySQL enutilisant un langage de programmation. Le chapitre 8 détaille l’API JDBC 3.0 qui permet demanipuler une base MySQL 5 par l’intermédiaire d’un programme Java. Le chapitre 9 décritles principales fonctions de l’API
mysqli
qui permet d’interfacer un programme PHP 5 avecune base MySQL 5.
Le chapitre 10 synthétise les fonctionnalités de plusieurs outils graphiques tels que
MySQLAdministrator
,
MySQL Query Browser
et
phpMyAdmin
. D’autres consoles graphiquesd’administration sont étudiées, à savoir
Toad
for MySQL
,
Navicat
et
EMS SQL Manager
.
Annexe
L’annexe contient une bibliographie et des adresses Web.
4055_00c_Lim Page XX Jeudi, 2. mars 2006 2:13 14 > Apogee FrameMaker Noir
-
© Éditions Eyrolles
XXI
Avant-propos
Typographie
La police
courrier
est utilisée pour souligner les instructions SQL, noms de types, tables,contraintes, etc. (ex :
SELECT nom FROM Pilote
).
Les majuscules sont employées pour les directives SQL, et les minuscules pour les autreséléments. Les noms des tables, index, vues, fonctions, procédures… sont précédés d’unemajuscule (exemple : la table
CompagnieAerienne
contient la colonne
nomComp
).
Les termes de MySQL (bien souvent traduits littéralement de l’anglais) sont notés en italique,exemple :
trigger
,
table
,
column
, etc.
Dans une instruction SQL, les symboles { } désignent une liste d’éléments, et le symbole « | »un choix (exemple
CREATE
{
TABLE
|
VIEW
}. Les symboles « [ » et « ] » précisent le carac-tère optionnel d’une directive au sein d’une commande (exemple :
CREATE[UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [USING index_type] ONtable_name (index_col_name,…)
).
Ce sigle introduit une définition, un concept ou une remarque importante. Il apparaît soit dansune partie théorique soit dans une partie technique pour souligner des instructions importantes
ou la marche à suivre avec SQL.
Ce sigle annonce soit une impossibilité de mise en œuvre d’un concept soit une mise en garde.Il est principalement utilisé dans la partie consacrée à SQL.
J’en profite pour faire passer le message suivant : si vous travaillez en version 4 de MySQL,certaines instructions décrites dans ce livre ne fonctionneront pas. Cet ouvrage n’est pas unguide de référence ! Vous trouverez sur le Web des ressources pour connaître la compatibilité
de telle ou telle fonction SQL.
Ce sigle indique que le code source est téléchargeable à partir du site des éditions Eyrolles(www.eyrolles.com). Cela est valable pour les exercices corrigés mais aussi pour tous les
exemples du livre.
Ce sigle signale une astuce ou un conseil personnel.
Web
4055_00c_Lim Page XXI Jeudi, 2. mars 2006 2:13 14 > Apogee FrameMaker Noir
http://www.eyrolles.com
-
Apprendre SQL avec MySQL
XXII
© Éditions Eyrolles
Contact avec l’auteur – Corrigés des exercices
Si vous avez des remarques à formuler sur le contenu de cet ouvrage, n’hésitez pas à m’écrireà l’adresse
. Ne me demandez pas de déboguer votre procédurecataloguée ou d’optimiser une de vos requêtes… Seules les remarques relatives à l’ouvragetrouveront une réponse.
Par ailleurs, un site d’accompagnement de l’ouvrage (
errata
, corrigés des exercices, sourcedes exemples et compléments) est en ligne et accessible via www.editions-eyrolles.com.
4055_00c_Lim Page XXII Jeudi, 2. mars 2006 2:13 14 > Apogee FrameMaker Noir
mailto:[email protected]://www.editions-eyrolles.com
-
© Éditions Eyrolles
1
Introduction
Dans cette introduction, nous présentons, tout d’abord, le cadre général dans lequel cetouvrage se positionne (SQL, le modèle de données et l’offre MySQL). Nous décrivons, pourfinir, la procédure d’installation de MySQL sous Windows et l’utilisation de l’interface decommande en ligne pour que vous puissiez programmer en SQL dès le chapitre 1.
SQL, une norme, un succès
C’est IBM,
à tout seigneur tout honneur
, qui, avec System-R, a implanté le modèle relationnelau travers du langage SEQUEL (
Stuctured English as QUEry Language
), rebaptisé par lasuite SQL (
Structured Query Language
).
La première norme (SQL1) date de 1987. Elle était le résultat de compromis entre construc-teurs, mais elle était fortement influencée par le dialecte d’IBM. SQL2 a été normalisée en1992. Elle définit quatre niveaux de conformité : le niveau d’entrée (
entry level
), les niveauxintermédiaires (
transitional
et
intermediate levels
) et le niveau supérieur (
full level
). Leslangages SQL des principaux éditeurs sont tous conformes au premier niveau et ont beaucoupde caractéristiques relevant des niveaux supérieurs. Depuis 1999, la norme est appelée SQL3.Elle comporte de nombreuses parties (concepts objets, entrepôts de données, séries temporel-les, accès à des sources non SQL, réplication des données, etc.).
Le succès que connaissent les éditeurs de SGBD relationnels a plusieurs origines et reposenotamment sur SQL :
●
Le langage est une norme depuis 1986, qui s’enrichit au fil du temps.
●
SQL peut s’interfacer avec des langages de troisième génération comme C ou Cobol, maisaussi avec des langages plus évolués comme C++, Java ou C#. Certains considèrent ainsique le langage SQL n’est pas assez complet (le dialogue entre la base et l’interface n’estpas direct), et la littérature parle de « défaut d’impédance » (
impedance mismatch
).
●
Les SGBD rendent indépendants programmes et données (la modification d’une structure dedonnées n’entraîne pas forcément une importante refonte des programmes d’application).
●
Ces systèmes sont bien adaptés aux grandes applications informatiques de gestion (archi-tectures type client-serveur et Internet) et ont acquis une maturité sur le plan de la fiabilitéet des performances.
●
Ils intègrent des outils de développement comme les précompilateurs, les générateurs decode, d’états, de formulaires.
4055_00d_Intro Page 1 Jeudi, 2. mars 2006 1:59 13 > Apogee FrameMaker Noir
-
Apprendre SQL avec MySQL
2
© Éditions Eyrolles
●
Ils offrent la possibilité de stocker des informations non structurées (comme le texte,l’image, etc.) dans des champs appelés LOB (
Large Object Binary
).
Nous étudierons les principales instructions SQL de MySQL qui sont classifiées dans letableau suivant :
Modèle de données
Le modèle de données relationnelles repose sur une théorie rigoureuse bien qu’adoptant desprincipes simples. La table relationnelle (
relational table
) est la structure de données de basequi contient des enregistrements appelés aussi « lignes » (
rows
). Une table est composée decolonnes (
columns
) qui décrivent les enregistrements.
Tables et données
Considérons la figure suivante qui présente deux tables relationnelles permettant de stockerdes compagnies, des pilotes et le fait qu’un pilote soit embauché par une compagnie :
Tableau 0-1 Classification des ordres SQL
Ordres SQL Aspect du langage
CREATE – ALTER – DROP - RENAME – TRUNCATE
Définition des données (LDD)
INSERT – UPDATE – DELETE - LOCK TABLE
Manipulation des données (LMD)
SELECT
Interrogation des données (LID)
GRANT – REVOKE – COMMIT – ROLLBACK – SAVEPOINT - SET TRANSACTION
Contrôle des données (LCD)
Figure 0-1
Deux tables
Compagnie
comp nrue rue ville nomComp
AF 10 Gambetta Paris Air FranceSING 7 Camparols Singapour Singapore AL
Pilote
brevet nom nbHVol compa
PL-1 Louise Ente 450 AF PL-2 Jules Ente 900 AF PL-3 Paul Soutou 1000 SING
4055_00d_Intro Page 2 Jeudi, 2. mars 2006 1:59 13 > Apogee FrameMaker Noir
-
© Éditions Eyrolles
3
Introduction
Les clés
La clé primaire (
primary key
) d’une table est l’ensemble minimal de colonnes qui permet
d’identifier de manière unique chaque enregistrement.
Dans la figure précédente, les colonnes « clés primaires » sont notées en gras. La colonne
comp
représente le code de la compagnie et la colonne
brevet
décrit le numéro du brevet.
Une clé est dite « candidate » (
candidate key
) si elle peut se substituer à la clé primaire à tout
instant. Une table peut contenir plusieurs clés candidates ou aucune.
Dans notre exemple, les colonnes
nomComp
et
nom
peuvent être des clés candidates si onsuppose qu’aucun homonyme n’est permis.
Une clé étrangère (
foreign key
) référence dans la majorité des cas une clé primaire d’une autretable (sinon une clé candidate sur laquelle un index unique aura été défini). Une clé étrangèreest composée d’une ou de plusieurs colonnes. Une table peut contenir plusieurs clés étrangè-
res ou aucune.
Dans notre exemple, la colonne
compa
(notée en italique dans la figure) est une clé étrangère,car elle permet de référencer un enregistrement unique de la table
Compagnie
via la cléprimaire
comp
.
Le modèle relationnel est ainsi fondamentalement basé sur les valeurs. Les associations entretables sont toujours binaires et assurées par les clés étrangères. Les théoriciens considèrentcelles-ci comme des pointeurs logiques. Les clés primaires et étrangères seront définies dansles tables en SQL à l’aide de contraintes.
MySQL
MySQL est à la fois le nom du SGBD et le nom de la société (qui se nomme en faitMySQL AB, décrite sur http://www.mysql.com) dont le siège se trouve en Suède à Uppsala –compter une cinquantaine de kilomètres au nord de Stockholm. Selon leurs dires, leur serveurde données, qui est écrit en C et C++, serait installé de façon opérationnelle sur plus de sixmillions de sites. D’un point de vue coût, l’utilisation du SGBD sur des projets importants(entre 250 000
€
et 500 000
€
) ferait économiser 90 % sur le prix des licences du serveur,60 % sur les ressources système, 70 % sur le prix du matériel, 50 % sur les tâches d’adminis-tration et de support.
4055_00d_Intro Page 3 Jeudi, 2. mars 2006 1:59 13 > Apogee FrameMaker Noir
http://www.mysql.com
-
Apprendre SQL avec MySQL
4
© Éditions Eyrolles
Par analogie avec les systèmes d’exploitation, depuis 1999, MySQL connaît le succès deLinux. Téléchargée près d’un million de fois en trois semaines (en octobre 2005), la version
production
de MySQL doit sa popularité du fait de son caractère
open source
, de ses fonction-nalités de plus en plus riches, de ses performances, de son ouverture à tous les principauxlangages du marché, de son fonctionnement sur les systèmes les plus courants (les distribu-tions classiques de Linux, Windows, Mac OS, BSD, Novell et les dérivés d’Unix) et de safacilité d’utilisation pour des applications Web de taille moyenne.
Un peu d’histoire
Le tableau suivant résume l’historique des fonctionnalités importantes du serveur de donnéesMySQL. Une version majeure comme 3.23 se décline au fil des mois en différentes sous-versions, en fonction des diverses phases de développement :
●
alpha
correspond à la phase active, de nouvelles fonctionnalités sont ajoutées.
●
bêta
correspond à l’implémentation des nouvelles fonctionnalités de la phase
alpha
, sansapport important de code.
●
gamma
correspond au terme
release candidate
(après résolution des bugs de la version
bêta
).
●
production
est l’étape suivante aussi appelée GA (
Generally Available
). Les bugs sontrésolus s’ils ne modifient pas le comportement général du serveur.
●
old
correspond à la précédente version de production (par rapport à la courante).
Ainsi, en septembre 2005, la version 4.1.14 était mise en production et en octobre 2005, laversion 5.0 l’était aussi.
Ce qui est planifié à moyen terme concerne un enrichissement général des commandes SQL,la prise en compte des types manquants de SQL2 et de ODBC3, la programmation des requê-tes hiérarchiques (interrogation de structures en arbres) en s’inspirant de ce qu’a fait Oracle enla matière (directive
CONNECT BY
dans un
SELECT
).
Tableau 0-2 Dates importantes pour MySQL
Année – versions Caractéristiques principales
1999 – 3.23.
x
Réplication – Recherches textuelles – Transactions et Intégrité référentielle tables InnoDB (2002 – 3.23.44)
2001 – 4.0.
x
Cache de requêtes – Sécurisation SSL – Sauvegarde à chaud
2003 – 4.1.
x
Support de Unicode – Données géographiques – SQL dynamique
2004 – 5.0.
x
Vues – Curseurs – Procédures cataloguées – Déclencheurs – Dictionnaire des données – Transactions distribuées (XA)
À venir – 5.1.
x
Jointure externe – Contraintes
CHECK
– Sauvegarde à chaud et Intégrité référentielle tables MyISAM
4055_00d_Intro Page 4 Jeudi, 2. mars 2006 1:59 13 > Apogee FrameMaker Noir
-
© Éditions Eyrolles
5
Introduction
Ce qui n’est pas encore planifié reste la prise en charge du stockage de données au formatXML et les extensions objets de SQL3 (principalement les types abstraits, les héritage et lesméthodes).
Les changements opérés sont présentés en détail et par version à l’adresse http://dev.mysql.com/doc/refman/
x.y
/en/news.html (
x.y
étant le numéro de version majeure, parexemple actuellement 5.1)
Offre du moment
La figure suivante (merci au passage à http://www.iconarchive.com) présente la majeurepartie des fonctionnalités de MySQL qui se positionnent au sein du serveur de données(SGBD).
Les API permettent d’intégrer SQL dans des programmes de différents langages. Le langageSQL sera utilisé par tous ceux (manuellement ou par un outil) travaillant sur la base dedonnées (administrateur, développeur, utilisateur). Le langage procédural de MySQL permetd’incorporer nativement tout ordre SQL dans un programme.
Concrètement, une fois téléchargé et installé, vous avez accès à un SGBD, un client en modetexte (interface de commande). Les pilotes ODBC, JDBC, API pour les langages C et C++, etles outils
MySQL Administrator
,
MySQL Query Browser
, et
MySQL Migration Toolkit
sont àtélécharger puis à installer séparément.
Figure 0-2
Offre MySQL
API : C, JDBC, ODBC, .NET, PHP, Python, Perl, Ruby, Microsoft VB
Pool de connexions Authentification – Réutilisation de processus – Cache – …
Utilitaires Sauvegarde Restauration Réplication Migrat ion Cluster …
SQL LDD – LMD LCD - Vues Procédures Déclencheurs …
Analyseur Requêtes Privilèges
Optimiseur Accès Statistiques
Cache Buffers
Moteurs de stockage Mémoire - Index
MyISAM InnoDB Archive Cluster Federated ...
Serveur MysQL
Système de fichiers NTFS – NFS – SAN - NAS
Fichiers et logs Données – index - …
4055_00d_Intro Page 5 Jeudi, 2. mars 2006 1:59 13 > Apogee FrameMaker Noir
http://dev.mysql.com/doc/refman/http://dev.mysql.com/doc/refman/http://www.iconarchive.com
-
Apprendre SQL avec MySQL
6
© Éditions Eyrolles
Licences
Deux types de licences sont proposés par MySQL : commerciale et GPL. Dans le cadre d’undéveloppement d’application entièrement sous licence GPL, MySQL est gratuit. Il en va demême s’il n’est pas copié, modifié, distribué ou employé pour une utilisation en combinaisonavec un serveur Web (si vous développez l’application Web vous-même).
Dans tous les autres cas, il est nécessaire d’obtenir une licence commerciale. Par exemple, sivous incluez un serveur MySQL ou des pilotes MySQL dans une application non
open source
.
Et la concurrence ?
Elle fait rage. Deux types de concurrents : ceux qui sont dans le domaine de l’
open source
etceux qui engrangent des dollars à tour de bras.
Dans la première catégorie, citons principalement Interbase 6 et Firebird de Borland,PostgreSQL et Berkeley DB.
Dans la seconde, on trouvera 4D, Filemaker, IBM (
DB2, UDB
), Informix, Microsoft (
SQLServer, Access
), Oracle et Sybase (
Adaptive Server, SQL Anywhere Studio
). Depuis peu, lesgrands éditeurs s’ouvrent à la distribution gratuite. Ces produits nécessitent de solides confi-gurations, ce que n’exigent pas les éditeurs de la première catégorie :
●
Fin 2004, Microsoft proposait
SQL Server 2005 Express Edition
qui est limité d’un seulCPU, 1 Go de mémoire et 4 Go de données.
●
Fin 2004, Sybase offrait
ASE Express Edition
. Plusieurs instances peuvent cohabiter surune machine tout en n’utilisant pas plus d’un processeur, moins de 2 Go de RAM et pasplus de 5 Go de données.
●
Oracle annonçait, en novembre 2005, une version gratuite avec
Oracle Database XE
(
Express Edition
). Version toutefois « limitée » à un processeur, moins de 1 Go de RAM,une seule instance par système et pas plus de 4 Go de données.
●
Peu de temps avant, IBM avait aussi annoncé une licence gratuite de
DB2 Express
. Pasplus de deux processeurs et moins de 4 Go de RAM.
Tout le monde est donc sur les rangs. La guerre des versions n’est donc pas finie. Bien malinqui pourra prédire qui gagnera sur ce terrain.
Notion de schéma (database)
MySQL appelle
database
un regroupement logique d’objets (tables, index, vues, déclen-cheurs, procédures cataloguées, etc.) pouvant être stockés à différents endroits de l’espacedisque. Je ferai donc souvent référence au terme « base de données » pour parler de cettenotion.
On peut aussi assimiler ce concept à la notion de schéma, pour ceux qui connaissent Oracle.Là où MySQL et d’autres SGBD diffèrent, c’est sur la notion d’utilisateur (
user
).
4055_00d_Intro Page 6 Jeudi, 2. mars 2006 1:59 13 > Apogee FrameMaker Noir
-
© Éditions Eyrolles
7
Introduction
●
Pour tous, un utilisateur sera associé à un mot de passe pour pouvoir se connecter et mani-puler des tables (s’il en a le droit, bien sûr).
●
Pour MySQL, il n’y a pas de notion d’appartenance d’un objet (table, index, etc.) à unutilisateur. Un objet appartient à son schéma (
database
). Ainsi, deux utilisateurs distincts(
Jules
et
Paul) se connectant sur la même base (database) ne pourront pas créer chacunune table de nom Compagnie. S’ils doivent le faire, ce sera dans deux bases différentes(bdjules et bdpaul).
● Pour Oracle ou d’autres SGBD, chaque objet appartient à un schéma (user). Ainsi, deuxutilisateurs distincts Jules et Paul se connectant à la base (qui est un ensemble de sché-mas) pourront créer chacun une table de nom Compagnie (la première sera référencéeJules.Compagnie, la seconde Paul.Compagnie).
La figure suivante illustre deux utilisateurs travaillant sur différentes bases par une interfacequi peut être la fenêtre de commande en ligne (dans la majeure partie des enseignements), ouun langage de programmation comme C, Java ou PHP (utilisation d’une API). Notez déjàl’existence de trois bases initiales (mysql, test et information_schema) que nousdétaillerons au chapitre 5.
Notion d’hôteMySQL dénomme host la machine hébergeant le SGBD. MySQL diffère aussi à ce niveau desautres SGBD, car il est possible de distinguer des accès d’un même utilisateur suivant qu’il seconnecte à partir d’une machine ou d’une autre. La notion d’identité est basée sur le couplenom d’utilisateur MySQL (user) côté serveur, machine cliente.
Identités
Ainsi l’utilisateur Paul, se connectant depuis la machine camparols, peut ne pas être lemême que celui se connectant depuis la machine gambetta. S’il s’agit du même, il faudra, auniveau du serveur, éventuellement composer un ensemble de prérogatives équivalent pour lesdeux accès (voir le chapitre 5). S’il s’agit de deux personnes différentes, il faudra distinguer
Figure 0-3 Notions de base et d’utilisateur MySQL
Interface
MySQL
Jules Paul
mysql test
information_schema
bdjules bdpaul
4055_00d_Intro Page 7 Jeudi, 2. mars 2006 1:59 13 > Apogee FrameMaker Noir
-
Apprendre SQL avec MySQL
8 © Éditions Eyrolles
les attributions des différents droits. La figure suivante illustre le fait que deux utilisateurspeuvent se connecter par deux accès différents. Trois identités seront donc à prévoir côtéserveur.
Nous verrons au chapitre 5 comment configurer le serveur et les clients. Nous étudierons auchapitre 9 des outils graphiques d’aide à l’administration.
Accès à MySQL
Une fois que vous aurez installé MySQL sur votre ordinateur, vous serez libre de choisirl’accès qui vous convient. Ce livre utilise essentiellement l’interface de commande en lignefournie avec le SGBD, mais aussi Java via JDBC, et le navigateur Web au travers de PHP.
Aspects étudiésNous n’étudierons pas tous les éléments d’une base, car certains sont assez spécifiques etsortent du cadre traditionnel de l’enseignement, même supérieur. Le tableau suivant indiquedans quel chapitre du livre les principaux éléments d’un schéma sont étudiés :
Figure 0-4 Notion d’hôte MySQL
brassens
Jules
Paul
mysql test
jules@gambetta
paul@camparols
...
camparols
gambetta
Paul paul@gambetta
TCP-IP
Tableau 0-3 Éléments d’une base MySQL
Éléments étudiés – Chapitre Aspects non étudiés
Déclencheurs (triggers) – 7Fonctions et procédures – 7Tables et index – 1Séquences – 2, 5Vues (views) et utilisateurs – 5
Clusters – Moteurs de stockage (storage engine) – Partitionnement – Données spatiales
4055_00d_Intro Page 8 Jeudi, 2. mars 2006 1:59 13 > Apogee FrameMaker Noir
-
© Éditions Eyrolles 9
Introduction
Mise en œuvre de MySQL (sous Windows)
Si tout se passe bien, comptez quelques minutes pour installer MySQL. Je vous conseilletoutefois de créer un point de restauration Windows pour pouvoir revenir à votre dernièrebonne configuration connue. Extraire l’archive téléchargée sur le site officiel de MySQL AB(http://dev.mysql.com/downloads/) dans un répertoire temporaire (exemple : C:\Temp), puisexécuter Setup.exe.
InstallationLe premier choix est donné pour le type d’installation : typique, complète et personnalisée –choisir typique dans un premier temps.
Le deuxième écran vous invite à vous enregistrer – ce n’est pas obligatoire, mais conseillétoutefois pour saluer l’énorme travail fait par ces jeunes informaticiens de génie (voilà, lapommade est passée).
La suite concerne la configuration du serveur de données (choisir la configuration détailléepour suivre les différentes étapes et mieux comprendre le paramétrage de votre serveur).
● L’assistant propose en premier lieu de déterminer le type de votre serveur (machine dedéveloppement, serveur ou machine dédiée). J’ai opté pour le premier choix.
● Choissisez ensuite le type de base de données que vous comptez exploiter (multifonction,mode transactionnel seulement ou jamais transactionnel). J’ai opté pour le premier choix.
● Déterminez ensuite le répertoire qui contiendra les données des bases InnoDB (c’est letype de tables que nous utiliserons dans cet ouvrage, car étant le seul, dans cette version, àprendre en charge les clés étrangères). J’ai opté pour le choix par défaut.
● Choissisez ensuite l’option qui convient à votre utilisation (en fonction du nombre deconnexions). J’ai opté pour le premier choix (vingt connexions maximum).
● Il est ensuite possible de modifier le port UDP d’écoute (par défaut 3306) et le modecomportemental du serveur par rapport à la syntaxe des instructions SQL. J’ai opté pour lepremier choix (mode strict).
● Attention à ne pas sélectionner un jeu de caractères japonais dans l’écran qui arrive. J’aiopté pour les choix par défaut (West European et latin1).
● L’écran suivant permet de déclarer MySQL comme un service Windows (qu’on pourraarrêter via le panneau de configuration plutôt qu’avec une belle commande en ligne, ou parun Ctrl-Alt-Suppr bien connu des bidouilleurs…). Penser aussi à inclure dans le path lechemin de l’exécutable mysql de manière à pouvoir lancer une connexion en ligne decommande. Il vous suffit de cocher la case appropriée.
● Saisissez un mot de passe pour root ; vous pouvez aussi créer un compte anonyme(connexion fantôme sans utilisateur ni mot de passe).
4055_00d_Intro Page 9 Jeudi, 2. mars 2006 1:59 13 > Apogee FrameMaker Noir
http://dev.mysql.com/downloads/
-
Apprendre SQL avec MySQL
10 © Éditions Eyrolles
Après avoir validé la demande d’exécution (bouton Execute), quelques secondes vonts’écouler avant qu’on vous invite à terminer l’installation.
Voilà, MySQL est installé. Si ce n’est pas le cas, la section suivante vous aidera sûrement.Dernière chose, si vous n’utilisez pas souvent MySQL, pensez à arrêter et à positionner surManuel le service (ce n’est pas pour l’espace qu’il occupe : 10 Mo en RAM).
Pour modifier une configuration existante, vous trouverez un assistant dans Démarrer/MySQL/…/MySQL Server Instance Wizard.
DésinstallationPour supprimer une configuration, vous trouverez un assistant dans Démarrer/Tous lesprogrammes/MySQL/…/MySQL Server Instance Wizard, choix Remove Instance.Cependant le répertoire installé par défaut dans Program Files reste sur le disque (compterune centaine de méga-octets). De même qu’en ce qui concerne les entrées dans le menu Démar-rer, je ne parle pas de la base de registres qui est inchangée…
Dans Panneau de configuration, Ajout/Suppression de programmes, supprimerMySQL Server. Il reste encore des choses dans la base de registres. Le répertoire MySQL sousProgram Files a diminué de taille, mais il est toujours présent. Une fois que tout est fait,redémarrez votre machine et reprenez l’installation initiale. Prudence si vous modifiez leschemins des répertoires des données entre plusieurs installations.
ReconfigurationEn relançant une installation, il vous est donné d’ajouter des composants (option Modify) sivous n’avez pas fait une installation complète au début. Vous avez aussi la possibilité de« réparer » (option Repair) une configuration existante.
Premiers pas
La procédure suivante va guider vos premiers pas pour travailler sous cette interface d’unemanière « professionnelle ». Il s’agit de stocker vos fichiers de commande qui pourront servirà différentes actions (créations de tables, de vues ou d’utilisateurs, insertions, modificationsou suppressions d’enregistrements, élaboration de requêtes, de procédures cataloguées, etc.).
L’interface de commandeL’interface de commande en ligne porte le nom du SGBD (mysql). Cette interface ressembleà une fenêtre DOS ou telnet et permet de dialoguer de la plus simple façon avec la base dedonnées. L’utilisation peut être interactive ou « batch ». Qua