
{"id":26,"date":"2008-10-29T16:47:00","date_gmt":"2008-10-29T14:47:00","guid":{"rendered":"http:\/\/dasini.net\/blog\/?p=26"},"modified":"2008-11-29T16:38:09","modified_gmt":"2008-11-29T15:38:09","slug":"mysql-50-un-sgbdr-mature-part-34","status":"publish","type":"post","link":"https:\/\/dasini.net\/blog\/2008\/10\/29\/mysql-50-un-sgbdr-mature-part-34\/","title":{"rendered":"MySQL 5.0 : Un SGBDR mature ? &#8212; (part 3\/4)"},"content":{"rendered":"<p class=\"western\">(<em><a title=\"MySQL 5.O, un SGBDR mature ? -- (part 2\/4)\" href=\"http:\/\/dasini.net\/blog\/2008\/10\/28\/mysql-50-un-sgbdr-mature-part-24\/\">&lt;- pr\u00e9c\u00e9dent<\/a><\/em>)<\/p>\n<h3 class=\"western\">Proc\u00e9dures stock\u00e9es et fonctions<\/h3>\n<p style=\"margin-bottom: 0cm;\">Les proc\u00e9dures stock\u00e9es sont des listes de commandes qui peuvent \u00eatre compil\u00e9es et stock\u00e9es sur le serveur. Elles permettent de d\u00e9placer une partie de la logique m\u00e9tier d&rsquo;une application de base de donn\u00e9es du client vers le serveur. Les clients n\u2019ont plus besoin de soumettre \u00e0 nouveau toute la commande, mais font simplement r\u00e9f\u00e9rence \u00e0 la proc\u00e9dure stock\u00e9e.<\/p>\n<p style=\"margin-bottom: 0cm;\">Cela se traduit par une am\u00e9lioration de la s\u00e9curit\u00e9, une diminution de la redondance du code, et une augmentation des performances.<\/p>\n<h5 class=\"western\">Des proc\u00e9dures stock\u00e9es pour am\u00e9liorer la s\u00e9curit\u00e9<\/h5>\n<p style=\"margin-bottom: 0cm;\">Elles peuvent fournir une protection contre les attaques d&rsquo;injection SQL, principalement contre celles qui utilisent un op\u00e9rateur AND ou OR pour ajouter des commandes \u00e0 une valeur de param\u00e8tre d&rsquo;entr\u00e9e valide. Les programmes clients n&rsquo;acc\u00e9dant plus directement aux tables. Toutes les op\u00e9rations de gestion des donn\u00e9es sont effectu\u00e9es via des proc\u00e9dures stock\u00e9es.<\/p>\n<h5 class=\"western\">Des proc\u00e9dures stock\u00e9es pour centraliser les requ\u00eates<\/h5>\n<p style=\"margin-bottom: 0cm;\">Diff\u00e9rentes applications peuvent acc\u00e9der \u00e0 la m\u00eame base de donn\u00e9es et avoir les m\u00eames fonctionnalit\u00e9s. Les proc\u00e9dures stock\u00e9es peuvent alors servir \u00e0 factoriser ce code SQL commun ce qui permet de diminuer la redondance et facilite la maintenance du code.<\/p>\n<h5 class=\"western\">Des proc\u00e9dures stock\u00e9es pour augmenter les performances<\/h5>\n<p style=\"margin-bottom: 0cm;\">Les commandes n\u2019ont pas \u00e0 \u00eatre analys\u00e9es plusieurs fois, elles sont (pr\u00e9)compil\u00e9es sur le serveur et bien moins d\u2019informations transitent sur le r\u00e9seau, le trafic y est donc limit\u00e9.<\/p>\n<p style=\"margin-bottom: 0cm;\">Les proc\u00e9dures stock\u00e9es sont particuli\u00e8rement utiles quand les clients qui acc\u00e8dent \u00e0 la base de donn\u00e9es ne sont pas sur le m\u00eame serveur.<\/p>\n<p style=\"margin-bottom: 0cm;\">\n<p style=\"margin-bottom: 0cm;\">Le principal inconv\u00e9nient des proc\u00e9dures stock\u00e9es, et  qu&rsquo;elles nous rendent compl\u00e8tement d\u00e9pendantes de l&rsquo;\u00e9diteur de la base de donn\u00e9es, puisqu&rsquo;il n&rsquo;existe pas de langage universel de d\u00e9veloppement de proc\u00e9dures stock\u00e9es.<\/p>\n<p style=\"margin-bottom: 0cm;\">\n<h5 class=\"western\">Une migration simplifi\u00e9e par le respect du standard SQL 2003<\/h5>\n<p style=\"margin-bottom: 0cm;\" align=\"left\">\n<p style=\"margin-bottom: 0cm;\">Les proc\u00e9dures stock\u00e9es de MySQL 5 respectent certaines recommandations du standard SQL 2003. La syntaxe est donc tr\u00e8s proche de la syntaxe de DB2 ce qui permet une migration facile entre les deux outils. La migration en provenance d&rsquo;Oracle ou de MS SQL Server impliquera plus de travail manuel \u00e9tant donn\u00e9 que leurs bases de donn\u00e9es ne respectent pas autant le standard.<span style=\"background: transparent none repeat scroll 0% 0%;\"> <\/span><\/p>\n<p style=\"margin-bottom: 0cm;\"><span style=\"text-decoration: underline;\"><strong><span style=\"background: transparent none repeat scroll 0% 0%;\">Astuce :<\/span><\/strong><\/span><span style=\"background: transparent none repeat scroll 0% 0%;\"> <\/span>Pour migrer d&rsquo;Oracle vers MySQL on peut utiliser les outils de migration Oracle vers DB2 puis passer de DB2 \u00e0 MySQL qui sont tr\u00e8s proches.<\/p>\n<h5 class=\"western\">Syntaxe<\/h5>\n<pre>CREATE\r\n[DEFINER = { user | CURRENT_USER }]\r\nPROCEDURE sp_name([parametres])\r\n\u00a0\u00a0\u00a0 LANGUAGE SQL\r\n\u00a0 | [NOT] DETERMINISTIC\r\n\u00a0 | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }\r\n\u00a0 | SQL SECURITY { DEFINER | INVOKER }\r\n\u00a0 | COMMENT 'string'\r\nroutines<\/pre>\n<p><em>(<a title=\"MySQL 5.O, un SGBDR mature ? -- (part 4\/4)\" href=\"http:\/\/dasini.net\/blog\/2008\/10\/30\/mysql-50-un-sgbdr-mature-part-44\/\">suite -&gt;<\/a>)<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Les proc\u00e9dures stock\u00e9es sont des listes de commandes qui peuvent \u00eatre compil\u00e9es et stock\u00e9es sur le serveur. Elles permettent de d\u00e9placer une partie de la logique m\u00e9tier d&rsquo;une application de base de donn\u00e9es du client vers le serveur. Les clients n\u2019ont plus besoin de soumettre \u00e0 nouveau toute la commande, mais font simplement r\u00e9f\u00e9rence \u00e0 la proc\u00e9dure stock\u00e9e.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"footnotes":""},"categories":[8],"tags":[241,12,15,16,14],"class_list":["post-26","post","type-post","status-publish","format-standard","hentry","category-mysql","tag-mysql","tag-mysql-5","tag-procedure-stockees","tag-routines","tag-sgbd"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9LfWW-q","jetpack-related-posts":[{"id":634,"url":"https:\/\/dasini.net\/blog\/2009\/06\/24\/le-programmateur-devenements-event-scheduler-part-56\/","url_meta":{"origin":26,"position":0},"title":"Le programmateur d&rsquo;\u00e9v\u00e9nements ( Event Scheduler ) (part 5\/6)","author":"Olivier DASINI","date":"24 juin 2009","format":false,"excerpt":"Appel d'une proc\u00e9dure stock\u00e9e Il est possible d'appeler des proc\u00e9dures stock\u00e9es dans un \u00e9v\u00e9nement. mysql> CREATE EVENT `_event`.`appel_ps` ON SCHEDULE AT CURRENT_TIMESTAMP DO \/*Appel de la proc\u00e9dure stock\u00e9e*\/ CALL pro_stock.insert_profil('Olivier', 'DASINI', 'Orange');","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":127,"url":"https:\/\/dasini.net\/blog\/2008\/11\/14\/presentation-mysql-50-un-sgbdr-mature\/","url_meta":{"origin":26,"position":1},"title":"Pr\u00e9sentation : MySQL 5.0, un SGBDR mature ?","author":"Olivier DASINI","date":"14 novembre 2008","format":false,"excerpt":"MySQL est le SGBDR Open Source le plus populaire au monde. Sa cinqui\u00e8me version, sortie en octobre 2005, permet de mieux r\u00e9pondre aux probl\u00e9matiques d\u2019entreprise. Au menu des nouveaut\u00e9s fonctionnelles : les vues, les proc\u00e9dures stock\u00e9es, les d\u00e9clencheurs, de nouveaux moteurs de stockage, la base de donn\u00e9es INFORMATION_SCHEMA et diverses\u2026","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":41,"url":"https:\/\/dasini.net\/blog\/2008\/10\/30\/mysql-50-un-sgbdr-mature-part-44\/","url_meta":{"origin":26,"position":2},"title":"MySQL 5.0 : Un SGBDR mature ? &#8212; (part 4\/4)","author":"Olivier DASINI","date":"30 octobre 2008","format":false,"excerpt":"Les d\u00e9clencheurs (triggers) sont des ordres de d\u00e9clenchement d'op\u00e9rations quand un \u00e9v\u00e8nement survient sur une table.","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1096,"url":"https:\/\/dasini.net\/blog\/2011\/08\/23\/numero-special-mysql-dans-phpsolutions\/","url_meta":{"origin":26,"position":3},"title":"Num\u00e9ro sp\u00e9cial MySQL dans phpsolutions","author":"Olivier DASINI","date":"23 ao\u00fbt 2011","format":false,"excerpt":"Le magazine phpsolutions propose ce mois-ci, un num\u00e9ro sp\u00e9cial \"Utilisez PHP avec MySQL\". Au sommaire: Introduction \u00e0 la s\u00e9curit\u00e9 et \u00e0 la gestion des utilisateurs avec MySQL par Olivier Dasini Introduction \u00e0 PHP\/MySQL et l'ORM Doctrine par Julien Tailleu Les moteurs de tables MyISAM et InnoDB depuis MySQL 5.5 par\u2026","rel":"","context":"Dans &quot;MariaDB&quot;","block_context":{"text":"MariaDB","link":"https:\/\/dasini.net\/blog\/category\/mariadb\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":11,"url":"https:\/\/dasini.net\/blog\/2008\/10\/27\/mysql-50-un-sgbdr-mature-part-14\/","url_meta":{"origin":26,"position":4},"title":"MySQL 5.0 : Un SGBDR mature ? &#8212; (part 1\/4)","author":"Olivier DASINI","date":"27 octobre 2008","format":false,"excerpt":"MySQL est le SGBD Open Source le plus populaire au monde. Sa cinqui\u00e8me version, sortie en octobre 2005, permet de mieux r\u00e9pondre aux probl\u00e9matiques d'entreprise. Au menu des nouveaut\u00e9s fonctionnelles :","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":641,"url":"https:\/\/dasini.net\/blog\/2009\/06\/29\/le-programmateur-d%e2%80%99evenements-event-scheduler-part-66\/","url_meta":{"origin":26,"position":5},"title":"Le programmateur d\u2019\u00e9v\u00e9nements ( Event Scheduler ) (part 6\/6)","author":"Olivier DASINI","date":"29 juin 2009","format":false,"excerpt":"Limitations et restrictions Certaines commandes MySQL ne sont pas permises dans un \u00e9v\u00e9nement. Verrouiller une table est interdit: LOCK TABLES, UNLOCK TABLES. Il n'est malheureusement pas possible de charger des donn\u00e9es avec la commande LOAD DATA INFILE. Les requ\u00eates pr\u00e9par\u00e9es (PREPARED STATEMENT) ne peuvent \u00eatre cr\u00e9\u00e9es dans un \u00e9v\u00e9nement.","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/26","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/comments?post=26"}],"version-history":[{"count":12,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/26\/revisions"}],"predecessor-version":[{"id":269,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/26\/revisions\/269"}],"wp:attachment":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/media?parent=26"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/categories?post=26"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/tags?post=26"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}