Vous êtes sur la page 1sur 37
MySQL - Mise en oeuvre, configuration, administration Frangois Gannaz ~ INP Grenoble Formation Continue Introduction aux bases de données et a MySQL Qu'est-ce qu'une base de données? Puseurs sane suivant le contents » Un jeu de données particulier x es données dune application web de blog (peut représanter des millons enregistrements) > Les fichiers qui contiennent ces données > Le systéme qui les gre Bx MySQL Eviter les bus Le logiciel qui gre ds données x: une application de gestion de bbhothéque ‘On parlera pour cela de client de base de données. Le monde des bases de données (SGBD) Les applications bureautiques “tout-en-un” > File Maler Pro > MS Access Les systames de bases de données > Souvent de stucture cient-serveur > Presque toujours de model relationnel > langage standard pour accts : SQL (Structured Query Language) » API dans des langages de programmation divers Les BaD Orientées Objet (done non relationeles) sont rare. Principaux SGBDR du marché SGBOR proprietaires Oracle » De? (IM) » SQL Server (M5) SGBOR libres > MySoL > PostsreSQL. SQLite (embarqué et non client serveur) > Fitebird (fork de Borland InterSass) MySQL c'est. une base de donnée retationnelle cre en 1995 mode client-serveur tune aplication Kegdre das le monde des SGBD <éxeloppée par une société susdeise (ABSoft) FRachetde par Sun Microsytems debut 2008, Le plus rpandu des SGBDR libres Particuiéreent utilisé pour le web (LAMP) > cifuote cous double feance hive (GPL) pour un usage interne ou ire > proprétaiepayart pour un usage eroorcare > Principles versions 41 stable depuis octobre 2008 5.0 stable depuis octabre 2005 5.1 stable depuis noverbre 2008 Caractéristiques de MySQL Avantages > Mul plats-formes : Linux, Windows, OSX, ete > Gratuit poor un usage libre ov non commercial Bonne documentation de référence (HTML POF) hetp://dev yoql.con/doc/refman/S.0/en/ > SGBD perforant > Plsiurs moteuts interes suivant ls besoins > Interface avec Ia plupare des langoges de programmaton ts Particllement conform au standard SQL2008, Quelquesfonctonnaltés absent ou tres files ‘rae le woe (OLAP) tesitmert ds IL onnece geographiques (CIS) breges idercheis) et ereura Installation Installation Windows - 1 Composants » MySQL Windows Serveur MySQL (mys) > Ghent conse: shal (mys) > Chants conse: witaies(mysacmi, myaldump...) > Instance Manager (obscte) > MySQL GUI Tools (optionnel) > MySQL Administer > MySQL Query Brower > MySQL Migration Tote “Migration dum SGBD Granger vers MySQL. > MySQL Workbench (aptionnel) Conception er diagrammes des bases MySQL Installation Windows - 2 Structure des répertoires C:\Program Files\mySOL\MySUL Server 8.0 > bin : es exécutabesbinaires data: les fichiers bases de données > docs » examples » include : en-ttes pou la programmation C > lib les bibiothéques dynamiques » configuration "ay.sns" dans c:\uindous (febier nommé ‘my ent sous Linux) Gestion des services Parle gestonnaire de services de Windows Installation WAMPServer Un pack de logics litres conigurés ensemble Apache: serveur Web > MySQL = serveur de Bate de données = PHP: langage de programmaton web > PHPMyAdmin Itertace ue de gestion de MySQL écte en Pap’ > SOUteManager > raalsé par Anaska(sté francais), sous lcence GPL v2.0 > concurrents : EasyPHP, »AMP, Parcourearborescence install: trouver les fichiers de configuration de Apache, MySQL. phpMyAdmin architecture client-serveur Réseau: utilisation du protocole IP une adeesse IP, ex. 192.168.1.100, un nom de machine, x. pe1O1-OLcuefainpgfr un port (protocol); 3806 par détaut pour MySQL Cas particulier: client-serveur en local localhost: 1P-=127.00.1 (universe) > utileaion des conaux noms (Windows NT...) > utilisation des sockets Unix Les interfaces utilisateur » Ligne de commande > Le cnsole” mys > eptions communes Atrcuser> pepassward> +b chote> -P > Les “lens lourds” graphiques > MySQL Adminitator = MYSQL Query Sroner > interface web » PhpMypdmin: incerface unite La documentation Le manuel de référence » netp://dev mysql con/doc/ multiples versions, multiples langues > mises & jour rguliéres attention 3 Is synchro des versions Formats En PDF: imprimable, > En format CHM (aide Windows) > en ligne de commande (terminal): HELP > Enligne : HTML > Commentaires utisteurs Modélisation d'une base de données Le modéle relationne! Les tables Une base de données (par ex. discarhaque) ext faite de tables. “Table Disques [Titre | Compositour | Date ‘Cantatas [ Bach 1S, | 2006 Sonates | Beethoven | 2005 Concerto | Dvorak 2000 CChague ligne est un enregistrement (ou tuple, ou mule). LLenom d'une colonae est dit champ (ou attibut) Les colonnes sont typées Conception d'une base de données Les données de I'exemple Pacita, Bach & Bison), Harmonia Mundi, 1986 Concerto, Drofa, Sony. 1980, Premiére étape (normalisation 0) Lister les donnes 8 stocker Les structrer en enités-attributs(tables-champs) avec une information par champ, Application a exemple ‘Comment orgaiser ces données? ise Numérique BOOLEAN, INT, DOUBLE [Disques] ma Tete VARCHAR(ale), TEXT pee ccmoatar2 Listes ENUM), SET) tie babe Date/Heure DATE, TIMESTAMP fee date de sortie Premiére forme normale Avant titre compositaurl camposteu2 label date Panta Bach Boxer Harmonia 196 Concerto _Dufak Sony 1980 Ragles de normalisation Une table pour chaque groupe de données associées, Pas de colonnes au contenu smilie, > Chaque enregstrement doit avoir une elé primaire (enttane unique) Application & exemple Disques “aire ——compostour tabs ——date 14 [PH] 1 Patha Bach Harmonia 3986 | tite 2 Petits Benoni Harmonia 1986 | compositeur 3__Conceto Owfak Sony 1980 abel date de sortie Deuxiéme forme normale Ragles de normalisation > Si plusieurs lignes ont des contenus smilies, a table doit fre découpée en sous tables, Ces tables doivent dre relies par des clés Strangaros ("éterence 4 une le primaire) Application a t'exemple [Omauee | carposieus] Devt deat ts edie | eampaar| ale Conposteurs label ‘id_disque [FK] —> Normalisation date de sortie wer Sods Deuxigme forme normale : application IL fout cider une table de relation ene les tables Disques et Compositeurs. [Ra_Disq_Comp] — [ Compositeurs — | idaieque — [id_compositeur ia compesitur om Un compositeur nest dfn! qu'une seule fis, mais peut étre mis cen relation ave plusieurs disque Troisiéme forme normale Regle de normalisation > Les colonnes qui ne sont pas intrinséquement lies la cl ximaire doivent tre dans une table séparée, Application a exemple La colonne Disques label contri la rege [ Disques) ‘eLdisque ile date de sort Le modele relationnel (On peut lier les tables par des relations, clasées en 3 types CChaque elé étrangére induit une telaion entre 2 tables Un Diagramme Entté Relation (ERD) est une aide préccuse. Exemple de la gestion d'une liste de CD Disques Labels) Masque] [Disa_Comp BET |—| tive egve om i tbel a [ane ‘Disques abel) | ae omposteurs TEBE] tte | + compost om ital om ‘ae Relations (1) Relation 1:1 ‘Chaque eément de la premice tale est é au plus un élément dea secondo, ct réciproquement. Cette ration est rare alle scinde une table sans normlistion ‘Chaque élément de Disques et it 3 au plus un alément de Labels. Et un élément de Labels peut conrespondee &phislours disques. > Disques a une eléétrangére sur la primaire de Labels Relations (2) TP - Disques Relation NM ‘Adapter le modtle de a base de données pour stocker des disque Chague slement de Disques et is 3 phasiours éléments de chacun décrit avec es informations Compositeurs. & réciproguement pee Cette ration a besoin d'une table de relation avec 2 és persis rangers. > commentated difaseur label Disa_Comp ‘Compositeurs > interes id_daque |] — [id_compositeur > composters idLeomposiear| | nom > gsnres “Tracer un ERD de a base Schéma final pour l'exemple Bonnes pratiques = aera Pierre ge eens elena fioge] iO Pape) meer Paris iy a des exceptions (par ex. pout la performance). a ead ieee > Prenre fe temps de bien concewor son mode aes es changements structures sur une base en production i peavent Ere clamiteux a > Evite en général ls nome de type objet, objet? \ Utiser une table die a > Tester sa base avec un jeu de données. = Sion ae oo Surtour si fa performance ext importante. Seams errr] | Sera > Utiser un schema de la baze (ERD). Conventions de nommage Pas de convention universel IW fout sen fer une et tenis Noms en ASCII (On évte ain les problames d'encodage ("8" en Inuit /ute8/-.) > Fixer une rg aur le singulier etl pure “Table user ou users? > Compesition des mots dans les noms Champ camelCase ou with underscores? > Attention aux majuscues! Sus Windows, le systime de fichiers est indiférent 3 la casse “> Les noms des bases ot des tables sont concemés, Cle primaire Déclnée dan la tablo avec lo mot réservé PRIMARY KEY CChague table devait en avoir une (recommand) ‘Au plus 1 PK pr table (obligation) Les valeurs sont forcément uniques Pk le plus compacte possible pour &tve performance == presque toujours numérique (INT) Atwibut AUTO_INCREMENT pour que MySQL numérote automatiquement les nouveaux enregistrements SELECT LIST_INSERT_10() ren Ia valeur wise pour la PK » peut éte construite 3 pate de 2 champs PRIARY KEY (colonnet, cotonne2) Cle étrangére et contraintes Cle étrangére Champ qui référence une clé primaire d'une autre table » Pas forcémant explicit dans la structure MyISAM Pas de délaration des clés étrangéres InooD® FOREIGN KEY (pareat_td) REFERENC parent sd) Contraintes ‘Avec InnoDB, les clés étrangéres sont décarés. Les modifications des données doivent conserve fa cohérence En cas dinsertion dune ce étrangére sans clé primaire ssociée ‘Cannot add or update a child row : a foreign Key constraint fails TP - Agence immobiliére (simplifie) Modélie ls situation suivante : on veut représenter nganisation un ensemble 'immeubles en appartaments et décrire les informations sur ls proprdtaies et les occupants une personne occupe un seul appartement > un appartement peut tre occupé par plusieurs pereonnes (Couples, ealocataies) > une personne peut posséde plusieurs appartements > un appartement peut appartenir plusieurs personnes (chacun aver quote-part) (Créer une base InnoDB adaptée et tracer son schema. Approche objet MySQL n'est pas un SGBD Orienté Objet. Mais on peut émuler des fonctonnalités 00 en tlatonne Comment remplacer les disques par une gestion de meélatheque? Modétier > lee attribute commune aux (disque, Hes, images) > les attribute ditincts Les types de données Extensions: SPATIAL, fa valeur NULL (champ vide, oi“, ni 0) Tout champ de type quekconque amet ou Interdit HULL, Gestion de la structure de données Au niveau global > CREATE DATABASE mabase ; > DROP DATABASE. nabase ‘Au niveau base de données » CREATE TABLE fournisseur ( Td INT NOT NULL 2uto_increment. om VARCHAR(255) NOT NULL ud) VARCHAR(255) DEFAULT NULL comment TEXT, PRIMARY KEY (ic) ) ENGINE=InnoDB CHARSET=utf8 > DROP TABLE matable ; RENAME TABLE matable TO Tatable ulation des données Requétes SQL Lire des données : SELECT SELECT renvoie une *table™: rsultaten lignes clones. Syntaxe simplifiée ‘SELECT expression FROM matable WHERE concition ; Une expression (et une condition) est composée de constantes : 314, ‘chine tribute: date, om fonctions : CONCAT (nom, prenom) Exempes SELECT + FROM commandos ; SELECT munconmande FROM cosnandes WHERE ‘date> 2006-01-01" 5 Compléments sur SELECT > ORDER BY : Trier les résultats LIMIT : Limiter le nombre de résultats » DISTINCT : Supprimer tout doubion dans les résultats SELECT DISTINCT nom FROM cliente Quelques fonctions opérateurs = < aI / + ete Ia comparason de tate est sans case et sans accents ((nterciassement par défaut) LIKE : chaines contenant un matif donné SELECT nom FROM cliente WHERE prenom LIKE’! Exercices Sur la base faesys 4 Trouver ls articles de plus de 50 eros. 2. Listr les noms des articles, tris par pric Les trer par Catégorie, pus par stock pour une méme catégorc 3. Quelle diffrence entre SELECT nom, idcategorie, description FROM categories et SELECT » FROM ceategories ? 4, Afficher toutes les commandes de 2006, Les 3 commandes les ls récentes 5. Que donne SELECT COUNT(+) FRIM articles? Quelle ditfrence avec SELECT COUT (articles.codearticle) FROM articl 6. Combien dates de squash 2 Jointures Le but: interoger plusieurs tables fa fos Example SELECT articleo.non FROM artécl JIM categories (WHERE catagerien non = "aquach” Variontes > SELECT a.nom FROM articles AS a JOIN categorise AS OW g.sdeategortove.ideategorie WHERE c.n0n LIKE *squash’ SELECT a.nom FROM articles a JOIN categories © USING Cideatogorie) WHERE c.non = ‘squash’ > Implcte: SELECT anon FROM articles a, categories ¢ WERE a.ideategorie = ¢-ideategorie AID c.noa = equaet” Jointures : exemple SELECT + FRON Joveurs SELECT * FROM Pays nom —[id_pays ie_pays [ pays Federer |L i Suse Nodal |2 2 Espagne Ferrer |2 a France SELECT ¢ FROM Pays JOIN Joueure USING (id_pays) pays | pays [nom T Suisse Federer 2 Espagne | Nadal 2 Espagne | Ferrer Exercices AL. Ques articles ont été commandés par Pierre Durand? 2. Combiend'atcles ont été expédiés& Pars? 3. Lister les clionts ayant commandé au moins deux fis eux ayant commands au moins toi artiles ifrents, 4 Alfcher tous ls clients avec leurs articles associés ‘Avec seulement leur artcele plus cher. Les jointures externes 2 types de jointures INNER JOIN — jointure standard Fesion de 2 tables sur une valeur commune Les lignes sons correspondance ne sont pas gardéos ‘OUTER JOIN = jointure exteme, notée avec LEFT ou RIGHT [Lume des dev tables est prontaie > toujours cite pour toutes ses valeurs Exemple : liste des clients n‘ayant jamais commandé SELECT non, prenom, nuncomnande FROM cliente LEFT JOIN comandes USING (idclient) WHERE nunconnande IS MULL; Utiistion feéquent = contrale de cohérence d'une base, nettoyage Travailler avec NULL ictp://da jeg) .con/doc/retaan/S.0/en/¥orking-esth-mul).emt » Source d'une valeur NULL. données : champs on repli > eeraines eeu 1/0 certainge fonctions OUTER JOIN, BOLLE. » Impact su COUNT (ct), mais pa sur COUNT(*) > Traitement :logique t-valude (TRUE, FALSE, UNKNOWN) compaaion = vat 13 (HOT) MUL, TSHULLCva) comparaizon: vali <> val2prend en compte NULL fb TEMULL(o1, wef) INSERT THTO clients SET nos="Sorel?, prenon=?Juliea? ‘Syntace commune avec UPDATE Si un champ 0's pas de valeur » sil est en AUTO_INCREMENT, il vaudra 1 de plus que le errier (compteur interne) > sino il prend la valevr par défaut (souvent NULL ou") INSERT... SELECT But ‘Aimenter une table 3 partir dune (ou plusieurs) autres TASERT INTD table (colt, ...)] SELECT Exemple est Noa : cadeau promotionnel pour tous les clients qui ont passé une commande en 2008, sous Is forme d'une commande Fctive gratuite, avec un cade unique reference CADDS, A. INSERT 1170 consandes(ideliont, date) SELECT WHERE, date>="2008' 2. INSERT INTO dotaiie(auncensande, munordro, codearticle, quantite, prix) SELECT comuncomeande, 1, "CADOB", 1, 0.00 FROM conandes. (© WHERE c.date~'2000-12-25° INSERT et contrainte d’unicité Contraintes d'unicité sur les enregistrements d'une table su la primaire (Forcément unique), ou sur un index d'unique ‘Trois facons de régler le probleme 1, INSERT TONORE THT vabie > conserve ancien eneiterent, oui le nouveau transfrme es eres (loqats) en avertssoment (non Boquants) 2. REPLACE INTO table (3 mémes syntaxas quINSERT) compte comme une (insert) ou deux operations (delete insert) 3. INGERT .., ON DUPLICATE KEY UPDATE cisexpr, = rempliceFINSERT par un UPDATE si nécessive compte comme une ou deux operations Mise & jour d'enregistrements : UPDATE Symtaxe : > UPDATE table SET colt=oxpri [, col2-oxpr2 ...) DDaERE ---] (ORDER BY ==} [LIMIT -.] Exemples : > UPDATE clients SUT codepostal~"S8000", ville-’Grenoble? VHERE (nea, prenen) (Sorel? , Julien’) Ajouter 2 unités aux articles dont le stock est 8 moins de 5 UPDATE articles SET stockratock+2 WHERE stock résultatscalaite: SELECT MAXGpris) FROM articles; Quel est ati le plus cher? SELECT nox, codearticle, prix FROM articles WHERE prise (SHLECT wul(pris) FHOM articies) ; résutatcolonne : SELECT prix FROM articles: Quels sont ls articles jamais achetés? SELECT * FROM articles WHERE codearticle NOT IN GGELECT codearticle FROM detasle) ; (rem. NOT IN > cs) > rdeultat table (abigateitemant dans un ais) Quel est le montant moyen des commandes? SELECT AVG(soatant) FROM (SELECT SUM(présequastite) 45 sontont FROM detsile GROUP BY auncoamande) t1 eu performant en MySQL. privilege les jintures (doc 3) SELECT ... UNION SELECT ... UNION (ALL | DISTINCT] SELECT Le premier SELECT impose les colonnes (titres et types) Options de nz0% DISTINCT &vite les lignes doublons{oar déaut) ALL lignes répetées Compati Ordre des lignes non garanti par 'opération UNION Tei possible sur Fensemble du résultat (SELECT @ FROM ti) UNION (SELECT » FROM £2) ORDER BY & LIMIT 10; (les paronthises sont alors obligatores) ité avec le tri Exemples (SELECT codearticie, prix FROM artictea) WNHON (SELECT codearticle, priz fron deteile) ORDER BY prix ASC; > ex, Trowver les diférences entre prix catalogue et commands Exercice : trouver l'article le plus cher (code, nom, prix) Pace plus grand nombre de méthodes diferentes! Réponses 4. SELECT non, codearticle, prix FROM articles ORDER BY prix DESC LIMIT 1 ; Inconéniont? 2, SET Quaxi=(SELECT MAX(prix) FROM articles) SELECT nom, codearticle, prix FAIM articles WHERE prix-teari | 3. SELECT nom, codearticle, prix FROM articles WHERE priz~(SELECT MAX(prix) FROM articles) ; 4 SELECT af.codsarticle, al-nom, at.prix FROM farticles a1 LEFT JOIN articles a2 OW (al.peix < a2.prix) WHERE a2.codearticle 18 NULL; 5, SELECT non, codearticte, prix FROM articles WHERE prix >> ALL(SELECT prix FROM articles) ; Travaux Pratiques : améliorer la base FacSys 1, Ajouter & chaque cient un champ datectestion 2. Linitialisr a ta date de sa premiere commande 3, Implémenter un parainage d'un client par un autre, Chaae année, envoyer des eadenux aux tos plus “gros” parains ‘Administration MySQL 44 Donner fs possible de classer un article dans plusieurs catégories Ne pas pede les attributions actuelle, 5. Organizer un suv des commandes avec historique, en 4 apes: commande rejue > sie > confectionnée — expidige, et une table opérateurs 6. Faire une we facture 7. Ajouter un prc achat et une table des fourisseus ‘Authentication Priviléges ~ premier contact Des comptes ad-hoc, indépandants de TOS : Un compte nest ran sans des attributions de riviliges, Pee ena » Le login administrateur: root . Pour changer le mot de passe rot (8 instalation du serveur), 2 possibités 1 SEY PASSUDHD OH rose = PASSWORD("caacret>') ‘SHOW TABLES ; SHOW PRIVILEGES ; DESCRIBE usor ; > Gestion des uisateurs > Créaon » Puls DESCRIBE avec les tables: db, host, table pi, CREATE USER uocrnaze [IDEYTIFIED BY '’) colume-priv > Suppression DROP USER wor En cas de modification direct dans la base mysql FLUSH PRIVILEGES ; pour recharger les pivilges. Privileges - GRANT et REVOKE GRANT Attribue des prvléges 3 un utlisateur (doc 12.5.1) REVOKE Enlive des privileges Les différents niveaux auxquels s'appliquent les priviléges > serveur (ou global) » base de données > table colonne Prvilige salon hte de provenance du client (nom ONS ou IP) Exemples > Tous les prvliges sur une base GRANT ALL OW aabase.+ 10 *paul'@”Y.cueta.te? ; Création du compte en méme temps qu'un privge global GGunT SELECT OW +,» TD *nowvesu@"" IDENTIFIED TP Comptes et privileges 1. Se connecter en rot, ctGer un compte local observateur avec emission sur SELECT mais pas de modifier. Verifier avec SHOW GRANTS FOR ... (doc 135.39) 2. Se connecter en tant qu‘observateur Lister sos prvlges. nyeqi “0 obsarvateur -p 3. Dans les bases mysql et fac5,listr las tables, regarder le contenu dune table, et tener un INSERT. 4, Ajouter toutes les permissions 3 observateur sur Ia base facsys Verifir les pevloges, pus tester, 5. Utiiser PhpMyAdmin pour supprimer les droits globaux de cobservateur. Tester. Quen déduire? 6, Tester GRANT ALL ON... TO... WITH AK CONECTIONS_PER_HOUR 2 MAK_QUERIES_PER HOUR 3 MAY_UPDATES _PER_HOUR 4; Priviléges ~ pour aller plus loin Permission sur des colonnes, GRANT Select(citre, 1d) OM mabase.1ivre TO ... Précisions sur Phdte user@host % storie, par exemple: hi'0% ses ino locahost Connexion par socket (sus Linux) -<1P290m> Connexion par TCP/IP ‘tention 8 a éslution de nom! La ral la pls spcifaue est choise si plusieurs correspondent SELECT USER(), CURRENT _USERC) ; ‘Verifier le typ de connexion avec atatue dans Ia cancole meal Supprimer la gestion des privileges > Recémarrer (temporairement) le serveur avec nyeqld ~-ekip-grant-tablee ~-ekip-networking Le serveur MySQL Demarrage et arrét du serveur, selon OS Linux sowent via /otc/sait d/ayeal Windows souvent un service, non via une interface dice Paris, manuelement : mysqld ou aysqla-nt (win) mysqladmin Interface ¢' administration en ligne de commands Exemple (ar dun server distant) yeqladzin -h anchine -u root -p shutdoxn Interface graphique officielle pour administration du serveur Bri si connexion cistante au serveur Configuration du serveur MySQL ‘Trois possbltés complémentalres pour changer un paramétre AL Dans le fichier de coniguatin, section [mysqld] Linux ay eat dans /ete/ (ou fete/aysai/) Windows ay.imi puis ay.cat dans C:\Windows 2. Enligne de commande, au lancement du serveur Exemple: nyoqld ~-key-buffer=16H 3. Dynamiquement, en cours d'exécution session SET SESSION vari= ou SET @tvae:= fobale SET GLOBAL var:= ov SET aglobal.var!= Priviage SUPER nécessir pour la modification Pour obtenr Is (longue) hate des parametres et des variables nysqld ~-verbose ~-nolp Variables ~ généralités > Noms aiphanuméigues Noms insensibles 8 la casse (depuis 5.0) » Porée > Ghtale = Sesion (pais hire d'un variable global) > Type Systm: otvar 2 Uttetew 2 var Sans price, MySQL suppose que la variable est du systime Defines parla commande SET SET evar = 1 Le fichier de configuration : my.cnf /my.ini Emplacement > sous Unie: /otc/ay cat sous Debian = /ete/ayean/ay cut Compe por un fichier personnel» -/myont > sous Windows: c:\ay.s01 ou TNSTALLDIR\ay 1a Organisation en sections clint: options passées 8 tous es clionts rmysald: options passées au serveur mysal : options spéciques 8 la console mysql rnysaldump : options spéciques au client de dump Syntaxe générale "ele = valeur". ou paras “cl, par exemple ey buffer = 10M og Variables systéme (5.15) > défines au lancement du serveur mysald > fichier de configuration ligne de commande, ex, ayaqld -key-buttor=16H > listen avec SHOW VARIABLES (LIKE *...°) > de type “statique Quelquas variables constants apis le démarrage de difirentes portées gloale 2 connect tineout 1 locale ou de session)" we autaccanit > ou les deve: ex default vook format wea warabl seson hate dels variable global Les fichiers de log ‘Quatre types diferent (5.2) > og (general query) : toutes les equtes rues par le serveur alert énomérment ke eve Dts ume Jog-bin : les requites modiint le contana ds bases 5 pln compact ae le rcere (ias), done moire et 5 haga avec le progranme aoarbiniog, b og-slow-quertes: ks reqottes loreies ust pure ebro otiage 5 novigal vc le programme ayoqldapslow > Log-error : es messgssdereur du serveur CChacue variable indique le nom di fichier 0 err le log Log_elev_queries = /var/log/ayaql/ayaql-elow.teg tong_quezy_tine = 1 Messages d’erreur de MySQL Exraurs Servaur (Annexe 8-3) ex ERROR 1193 (#Y000) op + un numéro deraur mel, ente 1000 et 147 tun cade SQLSTATE sr 5 carocttres, ANSI SQL © un mesage erreur » Erreur Client (Annexe B-4) un numéte, entre 200 2085 (ex: 2034) > Enreus sche (are) > un messaee de tye ERROR not fund (rma: 23) © erro entre Let 152 —> commande perror ‘Commandes SHOW ERRORS [LIMIT ...] et SHOW WARNINGS teat 7 TP ~ Configuration et variables 1. Use e paramétre Tanguage pour pase es messages Ferrers du serveur en francais 2. Quelle rence entre les 2 paramétres du serveur bind-addrese = 127.0.0.1 e skip-networking? Expéimenter 5. Sous Linu, utilise es paramétes user et password pour Patol user tes clients (comme a console mysql) sans Suthentifier 4 Inséeer une nouvelle categorie dans la hase facsys. Stocker le nouvel id (cl autoinerémentée) dans une variable MySQL. Utilser cette variable pour insérer un nouvel arte 5. Active le log sur les longus requtes Prodi plusieurs longus requétes avec la base INSEE. Par exemple, Iter ls 10 communes ayant con le pls (Je meins) de nassances cumulées, au le nomi de celles ayant eu 0 (1) naisance Tester alors mysaldumpsin. Import / Export de données - fichiers Export SELECT ... INTO OUTFILE Import LOND DATA INFILE Exemple : importation au format CSV LOAD DATA INFILE ‘donnsesc=v INTO TABLE TableDonnses CHARACTER SET utd FIELDS TERMINATED BY ‘’ optionally ENCLOSED BY "* IGNORE 1 LINES. sis par les interfaces comme PhoMy Admin, Sauvegardes Deux approches possibles > Sauvegarde binaire > yeaihotcopy pour MySAM + rapide = pat compatible (matériel, mateur SQL) attention aux modifications en cours > Sauvegarde textulle (SQL) > myeqieunp 1 compatibie “+ coherence garantie “lent TP ~ Sauvegardes Ustlser myaqldunp pour sawegarder en SQL la base facsys. Charger cette sauvegarde dans une base facsys_copy. saver option ~-xal. pour mysalduap, skip-extended-insert Faire une saunegarde en 2 parties : schema et données 6. Avec PhpMyAdmin, copier Ia base facsys. Pacer ls tables en InnoDB, pus déclarer les clés érangéres (Gn index est adcessire) Sauvegatder, vider et restawrer dans une nouvelle base Trouser les bors eéglages de PhpMyAdmin pour éviter dave Surveillance des processus Liste des processus ‘SHOW (FULL) PROCESSLIST; > FULL ~ colonne info comple (tronquée 3 100 sinon) » environ 30 commands, dont seep, quer execute > env. 60 tate dexécution, dont sending data, lacked. » privildge PROCESS nécestare pour wor les autres clients Interruption d'un processus KELL (CONNECTION | QUERY] 4a; » QUERY — n'nterompre que la requéte » CONNECTION = couper ausi la connexion (par défaut) > priége SUPER nécessive pour tur les autres ents Equivalent en ligne de commande avec ayogladain nyaqiednin proceseliet et aysqladtin Ki11 FLUSH et RESET FLUSH HOSTS : vide le cache des hates (chgt IP) FLUSH LOGS ferme et rouve tous ls Fichiers de logs FLUSH PRIVILEGES : reli es piviléges dans la base mysel LUSH UERY CACHE : optimise le cache des requétes FLUSH STATUS :efface le variables de connexion (stesion) FLUSH TABLES [...]: vide le cache des tables, FLUSH TABLES ITH READ LOCK = idem + verrou en lectore FLUSH. USER. AESOURCES :remet 8 zéro les quotas utisateurs > RESET QUERY CACHE vide le cache des requites > nyeqladnin flush... :équivalent pari! en ligne de commande Replication Principe ‘Synchroniserpluscus serveurs MySQL Fonctionnement Modle maitee/esclave > Les bass sont en lecture/éeritue sur le serveurmaitee » Les serveurs-esclaes sont des copes en lecture seule La réplcation sur les enclaves s fie par es logs binaites Intérat Sécurié Avec un maitre en intranet et des ezclaves publics Fable Esclaves remplacable, et sauvegardent le mattre Performance Posibiité de répartr les requétes SQL sur phsiours eccaves Pour aller plus loin... Vues, tables temporaires, jeux de caractéres, moteurs de stockage, InnoDB Vues ~ Généralités Concept ‘Vue = requéte SELECT stockée, présentée comme une table (table éynamiaue) Exemple CREATE VIEW ClientsBref AS SELECT prenom, nom, ielen, vile FROM clients SELECT + FROM ClentsBret Commandes SQL > CREATE [OR REPLACE] VIEV vue AS > ALTER VIEW » ROP VIEW SHOU FULL TABLES (WHERE Table_typo="VIEW") SHOW CREATE VIEW Vues ~ Pourquoi faire? Cas d'utilisation > Limiter Vaccés aux données sensbles Ex. permettre de voir que la synthase et non le dail > Facliter Ia consultation des données usulls Ex: déncrmaliser les tables (jointures) Changer Ia structure d'une base en gardant la compatibilité x: Lancien format ese émulé par une we sur le nouveau > Simpliiar des écritures de raquiter x! Remplacer une sous-requte par une vue Inconvénients La performance d'une roquéte sur une vue est souvent exécrable "La vue ast plus un out d'adminisrateur que de developpeur Vues ~ Exemples 1. Définir une vue Vartces qui contiene le rom complet de la categorie de chaque aril. 2 Défiir une vue Veommandes qu augment l table ‘cammande avec le nom ou client, le nb de lignes <3 commande et un champ montant. 4. Ajouter & cette wu une colonne artces qui liste les articles de chaque commande sous Ia forme : “4 tubs, 2 bouts ai” 4, Créer une we Veientsbref contenant Iidentitiont es cients, leur vile et le mantant total de leurs commands, Donner 3 un utleateur*tagiaie” le cst de consulter cette ue uniquement. 5. Définir une vue Vaucces qui liste Ie articles les plus vendus (en unités) dans Forde décroissant. Le champ “vend vaudra 0 pour les articles jamais commands 6. Afficher e nombne de ventes ar etégare Vues ~ Paramétres avancés Privileges et sécurité Deux piviléges consacrées aux wes » CREATE VIEW ; nécessaire pour créer une we » SHOW VIEW : pour voir In définion Pune wue (avec SHOW (CREATE VIEW) Aerbués avec GRANT. Clause ALGORITHMS. MERGE we remplacée par sa definition dans requéted'appel TEMPTABLE tiation une table temporairo UNDEFINED MySQL. fait le meilleur choix (MERGE si posible) ‘Vues modifiables Modifier les données via une vue Certaines vues acceptent des UPDATE. DELETE, INSERT si > La modification ne concerns qu'une sale table > Chaque ligne de Ia vo se réfeo 3 une unique ligne de Nombreses autes restrictions complexes » cf doc 21.43 Updatable and Insetabe Views table Exemples » UPDATE Varticles SET noa=COVCAT(nom,? +?) WHERE categorie /aquash’ ; : Query OK. 3 rows affected UPDATE Veucces SET no=eCONCAT(non,? #*) HERE vvendus>=5 : Echec, GROUP BY incompatible! Appliquer le filtre de la vue aux modifications Sion ajoute WITH CHECK OPTION 3 une wue > UPDATE/INSERT doivent vérifir Ia clause WHERE de la vue Tables temporaires et tables en mémoire Tables temporaires (CREATE, TEMPORARY TABLE satable > syntax identique dune eration de table standard temporaire : existence imitée 3 la durée dela connexion > isokée : accessible uniquement dans cette connexion > privilége nécessute : CREATE TERPORARY TABLES Tables en mémoire CREATE TABLE matable (...) ENGINE MEMORY ; existence limite 8 ls durée du serveur > table partagéo entre tous les cants priilége nécessate : CREATE TABLES Internationalisation — concepts ‘Au commencement était ASCII La manipulation dy teste utilise 3 concepts > Lejew de caractéres utilisé (character set) [Excmples : Alphabet latin, Unicode Llencodage du texte (encoding) Exempls latin} (1S0-8859-1), UTF-8, UTF-16 > La rgle dinterclassement (collation) Determine ordre de tr, le mode de comparaison, ete Cangicisme collation es frequent (On emploie souvent abusivement charset pour encoding. Rappels i180 Gestion de texte mulilingue dans aplication 1n0n Traduction de interface wtiliateur Francisation. - des messages de MySQL > Changer la langue des messages dereur, etc Paramite du serveur: langwage-french ae recommandé! + des fonctions MySQL Dates on francais avec: SET 1e_tine_nanos = 'fe_FR Cf doc 5. Server locale Exemple SELECT DATE_FORNATQNOW(), PH Ho 18") 5 Jeux de caractéres & encodage 2 niveau de chobe > charset de stockage dans la table > charset du client MySQL convett 8 la voles ces 2 encodages sot difezens Quet encodage choi > 36 disponibles 2 principaux : atind et ut (recommandé) > Parfois, choisi asl ou binary pou Evite toute conversion Comment imposer le charset des requétes et résultats? > SET MANES 'uit9"; passe le client en UTF-8 SHOW VARIABLES LIKE ‘chart ; liste les paramétres de configuration (pour une gestion pli fine que WAMES) eFdoc 9.1.4, Jeux de caractires et callations de connexion interclassement (collation) Role > “ord alphabétique®étendu pour comparaison, ti > classes de caratires équivalens,parex {6 8,8, & €, ..) Impact sur les opérateurs >, BETWEEN, LIKE. > les commandes GROUP BY, ORDER BY ‘On peut souvent change lcalement la cllaton, par exemple (OAOER SY non COLLATE. we#8,turkish.ci Pr ipes de fonctionnement > plusieurs colations par jeu de caractre, dont 1 par défaut > nom de type charset_cllation_var (ex. : ut&_general_c) avec var € {6,65 bin } = {sins asse, avec, pas de classes} > possiblité dajouter au serveur une collation persoanalisée En pratique et en résumé » Ala création de a base, Fixer charset et collation par faut des tables (et éventullement dela base) CREATE TABLE th.) CGURACTER SET utf9 COLLATE ut46_general ct Suivane ls cas, adapta des valeurs diferentes pour certains champs (mots de pase, identifiants textual...) CREATE TABLE 21°C of VARCWAR(G) CHARACTER SET aeeit COLLATE ascii tin » A chaque connexion du client, déclarer encodage souhaté SET AMES "Tatint ; Prfos API le permet directement, sans SQL > Sion uilse DATE_FORIATO et consort, les précéder dun SET le_tine names = "4x FR; » Relea doc MySQL Internationalisation — TP 1, Tester SHOW CHARACTER SET et SHOW COLLATION, 2. Dans une console mysql. afcher actuelle Ia configuration du charset cent, 3. Permuter son encodage client (tint — ut) Tester un SELECT, un TYSERT, ct a fonction UPPER, Visualiser le esultat de insertion dane PhpMyAdmia, 5. Reprendre I'ncodage corect du clint. Cotger Venregistrement mal encodé grce& UPDATE et au fonctions BINARY ot CONVERT( 64g” USING 178) 6. Comment ister les clients venant dela ville ‘Nimes’ (pas “aime” ou ‘Nime’) > Verrous - généralités ‘non-table ([AS) alias] lock-type [, non-table [{AS] alias] Lock-type] (Aock-type: READ | (LOW PRIORITY] WRITE ) > Prirté: WRITE > LOCAL > LOW_PRIORITY WRITE » READ - empécheIériture; tout le monde peut lite > WRITE : empiche tous ls autres accés » Notes > doit porter sur tous le tables wits, mame multiples prviége LOCK TABLE nécensve en compliment ds SELECT > Spplque ass sures ves 1 pan de sna aur ume table texiportice Verrous - les pitges > Déveroullges implies > ose dun nouveau verrou 5 abut detranection > perte de conneron cen - serveur Attention aux interactions verou - transactions » FLUSH TABLES WITH READ LOOK :vorrou global > neces le wile RELOAD Les moteurs de stockage MyISAM le moteur par défaut, origine ABSoft tris rapide pour des requétes et des tables simples fab emprinte save IngoDB moteur “sophistiqu” : intégrité, transactions > délopé pr lmeBASE,eachetée par Oracle > moteur pus complexe Memory tout le stockage en RAM: perdu 3 art serveur Archive eva pour Ia journlisation “INSERT et SELECT seulement “Merge fusion virtuelle de plusieurs tables MylSAM Maria (dés.) successeurprévu pour MyISAM Falcon (46s) successeur préwus pour InnoDB. Particularités de MylSAM > limitations: ni clés trangéres, ni transactions > cache mémoire dee index seulement > index non plagant (B-Teee) » szockage disque en 3 fichier par table: frm (structure), MYD (données), .MYI (index) > tables et index trés compacts sur disque > indexation spécifique: FULLTEXT et SPATIAL Particularités d'InnoDB » décaration possible des clés éerangires » vérfeation de Vintégyité rotille support des transactions, avec 4 niveau dsoation > utlsation d'index plagant (clustering) sur la Gl primaire (Breet) » cache mémeire des données aust > stackage dsque en un fichier par table: fm > tables ot index plus volumineux sur disque Intégrité référentielle > Definition des clés étrangtres CREATE TABLE table | ALTER TABLE table ADD (oonsTRAINT syxb] FOREIGN KEY [i-fhey-id] (colt, « REFERENCES non-table (colt, ..) (OM DELETE [RESTRICT | CASCADE | SET NULL 11 (OW UPDATE (RESTAICT | CASCADE | SET NULL 1) RESTRICT rejette ls modfistion, avec on message dereur CASCADE répercue le moat srl table rferencée SET NULL eects Faction ee anNULLe lsc surf table rferengante Activation; SET FORETGH.KEY_CHECKS := 011; Transactions “Théorie : popriétés ACID pour les transactions > Atomicité > rife du tout ou sen” aur une sequence fp » Cohérence > respect des vgs de cohirence aps transaction, quel que Steve > Isolation > les données dans un état interme ne sont pas wisibles des > faaue In cobrence dea donne entre trsttions 1 nimise Tipe sles ptormancss > Durabilte > une fis teminée, ls ansaction ne peut re verse en couse Transactions - utilisation START TRANSACTION ‘CowaT —CAND (NO) CHAIN] [ONO] RELEASE) ROLLBACK [AND (NO) CHAIN] [(¥0] RELEASE] Ser AUTOCOMET = [0 | 1] » Options CHAIN enchsineimmidatement une ute transition RELEASE coupe ls comnecon Ian dela transaction SAVEPOLIT identifier ROLLBACK TD adentstier RELEASE SAVEPOINT ideatasser Transactions - verrous en lecture Transactions - isolation » Commande > Deux types de verous sur les lignes SET (GLOBAL | SESSION) TRANSACTION ISOLATION LEVEL nivess > verou prtge (5) permet tous de i a gn de poser o » verrou exusif (X) intert aux autres de poser (S) et (X) sur Iatgne > verous implicites posts en lecture SELECT ... LOCK IN SHARE HODE pose un vviou (5) Sur chaque ine ue ose un vero () su chaqu ligne ne > verou valid usa’ afin de ransaction Niveau d'solation, du pus fable au plus fort > READ UNCOMMITTED ects en lectre 34 tres transactions, ot @von sit > READ COMMITTED eckson lectre au transactions vais + REPEATABLE READ cls en lecture identique au premier SELECT de a > SERIALIZABLE comme pxécderment, mais tous les SELECT sont LOCK IN SHARE MODE Procédures stockées et fonctions Curseurs, triggers. Procédures stockées ~ Présentation Une procédure stockée est un ensemble de commands SQL qu fest stock sur le serveur. La PS peut étre ensuite appelée (avec des parametres). Caractéri appares en MySQL 50 > encore incomplet par rapport & d'autres SGBD > langage procédral dérivé de SQL, sous-ensemble de SQL/PsM > 2oypes de routine (PS) fonctions renvoient une valeur dans une expression, mais testitions su les opéations procédures ne s'utlisent pas dans les expressions, mais ont tne syntane plus riche Procédures stockées ~ Pourquoi? Pourquoi mettre du code dans une base de données? Pour » Formatage des données Code oxtérur plus simple, données envoyées plus adaptées > Gain de rapiciné ‘Moins d’ale-etour MySQL ~ langage extérieur (PHP. et.) Abetraction dela structure SQL > API sur les donnes en cas de clients mult-angagee Contre > Incohérence de mélangor code ot données > Pani de mosifer (et débosuer le code des PS » Pauvreé du langage > Incompatbilité avec autres SGD Code extere (PHP...) moins autonome, cific 3 suite Procédures ~ Exemples rmyacl> CREATE PROCEDURE late_cents() SELECT stent, nom, prec FROM clients rmysel> CALL Htc) (CREATE PROCEDURE coda (IN idbonciont CHAR(6)) COMMENT "sjoute au chent une commande gratuite pour 1 CADOS BEGIN DDECLARE now_numcommande INT DEFAULT 0: DECLARE nbclnts INT DEFAULT 0; SELECT COUNT(:) INTO nbcsents FROM clents WHERE idtenitboncin TF nbctents —1 THEN INSERT INTO commande (ilent, date) VALUES (iboncnt, NOW) SET naw rumcommanre ~ LAST_INSERT 100), INSERT INTO details VALUES (ow_rumcommande, 0, ‘CADDD, 1, 0.0) SELECT ‘Of ELSE SELECT ‘Ereur END I END// Procédures stockées - syntaxe [CREATE PROCEDURE nomprocedure (IN param Type, OUT param? Type2, INOUT 63 Type3..] [ COMMENT ‘mon commentaire”) BEGIN . END > Les paramatres sont en entiée ou sortie (18/0UT/ HOUT) Por défaut, si non précis lo paramétro est on TH Les types des paramétres sont les types standards de MySQL > Les SELECT nom reviges cont fics » CALL nonprocedure(...) ; pou lutliser Code d'une procédure DECLARE aavarisble (DEFAULT valeur] Variable locale. par ex. DECLARE. ab INT DEFAULT 0; Affect une valeur une variable > SELECT ... INTO mavar FROM Asfecte des valeurs 3 des variables 3 partir cum SELECT SELECT nom, prenon INTO vari, var2 FROM clients LNT 1; > TF a0 THEN .. ELSEIF 452 THEN .. ELSE. END IF; > WHILE count © 20 D0 SET count = count + 1; ND WHILE ; Syntaxe des commentaires En plus du COMENT sur une procure, documenter le code > apris un "4", jusqu’ la fin dela ligne apris un *-- (sie tiet-espace), usqu’ la finde a ligne > /* syntaxe C */ éventualement mltigne » [variant syntaxe C+ CCommentaie en MySQL, pas dans les autres SGBD SQL SELECT * FROM articles /© WHERE prixciO */ Gestion des procédures Liste des infos sur touts es procédures actives » SHOW CREATE PROCEDURE maprocedure Aifiche le code d'une procédure > DROP PROCEDURE: maprocedure Supprime une procéire > ALTER PROCEDURE maprocedure Modi une procedure En pratique, on stocke sts procédures dans des fichiers toxte. ‘On les met dans MySQL avec DROP + CREATE. (On peut utiliser le Query Browser de AB-MySQL comme GUL Procédures — TP AL Définir une procédure cumul qui retourne le montant cumulé ET le nombre d'artices commandes 2. Définir une procédure mades qui afiche la valeur la plus fréquente dela colonne prix de a table articles. 3. Ajouter un parsmétre de sorte qu indique le nome de cas valeurs 4, Définir une procédure qui afihe la médiane une iste de valeurs (tlle que la maitié des éléments sot au- esau). Plusiurs méthodes sont possible Fonctions ~ Présentation Les fonctions interns 3 MySQL sont RUUUD(), UPPER), etc. Les fonctions utisateur sont siniaes Usiisées dans les expressions (et non avec CALL) > Renvoient une valeur scalaite, mais lafchent ren Pas de modifeation ds parametres » Sytaxe de déclaration tris proche des procédures Exemple rnyoql> OREATE FUNCTION abroge (texto VARCHAR(256)) [RETURNS VARCHAR(30) IRETURI CONCKT( LEFT(vexte,27), * snyaql> SELECT abrege ("Cette pas Longue 1); Fonctions - syntaxe CREATE FUNCTION ‘osfone ([parat typel, para? type2..1) RETURRS type LANGUAGE SQL | (NOT) DETERMINISTIC | {CONTAINS SOL | 0 SOL | {READS | MODIFIES} SOL DATAD (SQL SECURITY ( DEFINER | THVOKER > | cone “enaine” aver:} esr RETIAN BID (label) » SHOW FUNCTION STATUS. » SHOW CREATE FUNCTION nomfone: > variable sstime login_bin_trust_function creators Fonctions - exemples Fonctions simples » crite une fonction Majuscule qu prend une chaine, et retourne en minuscule, saut la premibre lee en majuscules » Aide de la précédente, Ecrire une fonction PreNom, qui rend dou chaines et affiche "Prénom Nom* bien ‘ypographis, Fonctions “requétes" > Ecrre une fonction MontantCumule qui retourne le montant total commands par un cient dela base fe3)s. » A partir du nom dun nouveau client, tourer un nouveau ‘detent unique (rappel: 3 premiers caractéres du nom, suivis <'un numéro, par ex. DUROOS), Contréle de flot - les tests IF et CASE IF (condition) THEN... ( HLSEIF (cond2) THE... 5 1 (SE eT uD IF wie vatourt THEN... 32x08 (mse 5 1 ED CASE case WHEN conastson! THEN... 51 38 (mse 2] ED CASE Ne pat confondre avec les fonctions IF() et CASE. Curseurs > Génaltés > Aatvist 8 intscur des “routine rockres, fonction » Passge 3. un parcours classique d'une liste de rsukats bowce sr le lignes, Chague curser en associé un SELECT » Commands » DECLARE mon-ciseur CURSOR FOR SELECT. (OPEN mon curesur > FETCH mon-cuseur INTO var, var, > CLOSE mon siseur Contréle de flot - les boucles (apel:} Looe BND LOOP [1abst) aber} REPEAT ITIL (condition) BID REPEAT (label) Uiabel:] WHILE (condition) DO ip WILE eben Les échappements, > LEAVE label: quite Is boucle ITERATE label: recommence Ia boucle Curseurs - exemple » Définir une procédure qui afiche la somme des montants des NN articles ls plus chers et la somme totale du stock conespondant > Définir une fonction aul afiche Ia médiane dune liste de valeurs Handlers - gestion d’erreur DECLARE handler-type HANDLER FOR n-condition! (, h-condition2) [instruction | BEGIN... END 1; ctype: CONTINUE | ELIT | wuDO condition: SQLSTATE valeur | sysql-code-erreur | SqLVARING | NOT FOUND | SQLEXCEPTYoH | non-condition » méthode MySQL pour interepter Is erreurs > souvent associé aux cursus (NOT FOUND), mal pas seulement > souvent Instruction positionne un boeken (SET fini :=1) Conditions définies pour le Handler DECLARE now-condstion CONDITION FOR valeur-condition valeur-conds tion: SOLSTATE valeur | ayegi-cede-orrour Fagon de définr un “alias” pour une ereur ou une famille erreurs Messages d’erreur de MySQL Erreur Serveur (Annexe B-3) ERROR 1193 (11000) = Usinown aysten variable tn cade SQLSTATE sr 5 crates, ANSI SQL tun message dereur > Erreurs Client (Annexe B-8) > un numer, entre 2000 2055 (ex: 2034) > Erreurs systéme (are) > un message de type ERROR not fund (emo 23) > emo entre 1 et 152 —> commande perro Curseurs et handlers - exemples > lmplémenter une fonction maximum avec plafond sur ls prix des aces: ne prend pas en compte les valeurs supériures fu pafond donné en paramere Déclencheurs (Triggers) Bat : déclencher une action complémentatelrs de la modification (Insert, Delete, Update) d'un envegitrement dans une table FOR EACH ROW instruction ; | FOR EACH ROW BEGIN... EXD ; ‘tmonent = BEFORE | AFTER ‘conodit! = INSERT | UPDATE | DELETE » Compliment : DROP TRIGGER (IF EXISTS) nom et SHOW TATOCERS > Valeurs: NEW champ (Insert, Updats) + modifiable OLD.champ (Delete, Update) —> lecture see Triggers - Exemples > Gestion d stock des articles lors de la commande (CREATE TRIGGER najatock AFTER INSERT OW factys.detaite OR EACH ROW UPDATE articles SET stock := stock ~ NEV.quantite WHERE codoarticlo=NEW.codearticle + > Fae un compteur des montans et des commandes du jour (variable session). Sion commande des balles de squash: § au miionum » Ex courant: jouralisation des actions critiques sur une table > ©: dnc une valeur par défaut dynamiaue pour une colomne. Ex 75 —> Pais, En résumé Déclarations dans un bloc BEGIN... END 1, Variables: DECLARE DEFAULT , 2. Conditions : DECLARE CONDITION FOR 43, Cursours : DECLARE HANDLER FOR Variables utilisateurs (doc 84) » 6 @var > locales = porte toujours imitée 3 la sesion (connexion) Alfectation > Affectaton dvece SET oa := 4, @b c= “Dupont; Ser ee s= LERTCeD, ea), » Affectation par requate SET opt c= (SELECT MIN(prsx) FROM arciclee) SELECT op2 := MEN(pein), @po := MAXGprin) FROM arviciee SELECT MIN(pebD, MAX(prix) LITO ep, ep PRON articles: obligate pour les routines Commandes préparées Contexte d'utilisation normal API pou es langage pws > ati dove (Connecter /3), NET 5 Sirouehes STP C mys (PHP) SQL pour mise au point /debogaze Syntaxe des commandes > PREPARE stme-name FROM preparable-stmt » EXECUTE stmtname [USING Ovar-name [, Ovar-name] .] > DROP PREPARE stmt-name Exemple PREPARE clentsNom FROM “SELECT nom, prenom, vill FROM cliants WHERE Nom >? * > SET @nomdeb = "E" » EXECUTE cientstlom USING @nomdeb: Commandes préparées - Usages Usages Optimisation: requéte 3 porametes, précompilée sur le » Méta-programmation: construction dune requéte en SQL Uilistion une chine quskconque pour err un PREPARE Optimisation des requétes et du serveur Optimisation cété serveur Matériel > RAM > Disques durs rapides Buffers ‘Adapter Ia tlle des buffers de MySQL. > koy_butor_size = 256M > read_bulfer_sze = IM > max_allowed_packet = 16M Cache ‘Augmeonta atalle des caches » query_cache_size~64M > query_cache_type=1 query_eache_limit=256K Les index : améliorer les performances Fonctionnement d'un SELECT ou JOIN SELECT a.nom, c.ncm FROM articles a JOIN categories ¢ USING (ideategorie) WHERE a.stocko2005 Sil ny a pas e'index, MySQL parcourt » toute la table articles pour trouver les stocks toute fa table categorie pour trouver les ideategrie Index Peimet a MySQL de trouver rapidement une valeut © Cle primaire > indax » Cle étrangire —+ index (presque toujours) > Contaiate dunce UNIQUE > index Les index > Generales > port sr ne os ptseursclonnes de table 5 poside un nom distinct (PRIMARY pour lac primar) » Les types dindex- pour Futiisteur Cl rinse: unique pour une table + contrainte dune INDEX simple = pour es recherches, UNIQUE INDEX = recherche + contrainte uniené FULLTEXT «index pen tots SPATIAL index geomdtrgue extension SPATIAL Les type dindex interne HAH = fonction de hachage (oar défaut en ISAM) Be Tie are equi (par dfaut en InneD8) Tree: index spatial FULLTEXT, Index - utilisation Désactivation temporaire pour insertion massive [ALTER TABLE table DISABLE KEYS; [ALTER TABLE table ENABLE KEYS: Utilisation courante: » utilisation automatique pour JOIN, ORDER... (cf EXPLAIN) > utilisation fore sur JOIN, ex SELECT + FROM ¢1 USE INDEX (colt, co12) > indication = USE | IGNORE | FORCE Cache d'index > CACHE INDEX » LOAD INDEX INTO CACHE Optimisation d'une requéte ~ principes Exécution d'une requéte SQL 1. Analyse et traduction analyse ot wrfeationsytaique > verfcation de aval enstences.) verfeaton des persons Dodi une liste operations 2. Optimisation > utile ediciones nde, tle des tables. > prod plan exéeution (rte) 3. Exdeution de arbre de a equa Plan d'exécution - principe > Données intermeédiies «pipelining vs matrialisation » pas de sockage > Opérations bloquantes > tas: ORDER BY > déscublonnage : DISTINCT > ceraines fonctions daggégation globes MIN), MAX(), SUM > parivonnerent: GROUP BY > Arbre dexéeution EXPLAIN - syntaxe EXPLAIN EXTENDED SELECT... ; SHOW VARRTNGS ne ‘applique qu’d SELECT —> reformuler les UPDATE, INSERT. > EXPLAIN: afiche une vue du plan d'axéeution > EXPLAIN EXTENDED : reconstuit un SQL canonigue > EXPLAIN SELECT + from articles WHERE prix >60.0 \e > limites et imprécisions & EXPLAIN EXPLAIN - colonnes EXPLAIN - colonnes id. select_type, table colome id 1,2, 3. € NULL, son unique olonnes EXPLAIN ‘a Te numéro de SELECT dans la requite > colome select_type select_type | tye de SELECT. simple ou comple SWPLE Te SELECT ne content sous eu@te ws UNTON table I table concernée 0 ais Pemace (eee ecards type le type dacs 3 cette table coil par MySQL SUBQUERY | fouerequite autre qu'apparaesant dans le FROM possie_Fajs | les clés sabes (8 premire wie) DERIVED | sousequéte apparaissant dans fe FROM fey tac choise par MySQL. pour opération UNION 2e parte (et suvantes) d'une UNION key_len | la longucur de el wilsée en octets LUNION RESULT | encapsule tous les SELECT d'une UNION. rt Ia coonnereirncée parle choise rows nombre de ignes parcourues (estimation) fee eee . Esa infos complementares, sion champs prvidonts norm (oy ala) de ale concen > derived: en cas de sous eae dans FROM, 5 anonx, ¥en eas UNION 1 Tarde des ges indie Torre du plan dexdetion EXPLAIN - colonne type arourt toutes es anes de BI (parcoure touts les ines dan Vode de index (Exa-tUsng inex) parcout tut inde Drcourt un interval index fsecés index direct - valeurs multiples possibles accésindoxé direct - au plus une valeur de retour remplacé par une constante dans Foptimiseur ‘ésoluiovmédiatement par ptimiseue Note ALL systématique pour les petites tables EXPLAIN - colonnes clés » colon possible_keys (infermatif) iste dteminde 3 la phase analyse pe ester inte apres optimiation > clone keys > souvent une cl de ate 1 parlotaucune ne convient —> NULL > prot une extnoue bn pee lite > calonne key_len longucur utiisge en octets sce muticonne, past ete infreure 2 total EXPLAIN - colonnes ref, rows, Extra » colonne ref reference des champs des lneserécidentes > cu des consantes > colonne coms > rome de anes (tine) 2 prcouie 1 rani au pon eurant du plan xeon 1 estimation depend cen statistiques su a table (fp in) 5 neh as LIMIT Guegu's 5.1) » colonne Extra Using index | utilise un Tndex couorant= evita 'accs 5 Ta table Using where | post-fitrage des lignes retournées Using temporary | utilisation d'une table temporate (t.) Using fiecort | tri ectane, en mémoire ou sur dque Métadonnées et statistiques utiles > SHOW TABLE STATUS LIKE °table? \@ que peut-on prévoir comme optimisation dela strucure de communes? Benchmark > Commande BENCHMARK > Limitée& une évaluaton é'expresion » Limitée 3 Mexécuton dela requéte par le serveur » Examples SET ainput = on nat de panae secret” SELECT BENCIOIARK(1000000, HD (Cinput)); SELECT BENCIDIARK(1000000, SHAL(@iaput)) ; SELECT BENCHMARK(10, (SELECT MAK(naice) FROM naiesances)) SELECT BENCIMARK(10, (SELECT Ov:=HAX(naiss) FROM naissances Profiling Recherche das étapes longues dans un processus Analyse a posterion Uulser Log-stov-quertes » Analyse en direct: commandes SQL SET agprofiting st: SHOW PROFILES ; SHOW PROFILE [ ALL 7 FOR QUERY... : types: BLOCK 10, CPU, MEMORY, PAGE FAULTS, SAPs parame: profiling history.eize (~15) INSERT. les clauses particulidres > Pririté: 8 wtilisor avec précaution LOW_PRIORITY :nsrtion reise 3 pls tard, quand pls ‘scum cel en lecture we sree ou; bloqut HIGH_PRIORITY eutrepas le LOW_PRIORITY din au DELAYED asin emis pls tad, quad le serveur aura le temps: non blaquart. Tous les INSERT DELAYED tampon sont groupes Bibliographie complémentaire [MySQL Reference Manual 5,0, AB Soft (plus complet en anghis) > Maitser MySQL 5, O'Relly France (2005), Darmallac et Rigawx MySQL Cookbook, 2nd Ed (2006). O'Reilly [MySQL Stored Procedure Programming (2006-03), O'Reilly High Performance MySQL, 2nd Ea. (2008-06), O'Reilly Expert MySQL 5, Apeess (2007-01) Informations utiles Pur garde le contact feancote.gannaztaslece.into Les documents utlizés sont disponibles en ligne etp://etlece snfo/dla/MysOL/ » Teansparents » Enoncés et corrections des exercices Licence Copyright (c) 2007-2009 Frangois Gannaz, Guilaume Allegre Permission vous est donne de copier, driver e/ou meine ce document sions termes de ls Licence GNU Fee Decimenttion License, Version 2.0 ou uereure public parla Fee Software Foundation: pos de section inaerabe: pas ets iralerable de premiera poge do couverture; texts inatrable de emre page ‘Auteurs Franeis Gunna, Guillaume Allg, SILECS »

Vous aimerez peut-être aussi