31
Contexte Modélisation Installation Mise en oeuvre Requêtes SQL MySQL - Mise en oeuvre et développement Guillaume Allègre – INP Grenoble Formation Continue [email protected] MySQL - dével. Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Contexte Contexte Le monde des bases de données [email protected] MySQL - dével. Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Contexte Le monde des bases de données I Les applications bureautiques “tout-en-un” I File Maker Pro I MS Access I ... I Les applications clients-serveurs (SGBD) I modèle relationnel ultra-majoritaire (tables=relations) I un standard : SQL (Structured Query Language) I autres modèles : objet, attribut-valeur... [email protected] MySQL - dével. Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Contexte Principaux SGBDR du marché I SGBDR propriétaires I Oracle I DB2 (IBM) I MS SQL Server I ... I SGBDR libres I MySQL I PostgreSQL I Firebird (fork de Borland InterBase) I ... [email protected] MySQL - dével.

MySQL-Miseenoeuvreetdéveloppement Contexte ... · ContexteModélisationInstallationMiseenoeuvreRequêtesSQLContexteAdministrationRoutinesAvancéFin SQL:StructuredQueryLanguage I

  • Upload
    lediep

  • View
    216

  • Download
    0

Embed Size (px)

Citation preview

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fin

MySQL - Mise en oeuvre et développement

Guillaume Allègre – INP Grenoble Formation Continue

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinContexte

ContexteLe monde des bases de données

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinContexte

Le monde des bases de données

I Les applications bureautiques “tout-en-un”I File Maker ProI MS AccessI . . .

I Les applications clients-serveurs (SGBD)I modèle relationnel ultra-majoritaire (tables=relations)I un standard : SQL (Structured Query Language)I autres modèles : objet, attribut-valeur...

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinContexte

Principaux SGBDR du marché

I SGBDR propriétairesI OracleI DB2 (IBM)I MS SQL ServerI . . .

I SGBDR libresI MySQLI PostgreSQLI Firebird (fork de Borland InterBase)I . . .

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinContexte

SQL : Structured Query LanguageI Un langage de requêtes normalisé

I Partagé (plus ou moins) par les principaux SGBDRI Ayant subi plusieurs évolutions

I SQL-86 (ANSI/ISO)I SQL-89 ou SQL-1I SQL-92 ou SQL2I SQL-99 ou SQL3I SQL :2003I SQL :2008 (en cours d’élaboration)

