Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

Chapitre 12 minAvancé

Pourquoi les procédures stockées ?

Par Josselyn C., prof de BTS SIO. Mis à jour le .

Le probleme

Dans une application classique (PHP, Java, Python), le code SQL est ecrit directement dans le code applicatif. Quand une meme requete complexe est executee 100 fois par jour depuis differents endroits du programme, on obtient :

  • Duplication : la meme requete est copiee dans 15 fichiers differents. Si la structure de la table change, il faut modifier 15 fichiers.
  • Risque d'erreur : un developpeur modifie la requete dans un fichier mais oublie les 14 autres.
  • Securite faible : l'application doit avoir un acces direct aux tables (SELECT, INSERT, UPDATE, DELETE). Si l'application est compromise, l'attaquant a acces a tout.
  • Performance sous-optimale : chaque requete envoyee depuis l'application doit etre analysee, optimisee et compilee par MySQL a chaque execution.

La solution

Stocker la logique SQL directement dans la base de donnees, sous forme de procedures stockees. L'application n'envoie plus la requete complete : elle appelle la procedure par son nom.

Avant (code PHP) :

php
// Fichier 1
$sql = "SELECT * FROM client WHERE ville = 'Paris' ORDER BY nom";
// Fichier 2 — meme requete, copiee
$sql = "SELECT * FROM client WHERE ville = 'Paris' ORDER BY nom";
// Fichier 3 — quelqu'un a oublie le ORDER BY
$sql = "SELECT * FROM client WHERE ville = 'Paris'";

Apres (code PHP avec procedure stockee) :

php
$sql = "CALL clients_par_ville('Paris')";

La requete n'existe qu'a un seul endroit : dans la base de donnees.

Les quatre avantages

AvantageExplication
PerformanceLa procedure est analysee et compilee une seule fois par MySQL. Les appels suivants reutilisent le plan d'execution.
SecuriteOn peut donner a l'application uniquement le droit EXECUTE sur les procedures, sans aucun droit direct sur les tables.
MaintenanceLe code SQL existe a un seul endroit. Une modification se fait une fois, pas dans 15 fichiers.
ReutilisationToute application (PHP, Java, Python) peut appeler la meme procedure. Le code SQL n'est pas lie a un langage.

Chapitre terminé !

Tu as lu ce chapitre jusqu'au bout. Passe au suivant tant que c'est frais.

chapitres
–
de série
–
du cours
–
Chapitre suivant : Syntaxe des procédures stockéesRevoir le sommaire du cours