
{"id":334,"date":"2008-12-13T17:26:56","date_gmt":"2008-12-13T16:26:56","guid":{"rendered":"http:\/\/dasini.net\/blog\/?p=334"},"modified":"2009-01-04T20:52:16","modified_gmt":"2009-01-04T19:52:16","slug":"les-nouveautes-de-mysql-51-part-45","status":"publish","type":"post","link":"https:\/\/dasini.net\/blog\/2008\/12\/13\/les-nouveautes-de-mysql-51-part-45\/","title":{"rendered":"Les nouveaut\u00e9s de MySQL 5.1 &#8212; (part 4\/5)"},"content":{"rendered":"<p><!-- \t \t --><br \/>\n<em>(<a title=\"Les nouveaut\u00e9s de MySQL 5.1 -- (part 3\/5)\" href=\"http:\/\/dasini.net\/blog\/2008\/12\/06\/les-nouveautes-de-mysql-51-part-35\/\">&lt;- pr\u00e9c\u00e9dent<\/a>)<\/em><br \/>\n<!-- \t \t --><\/p>\n<h2>Le moteur de stockage CSV<\/h2>\n<p>Le moteur de stockage CSV n&rsquo;est pas une vraie nouveaut\u00e9. Il est disponible depuis MySQL 4.1.4 (MySQL 5.1 pour M.S. Windows). Sa particularit\u00e9 est de stocker les donn\u00e9es dans un fichier texte au format CSV (<em>Comma<\/em> <em>Separated<\/em> <em>Values<\/em>) o\u00f9 les donn\u00e9es sont s\u00e9par\u00e9es par une virgule. Les avantages sont multiples, comme la possibilit\u00e9 d&rsquo;\u00e9diter les donn\u00e9es avec un \u00e9diteur de texte ou un tableur(Open Office Calc, Excel&#8230;) ou encore la possibilit\u00e9 de charger simplement d&rsquo;\u00e9normes volumes de donn\u00e9es dans le serveur MySQL.<\/p>\n<p>Cr\u00e9er sa table au format CSV est tr\u00e8s simple. On reste dans la logique MySQL de cr\u00e9ation de table : il faut en fait simplement sp\u00e9cifier CSV comme moteur (il n&rsquo;est pas possible d&rsquo;avoir des index, ni du partitionnement).<\/p>\n<p>Pour cr\u00e9er une table au format CSV:<\/p>\n<pre>CREATE TABLE t_csv (\r\n   id int, nom CHAR(50),\r\n   prenom CHAR(50)\r\n) ENGINE=CSV;<\/pre>\n<h2>Le support de XML\/XPath<\/h2>\n<p>A partir de MySQL version 5.1.5, un support basique de XML est impl\u00e9ment\u00e9 sous la forme de deux fonctions: <strong>ExtractValue<\/strong> et <strong>UpdateXML<\/strong>.<\/p>\n<ul>\n<li><span style=\"text-decoration: underline;\">ExtractValue<\/span> permet d&rsquo;extraire les valeurs des diff\u00e9rentes balises,<\/li>\n<\/ul>\n<ul>\n<li><span style=\"text-decoration: underline;\">UpdateXML<\/span> permet de \tmodifier la sortie d&rsquo;un document XML.<\/li>\n<\/ul>\n<p>Quelques exemples d&rsquo;utilisation de ces deux fonctions avec la table <em>t_xml<\/em> et le fichier XML suivant (contenu dans le champ texte de la table <span style=\"text-decoration: underline;\">t_xml<\/span>)<\/p>\n<p>Fichier XML et la table t_xml:<\/p>\n<pre>&lt;?xml version=\"1.0\" encoding=\"ISO-8859-1\"?&gt;\r\n&lt;profil&gt;\r\n   &lt;formation categorie=\"MySQL\" nbr_formation=\"5\"&gt;\r\n      &lt;formateur&gt;Olivier DASINI&lt;\/formateur&gt;\r\n      &lt;formateur&gt;Pierre DUMONT&lt;\/formateur&gt;\r\n      &lt;Entreprise&gt;Anaska&lt;\/Entreprise&gt;\r\n   &lt;\/formation&gt;\r\n   &lt;formation categorie=\"PHP\" nbr_formation=\"5\"&gt;\r\n      &lt;formateur&gt;Olivier DASINI&lt;\/formateur&gt;\r\n      &lt;formateur&gt;Cyril PIERRE DE GEYER&lt;\/formateur&gt;\r\n      &lt;formateur&gt;Romain BOURDON&lt;\/formateur&gt;\r\n      &lt;formateur&gt;Julien PAULI&lt;\/formateur&gt;\r\n      &lt;Entreprise&gt;Anaska&lt;\/Entreprise&gt;\r\n   &lt;\/formation&gt;\r\n   &lt;formation categorie=\"Linux\" nbr_formation=\"10\"&gt;\r\n      &lt;formateur&gt;Pierre DUMONT&lt;\/formateur&gt;\r\n      &lt;formateur&gt;Fabien ALLARD&lt;\/formateur&gt;\r\n      &lt;Entreprise&gt;Anaska&lt;\/Entreprise&gt;\r\n   &lt;\/formation&gt;\r\n   &lt;formation categorie=\"Open Office\" nbr_formation=\"3\"&gt;\r\n      &lt;formateur&gt;Sarah HAIM&lt;\/formateur&gt;\r\n      &lt;Entreprise&gt;Anaska&lt;\/Entreprise&gt;\r\n   &lt;\/formation&gt;\r\n&lt;\/profil&gt;\r\n\r\nCREATE TABLE t_xml (\r\n   id int(11) NOT NULL AUTO_INCREMENT,\r\n   texte text,\r\n   PRIMARY KEY (id)\r\n) ENGINE=MyISAM;<\/pre>\n<p align=\"left\">Pour avoir la liste des formateurs :<\/p>\n<p align=\"left\">\n<pre>mysql&gt; SELECT EXTRACTVALUE(texte,'\/profil\/formation\/formateur') AS result FROM\r\nt_xml\\G\r\n*************************** 1. row ***************************\r\nresult: Olivier DASINI Pierre DUMONT Olivier DASINI Cyril PIERRE DE GEYER Romain\r\nBOURDON Julien PAULI Pierre DUMONT Fabien ALLARD Sarah HAIM\r\n1 row in set (0.00 sec)<\/pre>\n<p align=\"left\">\n<p align=\"left\">\n<p align=\"left\">\n<p>R\u00e9cup\u00e9rer seulement les formateurs MySQL :<\/p>\n<pre>mysql&gt;SELECT  EXTRACTVALUE(texte,'\/profil\/formation[contains(@categorie,\"MySQL\")\r\n]\/formateur') AS result FROM t_xml\\G\r\n*************************** 1. row ***************************\r\nresult: Olivier DASINI Pierre DUMONT\r\n1 row in set (0.09 sec)<\/pre>\n<p align=\"left\">\n<p align=\"left\">\n<p align=\"left\">\n<p>Remplacer <span style=\"text-decoration: underline;\">&lt;formateur&gt;Olivier DASINI&lt;\/formateur&gt;<\/span> par <span style=\"text-decoration: underline;\">&lt;formateur&gt;Freshdaz&lt;\/formateur&gt;<\/span><\/p>\n<p align=\"left\">\n<pre>mysql&gt; SELECT UPDATEXML('&lt;profil&gt;&lt;formation categorie=\"MySQL\" nbr_formation=\"5\"&gt;\r\n&lt;formateur&gt;Olivier DASINI&lt;\/formateur&gt;&lt;formateur&gt;Pierre DUMONT&lt;\/formateur&gt;\r\n&lt;\/formation&gt;&lt;\/profil&gt;', '\/profil\/formation\/formateur[contains(.,\"Olivier\")]'\r\n, '&lt;formateur&gt;Freshdaz&lt;\/formateur&gt;') AS result\\G\r\n*************************** 1. row ***************************\r\nresult: &lt;profil&gt;&lt;formation categorie=\"MySQL\" nbr_formation=\"5\"&gt;\r\n&lt;formateur&gt;Freshdaz&lt;\/formateur&gt;&lt;formateur&gt;Pierre DUMONT&lt;\/formateur&gt;\r\n&lt;\/formation&gt;&lt;\/profil&gt;\r\n1 row in set (0.00 sec)<\/pre>\n<p><em>(<a title=\"Les nouveaut\u00e9s de MySQL 5.1 -- (part 5\/5)\" href=\"http:\/\/dasini.net\/blog\/2009\/01\/04\/les-nouveautes-de-mysql-51-part-55\/\">\u00e0 suivre&#8230; mysqlslap<\/a>)<\/em><\/p>\n<p align=\"left\">\n","protected":false},"excerpt":{"rendered":"<p>Le moteur de stockage CSV n&rsquo;est pas une vraie nouveaut\u00e9. Il est disponible depuis MySQL 4.1.4 (MySQL 5.1 pour M.S. Windows). Sa particularit\u00e9 est de stocker les donn\u00e9es dans un fichier texte au format CSV (Comma Separated Values) o\u00f9 les donn\u00e9es sont s\u00e9par\u00e9es par une virgule. Les avantages sont multiples, comme la possibilit\u00e9 d&rsquo;\u00e9diter les donn\u00e9es avec un \u00e9diteur de texte ou un tableur(Open Office Calc, Excel&#8230;) ou encore la possibilit\u00e9 de charger simplement d&rsquo;\u00e9normes volumes de donn\u00e9es dans le serveur MySQL.<\/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":[76,241,59,77,78],"class_list":["post-334","post","type-post","status-publish","format-standard","hentry","category-mysql","tag-csv","tag-mysql","tag-mysql-51","tag-xml","tag-xpath"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9LfWW-5o","jetpack-related-posts":[{"id":295,"url":"https:\/\/dasini.net\/blog\/2008\/12\/06\/les-nouveautes-de-mysql-51-part-35\/","url_meta":{"origin":334,"position":0},"title":"Les nouveaut\u00e9s de MySQL 5.1 &#8212; (part 3\/5)","author":"Olivier DASINI","date":"6 d\u00e9cembre 2008","format":false,"excerpt":"MySQL propose une solution de haute disponibilit\u00e9 : MySQL Cluster. Cette technologie permet de mettre en place une architecture cluster shared nothing \u00e0 l'aide de tables au format NDBCluster. Jusqu'\u00e0 MySQL 5.0, MySQL Cluster ne fonctionnait qu'enti\u00e8rement en m\u00e9moire. Ceci excluait donc certaines bases de donn\u00e9es trop volumineuses. La nouvelle\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":237,"url":"https:\/\/dasini.net\/blog\/2008\/11\/28\/les-nouveautes-de-mysql-51-part-15\/","url_meta":{"origin":334,"position":1},"title":"Les nouveaut\u00e9s de MySQL 5.1 &#8212; (part 1\/5)","author":"Olivier DASINI","date":"28 novembre 2008","format":false,"excerpt":"Que de chemin parcouru depuis ce 5 juillet 1999, date de lancement de MySQL 3.23.0. En plus des objectifs de simplicit\u00e9 d'administration, de hautes performances et de fiabilit\u00e9, se sont greff\u00e9es, au fur et \u00e0 mesure, les fonctionnalit\u00e9s les plus demand\u00e9es par les utilisateurs. La nouvelle version du SGBDR open-source\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":474,"url":"https:\/\/dasini.net\/blog\/2009\/03\/02\/presentation-vue-densemble-de-mysql-51\/","url_meta":{"origin":334,"position":2},"title":"Pr\u00e9sentation: Vue d&rsquo;ensemble de MySQL 5.1","author":"Olivier DASINI","date":"2 mars 2009","format":false,"excerpt":"Num\u00e9ro un pour les applications en ligne, MySQL se positionne maintenant sur le secteur des applications d\u2019entrep\u00f4ts de donn\u00e9es et d\u2019informatique d\u00e9cisionnelle\u2026 http:\/\/dasini.net\/blog\/presentations\/?#presentation_mysql51","rel":"","context":"Dans &quot;Pr\u00e9sentation&quot;","block_context":{"text":"Pr\u00e9sentation","link":"https:\/\/dasini.net\/blog\/category\/presentation\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":362,"url":"https:\/\/dasini.net\/blog\/2009\/01\/04\/les-nouveautes-de-mysql-51-part-55\/","url_meta":{"origin":334,"position":3},"title":"Les nouveaut\u00e9s de MySQL 5.1 &#8212; (part 5\/5)","author":"Olivier DASINI","date":"4 janvier 2009","format":false,"excerpt":"mysqlslap : un utilitaire de test de charge et de performance Disponible depuis MySQL 5.1.4, mysqlslap permet d'effectuer des tests de stress et de charge sur votre serveur MySQL. Vous pourrez alors tester les performances de votre SGBDR pr\u00e9f\u00e9r\u00e9, apr\u00e8s, par exemple, une nouvelle installation, un changement d'architecture ou apr\u00e8s\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":11,"url":"https:\/\/dasini.net\/blog\/2008\/10\/27\/mysql-50-un-sgbdr-mature-part-14\/","url_meta":{"origin":334,"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":41,"url":"https:\/\/dasini.net\/blog\/2008\/10\/30\/mysql-50-un-sgbdr-mature-part-44\/","url_meta":{"origin":334,"position":5},"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":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/334","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=334"}],"version-history":[{"count":10,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/334\/revisions"}],"predecessor-version":[{"id":363,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/334\/revisions\/363"}],"wp:attachment":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/media?parent=334"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/categories?post=334"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/tags?post=334"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}