I Composé de cinq parties principales :I LDD (langage de définition des données)I LMD (langage de manipulation des données)I LCD (langage de contrôle des données)I LCT (langage de contrôle des transactions)I SQL procedural : PSM (Persistent Stored Module), CLI (Call

Level Interface), Embedded [email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinContexte

MySQL c’est. . .I une base de donnée relationnelle créée en 1995I modèle client-serveurI une application légère dans le monde des SGBDI développée par une société suédoise (ABSoft)

Rachetée par Sun Microsytems début 2008.I diffusée sous double licence

I libre (GPL) pour un usage interne ou libreI propriétaire payant pour un usage propriétaire

I le plus répandu des SGBDR libresparticulièrement utilisé sur le web (LAMP)

I multi plates-formes : Linux, Windows, OSX, etc.I une documentation de référence en ligne (HTML, PDF)

http://dev.mysql.com/doc/refman/5.0/en/index.htmlI partiellement conforme au standard SQL

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinContexte

MS Windows ODBCOpen DataBase Connectivity

I Accès à de multiples “sources” ODBCI différentes bases de données relationnellesI autres entrepôts de données (fichiers CSV, XML...)

I Interface API C (bas niveau)

I Sur-couche : ADO (haut niveau)

I Avantage : programmation uniforme qqs la source

I Inconvénient : performances amoindries

I Connecteur MySQL :http://dev.mysql.com/downloads/connector/odbc/

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fin

ModélisationLe modèle relationnel

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fin

IEP DP

DPT

- id_DPT smallint [PK] - titre varchar(255) - titreCourt varchar(20) - introduction text - conclusion text - logo_url varchar(255) - date_creation timestamp

DPT_groupt

- id_DPT smallint [FK,U] - groupt enum [U] - periode varchar(50) - commentaire text

id_DPT

DPT_notice

- id_DPT smallint [FK,U] - id_notice mediumint [FK,U] - requete text - date_insert timestamp

id_DPT

DPT_utilisateur

- id_DPT smallint [FK] - id_utilisateur tinyint [FK]

id_DPT

fnsp

- id_fnsp smallint [PK] - cote varchar(100) - intitule varchar(255) - aintitule varchar(255) - pere_id_fnsp smallint - ancien tinyint - type varchar(20) - date_maj timestamp

per_id_fnsp

indexFNSP

- id_index mediumint [PK] - expression varchar(255) - commentaire text - id_fnsp mediumint [FK]

id_fnsp

notice_fnsp

- id_lnfnsp int [PK] - id_notice mediumint [FK] - id_fnsp smallint [FK]

id_fnsp

StatsArbre

- id mediumint [PK] - id_fnsp mediumint [FK] - id_parent mediumint - prof tinyint - nb_fils smallint - nb_not_direct mediumint - nb_not_cumul mediumint - nb_not_direct_public mediumint - nb_not_cumul_public mediumint - chemin varchar(250) - ancetre_niv1 mediumint - ancetre_niv2 mediumint - geo tinyint

id_fnsp

institut

- id_institut tinyint [PK] - nom varchar(20) [U]

utilisateur

- id_utilisateur tinyint [PK] - login varchar(20) [U] - password varchar(40) - id_institut tinyint [FK]

id_institut

journal

- id_journal tinyint [PK] - intitule varchar(100) - intart varchar(10) - id_revue_fripes mediumint - id_utilisateur tinyint [FK] - local enum - dpt tinyint

notice

- id_notice mediumint [PK] - auteur varchar(100) - titre varchar(255) - commentaire varchar(255) - id_journal tinyint [FK] - id_supplement tinyint [FK] - ident varchar(50) - chrono date - chronofin date - page varchar(10) - url varchar(255) - chemin varchar(255) - date_maj timestamp - date_saisie datetime - saisie_id_utilisateur tinyint - maj_id_utilisateur tinyint - erreur varchar(255) - dpt tinyint

id_journal

supplement

- id_supplement tinyint [PK] - intitule varchar(200) - id_journal tinyint [FK] - local enum - dpt tinyint

id_journal

utilisateur_journal

- id_utilisateur tinyint [FK] - id_journal tinyint [FK]

id_journal

id_notice

id_notice

statsConsult

- id_statsConsult int [PK] - ip varchar(16) - temps datetime - notices tinyint - formulaire tinyint - journal varchar(50) - supplement varchar(50) - auteur varchar(100) - titre varchar(100) - date varchar(25) - fnsp varchar(50) - dpt mediumint - images tinyint - rssFNSP mediumint

id_supplement

id_utilisateur

id_utilisateur

saisie_id_utilisateur-> id_utilisateur

id_utilisateur

utilisateur_perm

- id_utilisateur tinyint [FK] - perm enum

id_utilisateur

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fin

Les tablesUne base de données (par ex. discotheque) est faite de tables.

Table DisquesTitre Auteur DateCantates Bach J.S. 2006Sonates Beethoven 2005Concerto Dvorak 2000

Chaque ligne est un enregistrement (ou tuple, ou n-uplet).Le nom d’une colonne est dit champ (ou attribut).

Les colonnes sont typéesNumérique BOOLEAN, INT, DOUBLE . . .

Texte VARCHAR(taille), TEXT . . .Listes ENUM(liste), SET(liste)

Date/Heure DATE, TIMESTAMP . . [email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fin

Le modèle relationnelI Lister les données à stockerI Structurer en entités–attributs (tables–champs)I Normaliser : un attribut contient une seule valeurI Fixer un identifiant unique pour chaque entité (Primary Key)I Normaliser : éviter les redondances d’un attributI Tracer un diagramme des associations (relations)

Exemple de la gestion d’une liste de CD.DisquesTitreInterprèteGenre musicalLabelDate de sortie

Comment organiser ces données ?DisquesTitreInterprètesCompositeursGenres musicauxLabelDate de sortie

Comment organiser ces données ?

Artistesid_artistenomprenom

←→

Disquesid_disquetitredateid_label

←→Genresid_genreintitule

−→Labelsid_labelnom

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fin

RelationsRelation 1:NChaque élément de Disques est lié à au plus un élément de Labels.Mais un élément de Labels peut correspondre à plusieurs disques.

Disquesid_disquetitredateid_label

−→Labelsid_labelnom

Relation N:MChaque élément de Disques est lié à plusieurs éléments de Genres,et réciproquement.

Disquesid_disquetitredate

←−Disques_Genresid_disqueid_genre

−→Genresid_genreintitule

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fin

Schéma final pour l’exemple

Disques

- id_disque mediumint [PK]

- titre varchar(50)

- date DATE

- commentaire text

- id_label mediumint [FK]

Disques_Genres

- id_disque mediumint [FK]

- id_genre mediumint [FK]

id_disque

Disques_Artistes

- id_disque mediumint [FK]

- id_artiste mediumint [FK]

- typeRelation enum id_disque

Labels

- id_label mediumint [PK]

- nom varchar(50) id_label

Genres

- id_genre mediumint [PK]

- intitule varchar(100)

id_genre - id_artiste mediumint [PK]

- nom varchar(50)

- prenom varchar(50)

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fin

TP - Agence immobilière (simplifiée)

Modéliser la situation suivante : on veut représenter l’organisationd’un ensemble d’immeubles en appartements et décrire lesinformations sur les propriétaires et les occupants.

I une personne occupe un seul appartementI un appartement peut être occupé par plusieurs personnes

(couples, colocataires)I une personne peut posséder plusieurs appartementsI un appartement peut appartenir à plusieurs personnes (chacun

avec quote-part)

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fin

Approche objet

MySQL n’est pas un SGBD Objet...

Mais on peut émuler certaines fonctionnalités

I comment remplacer les disques par une gestion demédiathèque ?

I attributs communs aux (disques, livres, images)I attributs distincts

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinMySQL WAMPServer

Installation

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinMySQL WAMPServer

Installation Windows - 1

ComposantsI MySQL Windows

I Serveur MySQL (mysqld)I Clients console : console mysqlI Clients console : utilitaires (mysqladmin, mysqldump...)I Instance Manager

I MySQL GUI Tools (optionnel)I MySQL Administrator 1.2I MySQL Query Browser 1.2I MySQL Migration Toolkit 1.1

I MySQL Workbench 1.1 (optionnel)

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinMySQL WAMPServer

Installation Windows - 2

Structure des répertoiresC:\Program Files\mySQL\MySQL Server 5.0

I bin : les exécutables binairesI data : les fichiers bases de donnéesI docsI examplesI include : en-têtes pour la programmation CI lib : les bibliothèques dynamiquesI configuration my.ini dans C:\windows

Gestion des servicesPar le gestionnaire de Windows

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinMySQL WAMPServer

Windows - Les exécutables disponibles

I mysqld.exe : InnoDBD + BDB + débogage

I mysqld-opt.exe : InnoDB

I mysqld-nt.exe : canaux nommés (NT)

I mysqld-max.exe : InnoDB + BDB

I mysqld-max-nt.exe InnoDB + BDB + canaux nommés

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinMySQL WAMPServer

Installation WAMPServer

I Un pack de logiciels libres configurés ensembleI Apache : serveur WebI MySQL : serveur de base de donnéesI PHP : langage de programmation webI PHPMyAdmin : interface web de gestion de MySQL, écrite en

PHPI SQLiteManager

I réalisé par Anaska (sté française), sous licence GPL v2.0

I concurrents : EasyPHP, xAMP...

I parcourir l’arborescence installée : trouver les fichiers deconfiguration de Apache, Mysql, phpMyAdmin

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinMySQL WAMPServer

L’architecture client-serveurRéseau : utilisation du protocole IP

I une adresse IP, ex. 192.168.1.100I un nom de machine, ex. pc101-01.cuefa.inpg.frI un port (=protocole) ; 3306 par défaut pour MySQL

HTTP POP

TCP UDP ICMP

Ethernet − MAC

IP

NFS

I Cas particulier : client-serveur en localI localhost : IP=127.0.0.1 (universel)I utilisation des canaux nommés (Windows NT...)I utilisation des sockets [email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinInterfaces Authentification Structures des données

Mise en oeuvre

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinInterfaces Authentification Structures des données

Les interfaces utilisateur

I Ligne de commandeI la “console” mysqlI les utilitaires : mysqldump, mysqladmin...I options communes :

-u <user> -p<password> -h <hote> -P <port>...

I Les “clients lourds” graphiquesI MySQL AdministratorI MySQL Query Browser

I L’interface webI PhpMyAdmin : interface unifiée

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinInterfaces Authentification Structures des données

La documentationLe manuel de référence

I http://dev.mysql.com/doc/I multiples versions, multiples languesI mises à jour régulièresI attention à la synchro des versions

I En pdf : imprimable...

I En format CHM (aide Windows)

I en ligne de commande (terminal) : HELP ...

I En ligne : HTMLI Commentaires utilisateurs

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinInterfaces Authentification Structures des données

Authentification

I Des comptes ad-hoc, indépendants de l’OS

I La connexion administrateur : rootI changer le mot de passe root :I mysqladmin -u root password <secret>I SET PASSWORD FOR root = PASSWORD(’<secret>’)

I créer des utilisateurs (et les gérer)I CREATE USER user [IDENTIFIED BY ’password’], ...

I DROP USER user [, user] ...I RENAME USER old-user TO new-user, ...

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinInterfaces Authentification Structures des données

Premier contact - privilèges

I SHOW DATABASES ;

I USE mysql ;

I SHOW TABLES ;

I SHOW PRIVILEGES ;

I DESCRIBE user ;

I puis : db, host, table-priv, column-priv

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinInterfaces Authentification Structures des données

GRANT et REVOKE

I Les différents niveaux de privilègesI serveur (ou global)I base de données (et hôte)I tableI colonne

I le contexte :I par défaut : contexte global : base.tableI use db ; : contexte base : table.colonne

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinInterfaces Authentification Structures des données

Gestion de la structure de données

I Au niveau globalI CREATE DATABASEI DROP DATABASE

I Au niveau base de donnéesI CREATE TABLEI DROP TABLEI RENAME TABLEI ALTER TABLE

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinInterfaces Authentification Structures des données

Les types de données

dualité représentation interne / affichage (ex. TINYINT(3) )I Entiers : INT, TINYINT, SMALLINT, MEDIUMINT, BIGINT

[UNSIGNED] [ZEROFILL]I Décimaux : FLOAT, DOUBLE, DECIMALI Heure et date : DATE, TIME, DATETIME, TIMESTAMP,

YEARI Texte : CHAR, VARCHAR (0 À 255), TEXT (et variantes)I Listes : ENUM(’homme’,’femme’), SET(’a’,’b’,’c’)

I Extensions : SPATIAL...

I la valeur NULL (champ vide, pas ”, pas 0)

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinSELECT Jointures modifs Avancé

Manipulation des donnéesRequêtes SQL

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinSELECT Jointures modifs Avancé

Lire des données : SELECTSELECT renvoie une "table" : résultat en lignes/colonnes.

Syntaxe simplifiéeSELECT expression FROM matable WHERE condition ;

Une expression (et une condition) est composée deconstantes : 3.14, ’chaine’attributs : date, nomfonctions : CONCAT(nom,’ ’,prenom)

Exemples :I SELECT * FROM commandes ;I SELECT numcommande FROM commandes WHERE

date>’2006-01-01’ ;

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinSELECT Jointures modifs Avancé

Compléments sur SELECTI ORDER BY : Trier les résultats

I SELECT * FROM articles ORDER BY nom ASCI SELECT * FROM articles ORDER BY prix DESC, nom ASC

I LIMIT : Limiter le nombre de résultatsI SELECT * FROM articles LIMIT 3I SELECT * FROM articles LIMIT 3,5

I DISTINCT : Supprimer tout doublon dans les résultatsI SELECT DISTINCT nom FROM clients

Quelques fonctionsI opérateurs : = < > != * / + etc.I la comparaison de texte est sans casse et sans accentsI LIKE : chaînes contenant un motif donné

SELECT nom FROM articles WHERE nom LIKE’%squash%’

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinSELECT Jointures modifs Avancé

Exercices

1. Trouver les articles de plus de 50 euros.2. Lister les noms des articles, triés par prix. Les trier par

catégorie, puis par stock pour une même catégorie.3. Quelle différence entre SELECT nom, idcategorie,

description FROM categories et SELECT * FROMcategories ?

4. Afficher toutes les commandes de 2004. Les 3 commandes lesplus récentes.

5. Que donne SELECT COUNT(*) FROM articles ? Quelledifférence avec SELECT COUNT(articles.codearticle)FROM articles ?

6. Combien d’articles de squash a-t-on ?

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinSELECT Jointures modifs Avancé

JointuresLe but : interroger plusieurs tables à la foisExemple :SELECT articles.nom FROM articlesJOIN categories ON

articles.idcategorie=categories.idcategorieWHERE categories.nom LIKE ’squash’

VariantesI SELECT A.nom FROM articles A JOIN categories C ON

A.idcategorie=C.idcategorie WHERE C.nom LIKE’squash’

I SELECT A.nom FROM articles A JOIN categories CUSING (idcategorie) WHERE C.nom LIKE ’squash’

I implicite : SELECT A.nom FROM articles A, categoriesC WHERE A.idcategorie=C.idcategorie AND C.nomLIKE ’squash’

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinSELECT Jointures modifs Avancé

Jointures : exemple

SELECT * FROM Joueursnom id_paysFederer 1Nadal 2Ferrer 2

SELECT * FROM Pays

id_pays pays1 Suisse2 Espagne3 France

SELECT * FROM Pays JOIN Joueurs USING (id_pays)id_pays pays nom1 Suisse Federer2 Espagne Nadal2 Espagne Ferrer

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinSELECT Jointures modifs Avancé

Exercices

1. Quels articles ont été commandés par Pierre Durand ?

2. Combien d’articles ont été expédiés à Paris ?

3. Lister les clients ayant commandé au moins deux fois ? Aumoins trois articles différents ?

4. Afficher tous les clients avec leurs articles associés ? Avec leurarticle le plus cher ?

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinSELECT Jointures modifs Avancé

Les jointures externes

1. jointure standard (INNER JOIN) : correspondance de deuxtables sur une valeur commune

2. jointure externe (OUTER JOIN) : l’une des deux tables estprioritaire =⇒ toujours citée pour toutes ses valeurs (LEFT,RIGHT)

Exemple :I Liste des clients n’ayant jamais commandéI SELECT nom, prenom, numcommande FROM clients LEFT

JOIN commandes USING (idclient)I + WHERE numcommande IS NULLI utilisation fréquente : contrôle de cohérence d’une base,

nettoyage

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinSELECT Jointures modifs Avancé

Travailler avec NULLhttp://dev.mysql.com/doc/refman/5.0/en/working-with-null.html

I OriginesI données : champs non remplisI certaines erreurs : 1/0I certaines fonctions : OUTER JOIN, ROLLUP...

I ImpactI sur COUNT(col), mais pas sur COUNT(*)

I Traitement : logique tri-valuée (TRUE, FALSE, UNKNOWN)I comparaison : val IS (NOT) NULL, ISNULL(val)I comparaison : val1 <=> val2 : prend en compte NULLI IFNULL(v1, vdef) : si v1 est NULL, remplacée par vdefI NULLIF(val1, val2) : retourne NULL si val1=val2I COALESCE(v1,v2,...) : retourne la première valeur non

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinSELECT Jointures modifs Avancé

Les agrégats - GROUP BY

I But : regrouper les résultats par valeur de colonne(s)

I Processus :1. Partitionnement du résultat (GROUP BY)2. Calcul des agrégats (fonctions COUNT, MIN...)3. Filtrage : clause optionnelle HAVING4. Sous-totaux : clause optionnelle WITH ROLLUP

I Attention : distinguer HAVING et WHERE

ExempleSELECT a.idcategorie, a.nom, a.codearticle,SUM(quantite) AS TotArt, SUM(d.prix*d.quantite) ASPrixTotFROM articles a JOIN details d USING (codearticle)JOIN commandes c USING (numcommande)GROUP BY a.idcategorie, a.codearticle WITH ROLLUP

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinSELECT Jointures modifs Avancé

INSERT

Insérer une ligne dans une table

2 syntaxes directes :I INSERT INTO clients (idclient,nom,prenom) VALUES

(’SOR01’,’Sorel’,’Julien’), ...Permet d’insérer plusieurs enregistrements

I INSERT INTO clients SET nom=’Sorel’,prenom=’Julien’Syntaxe commune avec UPDATE

Si un champ n’a pas de valeur :I s’il est en AUTO_INCREMENT, il vaudra 1 de plus que le

dernierI sinon, il prend la valeur par défaut (souvent NULL ou ”)

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinSELECT Jointures modifs Avancé

INSERT... SELECT

But : alimenter une table à partir d’une (ou plusieurs) autresINSERT INTO table [(col1, ...)] SELECT ...

ExempleC’est Noël : cadeau promotionnel pour tous les clients qui ontpassé une commande cette année, sous la forme d’une commandefictive gratuite, avec un cadeau unique référencé CAD08.1. INSERT INTO commandes(idclient, date) SELECT

DISTINCT idclient, ’2008-12-25’ FROM commandesWHERE date>=’2008’

2. INSERT INTO details(numcommande, numordre,codearticle, quantite, prix) SELECTc.numcommande, 1, ’CAD08’, 1, 0.00 FROM commandesc WHERE c.date=’2008-12-25’

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinSELECT Jointures modifs Avancé

INSERT... et contrainte d’unicitéContraintes d’unicité sur les enregistrements d’une table

I sur la clé primaire (forcément unique), ouI sur un index unique (éventuellement plusieurs)

Trois façons de régler le problème1. INSERT IGNORE INTO table ...

I conserve l’ancien enregistrement, oublie le nouveauI transforme les erreurs (bloquantes) en avertissements (non

bloquants)

2. REPLACE INTO table (3 mêmes syntaxes qu’INSERT)I remplace l’ancien enregistrement par le nouveauI compte comme une (insert) ou deux opérations (delete+insert)

3. ON DUPLICATE KEY UPDATE col1=expr, ...I remplace l’INSERT par un UPDATE si nécessaireI compte comme une ou deux opérations

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinSELECT Jointures modifs Avancé

INSERT... les clauses particulières

I Priorité : à utiliser avec précautionI LOW_PRIORITY : insertion remise à plus tard, quand plus

aucun accès en lecture ne sera en cours ; bloquant.

I HIGH_PRIORITY : outrepasse le LOW_PRIORITY défini auniveau serveur.

I DELAYED : insertion remise à plus tard, quand le serveur aurale temps ; non bloquant. Tous les INSERT DELAYED dutampon sont groupés.

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinSELECT Jointures modifs Avancé

Mise à jour d’enregistrements : UPDATE

UPDATE : 2 syntaxes, mono-table et multi-tablesI UPDATE [...] table SET col1=expr1 [, col2=expr2

...] [WHERE ...] [ORDER BY ...] [LIMIT ...]

I UPDATE table-refs SET col1=expr1 [, col2=expr2...] [WHERE ...]

Exemples :I UPDATE clients SET

codepostal=’38000’,ville=’Grenoble’ WHERE(nom,prenom)=(’Sorel’,’Julien’)

I UPDATE articles SET stock=stock+2 WHERE stock<5AND prix<30

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinSELECT Jointures modifs Avancé

Suppression d’enregistrements : DELETEDELETE : 3 syntaxes

I DELETE [...] FROM table [WHERE ...] [ORDER BY...] [LIMIT N]

I ATTENTION : deux syntaxes multi-tablesI DELETE tcible1 [, tcible2] ... FROM table-refs

[WHERE ...]I DELETE FROM tcible1 [, tcible2] ... USING

table-refs [WHERE ...]

Exemples :I DELETE FROM clients WHERE

(nom,prenom)=(’Sorel’,’Julien’)I Exercice : effacer de la table clients tous ceux qui n’ont jamais

commandé ! Remarque : il est conseillé de s’aider d’une vue oud’une table temporaire

Remarque : TRUNCATE TABLE matable permet de vider la [email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinSELECT Jointures modifs Avancé

Les index : améliorer les performances

Fonctionnement d’un SELECT ou JOINSELECT a.nom, c.nom FROM articles a JOIN categories cUSING (idcategorie) WHERE a.stock>2005S’il n’y a pas d’index, MySQL parcourt

I toute la table articles pour trouver les stocksI toute la table categorie pour trouver les idcategorie

IndexPermet à MySQL de trouver rapidement une valeur

I Clé primaire =⇒ indexI Clé étrangère =⇒ index (presque toujours)I Contrainte d’unicité : index UNIQUE

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinSELECT Jointures modifs Avancé

Les auto-jointuresI possible de référencer plusieurs fois la même table dans une

requêteI utilisation indispensable des alias

ExemplesI afficher tous les articles classés dans la même catégorie que le

tubaI SELECT a1.codearticle, a1.nom, a1.prix FROM

articles a1 JOIN articles a2 USING (idcategorie)WHERE a2.nom = "tuba" ;

I afficher tous les articles moins chers que le tubaI SELECT a1.codearticle, a1.nom, a1.prix FROM

articles a1 JOIN articles a2 ON (a1.prix <a2.prix) WHERE a2.nom = "tuba" ;

I usages fréquents : les hiérarchies, [email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinSELECT Jointures modifs Avancé

Les sous-requêtesI http:

//dev.mysql.com/doc/refman/5.0/en/subqueries.htmlI résultat scalaire : SELECT MAX(prix) FROM articles ;I résultat colonne : SELECT prix FROM articles ;I résultat table : sous-table

ExemplesI SELECT nom, codearticle, prix FROM articles WHERE

prix=(SELECT MAX(prix) FROM articles) ;I SELECT prix FROM details WHERE prix NOT IN

(SELECT prix FROM articles) ;I SELECT * FROM articles WHERE prix IN (SELECT prix

FROM articles GROUP BY prix HAVINGCOUNT(codearticle)>1) ;

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinSELECT Jointures modifs Avancé

SELECT ... UNIONSELECT ... UNION [ALL | DISTINCT] SELECT ...

I DISTINCT : par défaut (union ensembliste)I ALL : lignes répétées

Compatibilité avec l’ordonnancementI (SELECT a FROM t1 ORDER BY a LIMIT 5) UNION

(SELECT a FROM t2 ORDER BY a LIMIT 5) ;I (SELECT a FROM t1) UNION (SELECT a FROM t2) ORDER

BY a LIMIT 10 ;I ordre des lignes non garanti par l’opération UNIONI contournement : ajout de colonnes explicites

ExemplesI (SELECT codearticle, prix FROM articles A) UNION

(SELECT codearticle, prix from details D) ORDERBY prix ASC ;

I ex. Trouver les différences entre prix catalogue et [email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinSELECT Jointures modifs Avancé

Exercice : trouver l’article le plus cher (code, nom, prix)Par le plus grand nombre de méthodes différentes !

Réponses1. SELECT nom, codearticle, prix FROM articles ORDER

BY prix DESC LIMIT 1 ; Inconvénient ?2. SET @maxi=(SELECT MAX(prix) FROM articles) ;

SELECT nom, codearticle, prix FROM articles WHEREprix=@maxi ;

3. SELECT nom, codearticle, prix FROM articles WHEREprix=(SELECT MAX(prix) FROM articles) ;

4. SELECT a1.codearticle, a1.nom, a1.prix FROMarticles a1 LEFT JOIN articles a2 ON (a1.prix <a2.prix) WHERE a2.codearticle IS NULL ;

5. SELECT nom, codearticle, prix FROM articles WHEREprix >= ALL(SELECT prix FROM articles) ;

6. [email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinSELECT Jointures modifs Avancé

Travaux Pratiques : améliorer la base FacSys

1. Ajouter à chaque client un champ datecreation

2. L’initialiser à la date de sa première commande

3. Implémenter un parrainage d’un client par un autre. Chaqueannée, envoyer des cadeaux aux trois plus “gros” parrains.

4. Donner la possibilité de classer un article dans plusieurscatégories.

5. Organiser un suivi des commandes avec historique, en 4étapes : commande reçue -> saisie -> confectionnée ->expédiée, et une table opérateurs.

6. Faire une vue facture

7. Ajouter un prix d’achat et une table des fournisseurs.

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinGénér. Imp/Exp

Administration MySQL

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinGénér. Imp/Exp

Variables - généralités

I Noms alphanumériques

I Noms insensibles à la casse (depuis 5.0)

I Portée : Globale ou Session

I Type : Système ou Utilisateur

I Définies par la commande SET :SET @var := 1

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinGénér. Imp/Exp

Variables système (5.1.5)

I définies au lancement du serveur mysqldI fichier de configurationI ligne de commande, ex. mysqld –key-buffer=16M ...

I SHOW VARIABLES [LIKE "..."]

I statiques (certaines) ou dynamiques (la plupart) -> SET

I portée de la variable :I globale : ex. connect_timeoutI session (ou locale) : ex. autocommitI ou les deux : ex. default_week_format

=⇒ la variable session hérite de la variable globale

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinGénér. Imp/Exp

Réglage des variables système

Trois possibilités complémentaires :

1. Dans le fichier de configuration, section [mysqld]ex. log_bin_trust_function_creators = 1

2. En ligne de commande, au lancement du serveurex. mysqld - -key-buffer=16M ...

3. (éventuellement) dynamiquement, en cours d’exécutionI session : SET SESSION var := ou SET @@var :=

I globale : SET GLOBAL var := ou SET @@global.var :==⇒ privilège SUPER nécessaire pour la modification

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinGénér. Imp/Exp

Messages d’erreur de MySQLI Erreurs Serveur (Annexe B-3)

I ex. ERROR 1193 (HY000) : Unknown system variable’hop’

I un numéro d’erreur mysqld, entre 1000 et 1477I un code SQLSTATE sur 5 caractères, ANSI SQLI un message d’erreur

I Erreurs Client (Annexe B-4)I un numéro, entre 2000 et 2055 (ex : 2034)I un message, ex. Invalid parameter number

I Erreurs système (rare)I un message de type ERROR ’...’ not found (errno : 23)I errno entre 1 et 152 =⇒ commande perror

Commandes SHOW ERRORS [LIMIT ...] et SHOW WARNINGS[LIMIT ...]

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinGénér. Imp/Exp

Le fichier de configuration : my.cnf / my.ini

I LocalisationI sous Unix : /etc/my.cnfI sous Windows : C :\my.ini ou INSTALLDIR\my.ini

I Organisation en sections :client : options passées à tous les clients

mysqld : options passées au serveurmysql : options spécifiques à la console mysql

mysqldump : options spécifiques au client de dump...

I Syntaxe générale : cle = valeur, ex.key_buffer = 16M

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinGénér. Imp/Exp

Les fichiers de log

Quatre types différents :

I log (general query) : toutes les requêtes reçues par le serveur

I log-bin : les requêtes modifiant le contenu des basesI utilisé pour la réplication de serveurI plus compact que le précédent (binaire)

I log-slow-queries : les requêtes longuesutilisé pour le débogage ou le profilage

I log-error : les messages d’erreur du serveur

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinGénér. Imp/Exp

Import / Export de données - fichiers

SELECT INTO OUTFILE

LOAD DATA INFILE : exemple importation .CSV

LOAD DATA INFILE ’donnees.csv’INTO TABLE TableDonneesCHARACTER SET utf8FIELDS TERMINATED BY ’,’ optionally ENCLOSED BY ’"’IGNORE 1 LINES ;

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinGénér. Imp/Exp

Import / Export de données

I mysqlhotcopy

I mysqldumpchaînage possible avec mysql

I SELECT INTO DUMPFILE / LOAD DATA INFILEexport / import de type CSV

I BACKUP TABLE / RESTORE TABLElimitée à MyISAM

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinGénér. Imp/Exp

Surveillance des processusI Liste des processus

I SHOW [ FULL ] PROCESSLIST ;I FULL = colonne info complète (tronquée à 100 sinon)I environ 30 commandes, dont sleep, query, execute...I env. 60 états d’exécution, dont sending data, locked...I privilège PROCESS nécessaire pour voir les autres clients

I Interruption d’un processusI KILL [CONNECTION | QUERY] id ;I QUERY = interrompre la requêteI CONNECTION = couper la connexion (par défaut)I privilège SUPER nécessaire pour tuer les autres clients

I Équivalent ligne de commande : mysqladminmysqladmin processlist et mysqladmin kill

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinGénér. Imp/Exp

FLUSH et RESETI FLUSH HOSTS : vide le cache des hôtes (chgt IP)I FLUSH LOGS : ferme et rouvre tous les fichiers de logsI FLUSH PRIVILEGES : relit les privilèges dans la base mysqlI FLUSH QUERY CACHE : optimise le cache des requêtesI FLUSH STATUS : réinitialise les variables de connexion

(session)I FLUSH TABLES [...] : vide le cache des tables...I FLUSH TABLES WITH READ LOCK : idem + verrou en lectureI FLUSH USER_RESOURCES : remet à zéro les quotas utilisateursI FLUSH :

I RESET QUERY CACHE : vide le cache des requêtes

I mysqladmin flush-... : équivalent partiel en ligne decommande

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinGénér. Imp/Exp

Le dictionnaire : INFORMATION_SCHEMA

I métadonnées normalisées, interrogeables en SQL

I base virtuelle (contrairement à mysql)

I calcul des droits spécifique

I exemple :

SHOW TABLES FROM information_schema ;DESC information_schema.tables;SELECT table_schema, table_nameFROM information_schema.tables;

Ex. d’application : une requête similaire à DESC, en plus détaillé.

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Vues, fonctions et procédures stockées

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

MySQL - modules stockésI Fonctionnalités apparues majoritairement avec MySQL 5.0

stabilisation longue

I “stockés” : enregistrés sur le serveur

I Les vues : tables dynamiques

I Les commandes “préparées”

I Les routinesI fonctions définies par l’utilisateurI procédures stockéesI curseursI gestionnaires d’erreur (handlers)I langage procédural (sous-ensembe de SQL/PSM)

I Les déclencheurs (triggers)[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Vues - GénéralitésIdéeVue = requête (SELECT) stockée, présentée comme une table(table dynamique).Exemple :

CREATE VIEW ClientsBref ASSELECT prenom, nom, idclient, ville FROM clients ;

SELECT * FROM ClientsBref ;

Commandes :I CREATE [OR REPLACE] VIEWI ALTER VIEWI DROP VIEWI SHOW FULL TABLES [WHERE Table_type="VIEW"]I SHOW CREATE VIEW

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Vues - Exemples

I Définir une vue Vcommandes, qui augmente la tablecommande avec le nom du client, le nb de lignes, les champsquantite et montant

I Définir une vue Vfactures, qui donne les mêmes informations,plus les détails : une ligne par détail, plus une ligne detotalisation (astuce : GROUP BY WITH ROLLUP )

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Vues - Paramètres avancésClause ALGORITHM=

I MERGE : vue remplacée par sa définition dans requête d’appelI TEMPTABLE : utilisation d’une table temporaireI UNDEFINED : MySQL fait le meilleur choix (MERGE si

possible)

Privilèges et sécuritéI CREATE VIEW : nécessaire pour créer une vueI SHOW VIEW : pour voir la définition d’une vueI utilisation des vues : donner des droits partiels limités à

certains utilisateursI Ex. : accorder les droits sur ClientsBref à un utilisateur

"lambda". Vérifier l’action de SQL SECURITY (DEFINER,INVOKER).

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Vues modifiables

I Certaines vues acceptent des UPDATE, DELETE, INSERT :I la modification ne s’applique qu’à une table ETI correspondance univoque entre colonnes tables / vue ETI les champs non référencés ont des valeurs par défaut définiesI ... cf 21.4.3 Updatable and Insertable ViewsI cf SELECT * FROM information_schema.views ;

I WITH CHECK OPTIONI UPDATE ou INSERT doivent vérifier la clause WHERE de la

vueI CASCADED (défaut) : vérif. étendue aux vues référencées,

récursivementI LOCAL : vérif. limitée à la vue affectée

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Tables temporaires et tables en mémoireTables temporaires

I CREATE TEMPORARY TABLE nom-table

I syntaxe identique à une création standard

I existence limitée à la durée de la connexionI nom de table local à la connexion (isolation)

I privilège nécessaire : CREATE TEMPORARY TABLES

Tables en mémoireI CREATE TABLE nom-table (...) ENGINE MEMORY ;

I existence limitée à la durée du serveurI table partagée entre tous les clients

I privilège nécessaire : CREATE TABLES

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Syntaxe des commentaires

I après un #, jusqu’à la fin de la ligne

I après une séquence "- - " (tiret-tiret-espace), jusqu’à la fin dela ligne

I /* syntaxe C */ éventuellement multiligne

I /* ! variante syntaxe C */exécutée par MySQL, ignorée par les autres SGBD SQLSELECT * FROM articles /* WHERE prix<10 */ ;

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Variables - généralités

I Noms alphanumériques

I Noms insensibles à la casse (depuis 5.0)

I Portée : Globale ou Session

I Type : Système ou Utilisateur

I Définies par la commande SET :SET @var := 1

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Variables système (5.1.5)

I définies au lancement du serveur mysqldI ligne de commande mysqld –var1=val1...

I fichier de configuration

I statiques (certaines) ou dynamiques (la plupart) -> SET

I portée : Global, Session, ou les deuxI globale : SET GLOBAL var ou SET @@global.var

=⇒ privilège SUPER nécessaire pour la modificationI session : SET SESSION var ou SET @@var

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Variables utilisateurs (8.4)

I ex. @varI locales = portée toujours limitée à la session (connexion)

AffectationI Affectation directe

I SET @a := 4, @b := "Dupont" ;I SET @c := LEFT(@b, @a) ;

I Affectation par requêteI SET @p1 := (SELECT MIN(prix) FROM articles) ;I SELECT @p2 := MIN(prix), @p3 := MAX(prix) FROM

articles ;I SELECT MIN(prix), MAX(prix) INTO @p4, @p5 FROM

articles ; obligatoire pour les routines

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Commandes préparéesContexte d’utilisation normal

I API pour les langages prévus :I natifs : C, Java (Connector/J), .NETI surcouches à l’API C : mysqli (PHP)...

I SQL pour mise au point / débogage

Syntaxe des commandesI PREPARE stmt-name FROM preparable-stmtI EXECUTE stmt-name [USING @var-name [, @var-name] ...]I DROP PREPARE stmt-name

ExempleI PREPARE clientsNom FROM "SELECT nom, prenom, ville

FROM clients WHERE Nom >? " ;I SET @nomdeb := "E" ;I EXECUTE clientsNom USING @nomdeb ;

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Commandes préparées - Usages

UsagesI Optimisation : requête à paramètres, précompilée sur le

serveur

I Méta-programmation : construction d’une requête en SQLI Utilisation d’une chaîne quelconque pour créer un PREPARE

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Routines

I Fonctionnalités MySQL 5.0, en évolution

I Deux types : procédures stockées et fonctions

I Utilisent des paramètres typésI procédures : en entrée et sortieI fonctions : en entrée seulement

I Retours :I paramètres de sortie + retour des commandes (SELECT...)I valeur unique, typée

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Routines - syntaxe commune

CREATEFUNCTION | PROCEDURE nom ([param1, param2...])[ RETURNS type ]

LANGUAGE SQL | [NOT] DETERMINISTIC |{CONTAINS SQL | NO SQL | {READS | MODIFIES} SQL DATA}| SQL SECURITY { DEFINER | INVOKER }| COMMENT ’chaine’

[label:] BEGIN...END [label]

I SHOW [PROCEDURE | FUNCTION] STATUS ;I SHOW CREATE [PROCEDURE | FUNCTION] nom ;

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Fonctions - syntaxe

CREATE FUNCTIONnomfonc ([para1 type1, para2 type2...])

RETURNS typeLANGUAGE SQL | [NOT] DETERMINISTIC |{CONTAINS SQL | NO SQL | {READS | MODIFIES} SQL DATA}| SQL SECURITY { DEFINER | INVOKER }| COMMENT ’chaine’

[label:] BEGIN... RETURN <valeur> ...END [label]

I SHOW FUNCTION STATUS ;I SHOW CREATE FUNCTION nomfonc ;

I variable système [email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Fonctions - exemplesFonctions simples

I Ecrire une fonction Majuscule qui prend une chaîne, et laretourne en minuscules, sauf la première lettre en majuscules.

I A l’aide de la précédente, écrire une fonction PreNom, quiprend deux chaînes et affiche "Prénom Nom" bientypographiés.

Fonctions “requêtes”I Ecrire une fonction MontantCumule qui retourne le montant

total commandé par un client de la base facsys.

I À partir du nom d’un nouveau client, retourner un nouveauidclient unique (rappel : 3 premiers caractères du nom, suivisd’un numéro, par ex. DUR005).

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Contrôle de flot - les tests IF et CASEIF (condition) THEN ... ;[ ELSEIF (cond2) THEN ... ; ][ ELSE ... ; ]END IF

CASE valeur[ WHEN valeur1 THEN ... ; ] xN[ ELSE ...; ]

END CASE

CASE[ WHEN condition1 THEN ... ; ] xN[ ELSE ... ; ]

END CASE

Ne pas confondre avec les fonctions IF() et [email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Contrôle de flot - les boucles[label:] LOOP

...END LOOP [label]

[label:] REPEAT...

UNTIL (condition)END REPEAT [label]

[label:] WHILE (condition) DO...

END WHILE [label]

Les échappementsI LEAVE label : quitte la boucleI ITERATE label : recommence la boucle

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Procédures stockées - syntaxe

CREATE PROCEDUREnompro (IN par1 T1, OUT par2 T2, INOUT par3 T3...)LANGUAGE SQL | [NOT] DETERMINISTIC |{CONTAINS SQL | NO SQL | {READS | MODIFIES} SQL DATA}| SQL SECURITY { DEFINER | INVOKER }| COMMENT ’chaine’

[label:] BEGIN...END [label]

I SHOW PROCEDURE STATUS ;I SHOW CREATE PROCEDURE nompro ;

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Procédures stockées - exemples

I Définir une procédure Cumul qui retourne le montant cumuléET le nombre d’articles commandés.

I Définir une routine Mode qui affiche le mode (valeur la plusfréquente) de la colonne prix de la table articles.

I Ajouter un paramètre de sortie qui indique le nombre demodes.

I Définir une routine qui affiche la médiane d”une liste devaleurs. (Plusieurs méthodes possibles).

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Curseurs

I GénéralitésI Autorisés à l’intérieur des “routines” : procédures, fonctions,

triggersI Passage à un parcours classique d’une liste de résultats :

boucle sur les lignesI Chaque curseur est associé à un SELECT

I CommandesI DECLARE mon-curseur CURSOR FOR SELECT...I OPEN mon-curseurI FETCH mon-curseur INTO var1, var2, ...I CLOSE mon-cuseur

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Curseurs - exemple

I Définir une procédure qui affiche la somme des montants desN articles les plus chers et la somme totale du stockcorrespondant

I Définir une fonction qui affiche la médiane d”une liste devaleurs

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Handlers - gestion d’erreur

DECLARE handler-type HANDLERFOR h-condition1 [, h-condition2][ instruction | BEGIN ... END ] ;

h-type: CONTINUE | EXIT | UNDO

h-condition:SQLSTATE valeur | mysql-code-erreur

| SQLWARNING | NOT FOUND | SQLEXCEPTION| nom-condition

I méthode MySQL pour intercepter les erreursI souvent associé aux curseurs (NOT FOUND), mais pas

seulementI souvent l’instruction positionne un booléen (SET fini :=1)

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Conditions définies pour le Handler

DECLARE nom-condition CONDITIONFOR valeur-condition

valeur-condition:SQLSTATE valeur

| mysql-code-erreur

Façon de définir un “alias” pour une erreur ou une famille d’erreurs.

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Messages d’erreur de MySQL

I Erreurs Serveur (Annexe B-3)I ERROR 1193 (HY000) : Unknown system variable ’hop’I un numéro d’erreur mysqld, entre 1000 et 1477I un code SQLSTATE sur 5 caractères, ANSI SQLI un message d’erreur

I Erreurs Client (Annexe B-4)I un numéro, entre 2000 et 2055 (ex : 2034)I un message, ex. Invalid parameter number

I Erreurs système (rare)I un message de type ERROR ’...’ not found (errno : 23)I errno entre 1 et 152 =⇒ commande perror

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Curseurs et handlers - exemples

I Implémenter une fonction maximum avec plafond sur les prixdes articles : ne prend pas en compte les valeurs supérieuresau plafond donné en paramètre.

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Déclencheurs (Triggers)

But : déclencher une action complémentaire lors de la modification(Insert, Delete, Update) d’un enregistrement dans une table.

CREATE TRIGGER nom t-moment t-modif ON tableFOR EACH ROW instruction ;

| FOR EACH ROW BEGIN ... END ;

t-moment = BEFORE | AFTERt-modif = INSERT | UPDATE | DELETE

I Complément : DROP TRIGGER [IF EXISTS] nom etSHOW TRIGGERS

I Valeurs : NEW.champ (Insert, Update) =⇒ modifiableOLD.champ (Delete, Update) =⇒ lecture seule.

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

Triggers - ExemplesI Gestion du stock des articles lors de la commande :

CREATE TRIGGER majstock AFTER INSERT ON facsys.detailsFOR EACH ROW

UPDATE articles SET stock := stock - NEW.quantiteWHERE codearticle=NEW.codearticle ;

I Faire un compteur des montants et des commandes du jour(variable session).

I Si on commande des balles de squash : 5 au minimum.

I Ex. courant : journalisation des actions critiques sur une table

I Ex. : définir une valeur par défaut dynamique pour unecolonne. Ex. 75 =⇒ Paris.

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé FinVues Variables Prep Routines Curseurs

En résumé

Déclarations dans un bloc BEGIN... END1. Variables : DECLARE <var> <type> DEFAULT <valeur>, ...2. Conditions : DECLARE <nom-cond> CONDITION FOR ...3. Curseurs : DECLARE <nom-curs> CURSOR FOR SELECT ...4. Handlers : DECLARE <handler-type> HANDLER FOR ...

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

Pour aller plus loin...

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

Internationalisation...

I Le jeu de caractères utilisé (Charset, dépendant de la langue)

I La règle d’interclassement (Collation)

I Langue des messages

I Autres paramètres régionaux : date...

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

Les jeux de charactères (charset)

I Deux jeux de caractères principaux parmi 36 : latin1 et utf8

I Les réglagesI SHOW VARIABLES LIKE "char%" ;I SET CHARSET utf8 ;I SET NAMES utf8 ;I cf 9.1.4. Connection Character Sets and Collations

I RecommandationsI abandonner latin1I ASCII pour les codes (quand c’est possible), utf8 pour le reste

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

L’interclassement (collation)

I Principes générauxI “ordre alphabétique” étendu pour comparaison, tri...I classes de caractères équivalents, ex. e, é, è, ê, E, É, È, ÊI plusieurs collations par jeu de caractère, dont 1 par défautI nom charset_collation_var ; var = "ci" ou "cs" ou "bin"I possibilité d’ajouter une collation personnaliséeI impact sur ORDER BY, GROUP BYI impact sur LIKE

I Commandes et fonctions d’informationI SHOW COLLATION LIKE "utf8%" ;I SELECT COLLATION(nom) FROM facsys.clients LIMIT 1 ;I SELECT COERCIBILITY(nom) FROM facsys.clients LIMIT 1 ;

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

L’utilisation pratique4 niveaux d’application : serveur, base, table, colonne.

CREATE DATABASE base CHARACTER SET utf8 COLLATE utf8_unicode_ci;

CREATE TABLE t1 (...) CHARACTER SET utf8 COLLATE utf8_spanish_ci;

CREATE TABLE Table1( column1 VARCHAR(5) CHARACTER SET utf8 COLLATE utf8_bin);

ALTER TABLE Table1 MODIFY column1VARCHAR(5) CHARACTER SET utf8 COLLATE utf8_general_ci;

I Conversions : _collate, CONVERT(val, collate), CAST(val AScollate)

I SET NAMES, SET CHARSET : cf 9.1.4. ConnectionCharacter Sets...

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

Définition des données4 niveaux d’application : serveur, base, table, colonne.

I Création des structuresCREATE DATABASE base

CHARACTER SET utf8 COLLATE utf8_unicode_ci;

CREATE TABLE t1 (...)CHARACTER SET utf8 COLLATE utf8_spanish_ci;

CREATE TABLE Table1( col1 VARCHAR(5) CHARACTER SET utf8 COLLATE utf8_bin);

I Modification des structures : colonneALTER TABLE Table1 MODIFY col1 VARCHAR(5)

CHARACTER SET utf8 COLLATE utf8_general_ci;

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

Conversions en pratique

I ConversionsI _collateI CONVERT(val, collate)I CAST(val AS collate)

I Exemple :SELECT * FROM users WHERE login= ? AND password= ?

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

Les paramètres régionaux

I Localisation des datesI Fonction DATE_FORMAT()I Variable @@lc_time_names (locale ou globale)I Ex. : afficher la date du jour en français (ex. lundi 13 octobre

2008)I Time-zone

I Variable @@time_zone (=SYSTEM)I Ex. "Europe/Paris" ; voir table mysql.time_zone_name

I Traduction des messages d’erreurI mysqld - -language=swedishI ou fichier de configurationI pas recommandé en production

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

Optimisation - principes

Exécution d’une requête SQL1. Analyse et traduction

I analyse et vérification syntaxiqueI vérification de la validité (existences...)I vérification des permissionsI produit une liste d’opérations

2. OptimisationI utilise le dictionnaire : index, taille des tables...I produit le plan d’exécution (arbre)

3. Exécution de l’arbre de la requête

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

Plan d’exécution - principe

I Données intermédiaires : pipelining vs matérialisationI pas de stockageI retour immédiat des premiers résultats au client

I Opérations bloquantes :I tris : ORDER BYI dédoublonnage : DISTINCTI certaines fonctions d’aggrégation globales : MIN(), MAX(),

SUM()...I partitionnement : GROUP BY

I Arbre d’exécution

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

EXPLAIN - syntaxe

EXPLAIN SELECT ... ;

EXPLAIN EXTENDED SELECT ... ;SHOW WARNINGS ;

I ne s’applique qu’à SELECT =⇒ reformuler les UPDATE,INSERT...

I EXPLAIN : affiche une vue du plan d’exécutionI EXPLAIN EXTENDED : reconstruit un SQL canonique

I EXPLAIN SELECT * from articles WHERE prix >50.0

I limites et imprécisions d’EXPLAIN

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

EXPLAIN - colonnes

colonnes d’EXPLAINid le numéro de SELECT dans la requêteselect_type type de SELECT, simple ou complexe...table la table concernée, ou l’aliastype le type d’accès à cette table choisi par MySQLpossible_keys les clés utilisables (à première vue)key la clé choisie par MySQL pour l’opérationkey_len la longueur de clé utilisée en octetsref la colonne référencée par la clé choisierows nombre de lignes parcourues (estimation)Extra infos complémentaires, selon champs précédents

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

EXPLAIN - colonnes id, select_type, table

I colonne id : 1, 2, 3... et NULL, non unique

I colonne select_type

SIMPLE le SELECT ne contient ni sous-requête ni UNIONPRIMARY requête principaleSUBQUERY sous-requête autre qu’apparaissant dans le FROMDERIVED sous-requête apparaissant dans le FROMUNION 2e partie (et suivantes) d’une UNIONUNION RESULT encapsule tous les SELECT d’une UNIONI colonne table :

I nom (ou alias) de la table concernéeI derivedN : en cas de sous-requête dans FROMI unionX,Y... : en cas d’UNIONI l’ordre des lignes indique l’ordre du plan d’exécution

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

EXPLAIN - colonne type

ALL parcourt toutes les lignes de la tableindex () parcourt toutes les lignes dans l’odre de l’indexindex (Extra=Using index) parcourt tout l’indexrange parcourt un intervalle d’indexref accès indexé direct - valeurs multiples possibleseq_ref accès indexé direct - au plus une valeur de retourconst, system remplacé par une constante dans l’optimiseurNULL résolu immédiatement par l’optimiseurI Note : ALL systématique pour les petites tables

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

EXPLAIN - colonnes clés

I colonne possible_keys (informatif)I liste déterminée à la phase d’analyseI peut rester inutilisée après optimisation

I colonne keysI souvent une clé de la listeI parfois aucune ne convient =⇒ NULLI parfois une clé extérieure à la première liste

I colonne key_lenI longueur utilisée en octetsI si clé multicolonnes, peut être inférieure au total

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

EXPLAIN - colonnes ref, rows, ExtraI colonne ref

I utilisée si une clé est déclaréeI référence des champs des lignes précédentesI ou des constantes

I colonne rowsI nombre de lignes (estimé) à parcourirI relatif au point courant du plan d’exécutionI estimation dépend des statistiques sur la table (cf plus loin)I néglige les LIMIT (jusqu’à v.5.1)

I colonne ExtraUsing index utilise un index couvrant : évite l’accès à la tableUsing where post-filtrage des lignes retournéesUsing temporary utilisation d’une table temporaire (tri...)Using filesort tri externe, en mémoire ou sur disque

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

Métadonnées et statistiques utiles

I SHOW TABLE STATUS LIKE ’table’

I ANALYZE TABLE table ;

I que peut-on prévoir comme optimisation de la strucure decommunes ?

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

Benchmark

I Commande BENCHMARK

I Limitée à une évaluation d’expression

I Limitée à l’exécution de la requête par le serveur

I Exemples

SET @input := "mon mot de passe secret";SELECT BENCHMARK(1000000, MD5(@input));SELECT BENCHMARK(1000000, SHA1(@input));

SELECT BENCHMARK(10,(SELECT MAX(naiss) FROM naissances));SELECT BENCHMARK(10,(SELECT @v:=MAX(naiss) FROM naissances));

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

Profiling

I Recherche des étapes longues dans un processus

I Analyse a posterioriutiliser log-slow-queries

I Analyse en direct : commandes SQLI SET @@profiling :=1 ;I SHOW PROFILES ;I SHOW PROFILE [ ALL ] FOR QUERY ... ;I types : BLOCK IO, CPU, MEMORY, PAGE FAULTS,

SWAPS...I paramètre : profiling_history_size (=15)

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

Les indexI Généralités

I porte sur une ou plusieurs colonnes de la tableI possède un nom distinctif (PRIMARY pour la clé primaire)

I Les types d’index - pour l’utilisateurI Clé primaire : unique pour une table + contrainte d’unicitéI INDEX simple : pour les recherches...I UNIQUE INDEX : recherche + contrainte d’unicitéI FULLTEXT : index plein texteI SPATIAL : index géométrique - extension SPATIAL

I Les type d’index interneI HASH : fonction de hachage (par défaut en MyISAM)I B-Tree : arbre équilibré (par défaut en InnoDB)I R-Tree : index spatialI FULLTEXT

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

Index - créationCréation d’index

ALTER TABLE tableADD PRIMARY KEY [index-type] (index-col,...)

| ADD UNIQUE [INDEX] [index-name] [index-type] (index-col,...)| ADD [FULLTEXT|SPATIAL] INDEX [index-name] (index-col,...)

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index-name[ USING [BTREE | HASH]]ON tbl_name (index_col_name,...)

Note : préfixe d’index (chaînes de caractères)Suppression

ALTER TABLE tableDROP PRIMARY KEY

| DROP {INDEX|KEY} index_name

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

Index - utilisationDésactivation temporaire pour insertion massive

ALTER TABLE table DISABLE KEYS;...

ALTER TABLE table ENABLE KEYS;

Utilisation couranteI utilisation automatique pour JOIN, ORDER... (cf EXPLAIN)I utilisation forcée sur JOIN, ex. :

SELECT * FROM t1 USE INDEX (col1, col2)I indication = USE | IGNORE | FORCE

Cache d’indexI CACHE INDEXI LOAD INDEX INTO CACHE

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

Verrous - généralités

LOCK TABLESnom-table [[AS] alias] lock-type[, nom-table [[AS] alias] lock-type] ...

( lock-type: READ | [LOW_PRIORITY] WRITE )...UNLOCK TABLES

I Priorité : WRITE > LOCAL > LOW_PRIORITY WRITEI READ : empêche l’écriture ; tout le monde peut lireI WRITE : empêche tous les autres accèsI Notes

I doit porter sur toutes les tables utilisées, même multiplesI privilège LOCK TABLE nécessaire en complément du SELECTI s’applique aussi sur les vuesI pas de sens sur une table temporaire

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

Verrous - les pièges

I Déverrouillages implictesI pose d’un nouveau verrouI début de transactionI perte de connexion client - serveur

I Attention aux interactions verrou - transactions

I FLUSH TABLES WITH READ LOCK : verrou globalI prioritaireI nécessite le privilège RELOAD

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

Les moteurs de stockageMyISAM le moteur par défaut, d’origine ABSoft

I très rapide pour des requêtes et des tables simplesI faible empreinte disque

InnoDB moteur “sophistiqué” : intégrité, transactionsI développé par InnoBASE, rachetée par OracleI moteur plus complexe

Memory tout le stockage en RAM ; perdu à l’arrêt serveur

Archive prévu pour la journalisation=⇒ INSERT et SELECT seulement

Merge fusion virtuelle de plusieurs tables MyISAM

Maria (dév.) successeur prévu pour MyISAMFalcon (dév.) successeur prévus pour InnoDB

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

Particularités d’InnoDB

I déclaration des clés étrangèresI vérification de l’intégrité référentielle

I support des transactions, avec 4 niveaux d’isolement

I utilisation d’index plaçant (clustering) sur la clé primaire

I cache mémoire des données aussi

I tables et index plus volumineux

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

Intégrité référentielle

I Définition des clés étrangèresCREATE TABLE table | ALTER TABLE table ADD

[CONSTRAINT symb] FOREIGN KEY [i-fkey-id] (col1, ...)REFERENCES nom-table (col1, ...)[ON DELETE [RESTRICT | CASCADE | SET NULL ]][ON UPDATE [RESTRICT | CASCADE | SET NULL ]]

RESTRICT rejette la modification, avec un message d’erreurCASCADE répercute la modif sur la table référencéeSET NULL effectue l’action et anNULLe la clé sur la table référençante

I Activation : SET FOREIGN_KEY_CHECKS := 0|1 ;

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fini18n Optimisation Verrous Moteurs

Transactions - utilisation

START TRANSACTIONCOMMIT [AND [NO] CHAIN] [[NO] RELEASE]ROLLBACK [AND [NO] CHAIN] [[NO] RELEASE]SET AUTOCOMMIT = [0 | 1]

I Options :CHAIN enchaîne immédiatement une autre transaction

RELEASE coupe la connexion à la fin de la transaction

SAVEPOINT identifierROLLBACK TO identifierRELEASE SAVEPOINT identifier

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fin

Bibliographie complémentaire

I MySQL Reference Manual 5.0, AB Soft (plus complet enanglais)

I Maîtriser MySQL 5, O’Reilly France (2005), Darmaillac etRigaux

I MySQL Cookbook, 2nd Ed (2006), O’Reilly

I MySQL Stored Procedure Programming (2006-03), O’ReillyI High Performance MySQL, 2nd Ed. (2008-06), O’ReillyI Expert MySQL 5, Apress (2007-01)

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fin

Informations utiles

Pour garder le contact :[email protected]

Les documents utilisés sont disponibles en ligne :http://silecs.info/formations/MySQL/

I TransparentsI Énoncés et corrections des exercices

[email protected] MySQL - dével.

Contexte Modélisation Installation Mise en oeuvre Requêtes SQL Administration Routines Avancé Fin

Licence

Copyright (c) 2008 François Gannaz, Guillaume Allègre

Permission vous est donnée de copier, distribuer et/ou modifier cedocument selon les termes de la Licence GNU Free DocumentationLicense, Version 2.0 ou ultérieure publiée par la Free SoftwareFoundation ; pas de section inaltérable ; pas de texte inaltérable depremière page de couverture ; texte inaltérable de dernière page decouverture :« Auteurs : François Gannaz, Guillaume Allègre, SILECS »

[email protected] MySQL - dével.