Académique Documents
Professionnel Documents
Culture Documents
MySQL - Mise en Oeuvre, Configuration, Administration. Introduction Aux Bases de Données Et À MySQL. Le Monde Des Bases de Données (SGBD) - PDF
MySQL - Mise en Oeuvre, Configuration, Administration. Introduction Aux Bases de Données Et À MySQL. Le Monde Des Bases de Données (SGBD) - PDF
.
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 GULProcé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
valeursHandlers - 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 paramereDé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 routinesCommandes 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=256KLes 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 equaPlan 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 dexdetionEXPLAIN - 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 »