====== đŸ—„ïž MySQL : organiser les donnĂ©es ====== {{tag>ntic mysql base_de_donnees programmation php linux logiciel_libre kaizen ermitezen}} ===== Bienvenue dans mon espace MySQL ===== Une application informatique a souvent besoin de mĂ©moriser des informations : des utilisateurs, des recettes, des articles, des rĂ©sultats, des paramĂštres, des dĂ©penses... Une base de donnĂ©es permet d'organiser ces informations afin de pouvoir les retrouver, les modifier, les relier et les exploiter. MySQL est un systĂšme de gestion de bases de donnĂ©es relationnelles particuliĂšrement utilisĂ© dans les applications Web, notamment avec PHP. Pour moi, MySQL est avant tout un outil pratique pour construire des applications personnelles et comprendre comment les donnĂ©es peuvent ĂȘtre organisĂ©es. L'objectif n'est pas de connaĂźtre SQL par cƓur. Il est de comprendre suffisamment les donnĂ©es pour pouvoir crĂ©er, modifier, rĂ©parer et faire Ă©voluer ses propres outils. ===== Qu'est-ce que MySQL ? ===== MySQL est un SGBD (systĂšme de gestion de bases de donnĂ©es) relationnelles. Une base relationnelle organise les informations principalement Ă  l'aide de tables. On retrouve notamment : * Base de donnĂ©es : ensemble organisĂ© de tables et d'autres objets ; * Table : structure destinĂ©e Ă  stocker un type d'information ; * Colonne : propriĂ©tĂ© ou caractĂ©ristique d'une donnĂ©e ; * Ligne : enregistrement individuel ; * ClĂ© primaire : identifiant permettant de distinguer les enregistrements ; * ClĂ© Ă©trangĂšre : Ă©lĂ©ment permettant de relier des informations entre tables. Par exemple, une application de gestion de recettes pourrait contenir : * une table "recettes" ; * une table "ingredients" ; * une table "categories". Les relations entre ces tables permettent d'Ă©viter autant que possible la duplication inutile des informations et de conserver une structure cohĂ©rente. ===== Comprendre avant de construire ===== Une bonne base de donnĂ©es commence avant mĂȘme d'Ă©crire la premiĂšre requĂȘte. Il faut d'abord se demander : * Quelles informations dois-je conserver ? * Comment sont-elles liĂ©es ? * Quelles informations peuvent ĂȘtre rĂ©pĂ©tĂ©es ? * Comment vais-je retrouver une donnĂ©e ? * Que se passe-t-il lorsque je la modifie ou la supprime ? Prendre quelques minutes pour rĂ©flĂ©chir Ă  la structure peut Ă©viter beaucoup de problĂšmes plus tard. Une structure simple et comprise vaut mieux qu'une structure compliquĂ©e que l'on ne maĂźtrise pas. ===== MySQL et PHP ===== MySQL et PHP forment une combinaison classique pour crĂ©er des applications Web. On peut notamment les utiliser pour : * un site avec espace membre ; * une application de budget ; * un suivi personnel ; * un catalogue ; * un outil de gestion ; * un systĂšme de notes. La communication entre PHP et MySQL passe notamment par PDO, qui fournit une interface permettant Ă  PHP de dialoguer avec diffĂ©rentes bases de donnĂ©es. Voir : * [[ntic:php:connexion-bdd|Connexion PHP/MySQL avec PDO]] * [[ntic:php:pdo|PDO et les bases de donnĂ©es]] ===== đŸ–„ïž phpMyAdmin : observer et administrer ===== [[https://www.phpmyadmin.net/|phpMyAdmin]] est une interface Web permettant d'administrer une base MySQL. Il permet notamment de : * crĂ©er et modifier des bases ; * crĂ©er et modifier des tables ; * consulter les donnĂ©es ; * exĂ©cuter des requĂȘtes SQL ; * importer et exporter des donnĂ©es ; * effectuer certaines opĂ©rations de maintenance. C'est un outil particuliĂšrement pratique pour apprendre, observer ce qui se passe dans une base et effectuer rapidement certaines opĂ©rations d'administration. Mais l'interface graphique ne remplace pas la comprĂ©hension de SQL. Voir ce que fait un outil est intĂ©ressant ; comprendre ce qu'il fait est encore mieux. ===== 📖 Les fiches : apprendre SQL ===== Les fiches servent de mĂ©moire externe et de rĂ©fĂ©rence rapide. Elles privilĂ©gient : * la comprĂ©hension ; * les exemples simples ; * la pratique ; * les bonnes habitudes ; * l'autonomie. ==== Les fondamentaux ==== * [[ntic:mysql:creation-base|CrĂ©er une base de donnĂ©es]] * [[ntic:mysql:creation-table|CrĂ©er une table]] * [[ntic:mysql:types-donnees|Les types de donnĂ©es]] * [[ntic:mysql:cles|ClĂ©s primaires et clĂ©s Ă©trangĂšres]] ==== Interroger les donnĂ©es ==== * [[ntic:mysql:select|SELECT : rechercher des donnĂ©es]] * [[ntic:mysql:where|WHERE : filtrer les rĂ©sultats]] * [[ntic:mysql:order-by|ORDER BY : trier les rĂ©sultats]] * [[ntic:mysql:limit|LIMIT : limiter les rĂ©sultats]] ==== Modifier les donnĂ©es ==== * [[ntic:mysql:insert|INSERT : ajouter des donnĂ©es]] * [[ntic:mysql:update|UPDATE : modifier des donnĂ©es]] * [[ntic:mysql:delete|DELETE : supprimer des donnĂ©es]] ==== Aller plus loin ==== * [[ntic:mysql:jointures|Les jointures SQL]] * [[ntic:mysql:index|Les index]] * [[ntic:mysql:transactions|Les transactions]] ===== ✂ Les snippets SQL ===== Les snippets sont de petites requĂȘtes ou structures conservĂ©es pour pouvoir ĂȘtre adaptĂ©es lors d'un prochain projet. Ils peuvent notamment servir Ă  : * crĂ©er rapidement une structure ; * retrouver une requĂȘte oubliĂ©e ; * tester une idĂ©e ; * Ă©viter de réécrire une solution dĂ©jĂ  comprise. Ils restent cependant des aides-mĂ©moire, pas des recettes magiques. Exemples : * [[ntic:mysql:snippet:creation-table|CrĂ©er une table]] * [[ntic:mysql:snippet:ajout-utilisateur|Ajouter un utilisateur]] * [[ntic:mysql:snippet:recherche|RequĂȘtes de recherche courantes]] * [[ntic:mysql:snippet:backup|Sauvegarde d'une base]] ===== 🧭 Une approche Ermite Zen des donnĂ©es ===== ==== SimplicitĂ© ==== Une base de donnĂ©es doit rester aussi simple que possible. Une structure compliquĂ©e peut parfois ĂȘtre nĂ©cessaire, mais la complexitĂ© ne doit pas devenir un objectif. Faire simple lorsqu'on peut faire simple. ==== Organisation ==== Chaque donnĂ©e doit avoir une place comprĂ©hensible. Une bonne organisation facilite la lecture, la maintenance et les Ă©volutions futures. Cette idĂ©e rejoint notamment l'esprit du 5S : rĂ©duire le dĂ©sordre et rendre l'organisation visible et comprĂ©hensible. ==== ComprĂ©hension ==== Utiliser SQL ne signifie pas simplement mĂ©moriser "SELECT", "INSERT" ou "UPDATE". Il faut progressivement comprendre : * comment les tables sont structurĂ©es ; * comment les donnĂ©es sont reliĂ©es ; * comment une requĂȘte est exĂ©cutĂ©e ; * pourquoi une requĂȘte fonctionne ; * pourquoi elle peut ĂȘtre lente ou incorrecte. La documentation et les outils de recherche peuvent servir de mĂ©moire externe. ==== Kaizen ==== Une base de donnĂ©es n'est pas forcĂ©ment parfaite dĂšs sa crĂ©ation. On peut l'amĂ©liorer petit Ă  petit : * corriger une structure ; * simplifier une requĂȘte ; * ajouter un index pertinent ; * amĂ©liorer la sĂ©curitĂ© ; * supprimer des donnĂ©es inutiles ; * documenter une partie obscure ; * amĂ©liorer les sauvegardes. Une petite amĂ©lioration reste une amĂ©lioration. ===== 🔐 DonnĂ©es, sĂ©curitĂ© et autonomie ===== Une base de donnĂ©es contient parfois des informations importantes. Il faut donc penser dĂšs le dĂ©part Ă  : * la sĂ©curitĂ© des accĂšs ; * la validation des donnĂ©es ; * les requĂȘtes prĂ©parĂ©es ; * les permissions ; * les sauvegardes ; * la rĂ©cupĂ©ration des donnĂ©es. L'autonomie numĂ©rique ne consiste pas seulement Ă  savoir crĂ©er une base. Elle consiste aussi Ă  savoir ne pas perdre ce que l'on a créé. ===== 🐧 MySQL dans un environnement libre ===== MySQL s'intĂšgre naturellement dans mon univers informatique fondĂ© autant que possible sur Linux et les logiciels libres. Au-delĂ  du logiciel lui-mĂȘme, je privilĂ©gie lorsque c'est possible : * les outils ouverts ; * les formats documentĂ©s ; * les solutions interopĂ©rables ; * les donnĂ©es que je peux rĂ©cupĂ©rer ; * les logiciels que je peux installer et administrer moi-mĂȘme. Le but n'est pas de rechercher une puretĂ© technologique. Le but est de conserver le choix et la comprĂ©hension. ===== đŸŒ± Mon parcours MySQL ===== MySQL accompagne plusieurs de mes projets personnels. Certaines bases sont trĂšs simples. D'autres deviennent plus complexes au fur et Ă  mesure que le projet grandit. Chaque expĂ©rience permet d'apprendre quelque chose : * modĂ©liser des donnĂ©es ; * comprendre les relations ; * Ă©crire de meilleures requĂȘtes ; * amĂ©liorer les performances ; * renforcer la sĂ©curitĂ© ; * automatiser certaines opĂ©rations ; * organiser plus proprement un projet. Les anciennes bases peuvent Ă©galement devenir des terrains d'amĂ©lioration. Un code ancien n'est pas forcĂ©ment inutile. Une ancienne structure peut ĂȘtre Ă©tudiĂ©e, comprise, puis progressivement modernisĂ©e. ===== 🧘 MySQL comme exercice de simplicitĂ© ===== Une base de donnĂ©es peut rapidement devenir complexe. Mais son rĂŽle fondamental reste Ă©tonnamment simple : mettre de l'ordre dans des informations afin de pouvoir les retrouver lorsque l'on en a besoin. C'est peut-ĂȘtre lĂ  que se trouve l'intĂ©rĂȘt de MySQL dans une dĂ©marche Ermite Zen. Organiser sans compliquer. Stocker sans accumuler inutilement. Comprendre avant d'ajouter. AmĂ©liorer sans tout reconstruire. Et conserver suffisamment de simplicitĂ© pour pouvoir revenir sur son propre travail plusieurs annĂ©es plus tard. ===== Mon espace MySQL Ă©volue ===== Ce wiki conserve mes notes, mes essais, mes solutions et mes dĂ©couvertes. Certaines pages seront amĂ©liorĂ©es. Certaines requĂȘtes seront remplacĂ©es. Certaines techniques deviendront obsolĂštes. C'est normal. Le but n'est pas de produire une documentation parfaite. C'est de garder une trace utile de ce que j'apprends et de ce que j'expĂ©rimente. Comprendre. Organiser. ExpĂ©rimenter. Simplifier. AmĂ©liorer.