home *** CD-ROM | disk | FTP | other *** search
/ .net 1998 October / dotnet_50.iso / pc / PC / Redac / doc MySQL 3.23 / manuel.doc (.txt) < prev    next >
Encoding:
Word Document  |  2000-08-10  |  2.5 MB  |  20,126 lines

Text Truncated. Only the first 1MB is shown below. Download the file for the complete contents.
  1.  
  2. |[pic][pic]                                                                                  |
  3. |[pic][pic][pic][pic]                                                                        |
  4. |[pic|[pic]                                                                                 |
  5. |]   |                                                                                      |
  6. |    |[pic]                                                                                 |
  7. |    |[pic]                                                                                 |
  8. |    |1 Informations g√©n√©rales √† propos de MySQL                                            |
  9. |    |Ceci est la manuel de r√©f√©rence de MySQL; il correspond √† la version 3.23.2-alpha de  |
  10. |    |MySQL.                                                                                |
  11. |    |MySQL est un langage rapide, multi-threaded, multi-utilisateur, c'est aussi un serveur|
  12. |    |de base de donn√©es SQL robuste (Structured Query Language).                           |
  13. |    |Pour les plates-formes Unix et OS/2, MySQL est libre; pour les plates-formes Microsoft|
  14. |    |il est n√©cessaire d'acquitter une licence apr√®s un temps d'essai de 30 jours. 3       |
  15. |    |Support et licences MySQL).                                                           |
  16. |    |The MySQL home page fournit les derni√®res informations concernant MySQL.              |
  17. |    |Pour une description des capacit√©s de MySQL, 1.4 Caract√©ristiques de MySQL.           |
  18. |    |Pour les instructions d'installation, cf. section G Commentaires sur le portage vers  |
  19. |    |d'autres syst√®mes d'exploitation.                                                     |
  20. |    |Pour une information sur la mise √† jour de la version 3.21, 4.16.2 Mise √† jour de a   |
  21. |    |3.21 vers 3.22.                                                                       |
  22. |    |Pour un exemple complet, 8 Exemple MySQL.                                             |
  23. |    |Pour des informations sur SQL et les benchmark, reportez vous au dossier de benchmark.|
  24. |    |Dans les distributions source, il est situ√© dans le dossier ``bench'' . Dans les      |
  25. |    |distributions compil√©es, il est situ√© dans le dossier ``sql-bench''                   |
  26. |    |Pour un historique des caract√©ristiques et des bogues corrig√©s, D Historique des      |
  27. |    |versions de MySQL.                                                                    |
  28. |    |Pour une liste des bogues connus et des lacunes de MySQL, E Erreurs connues et manques|
  29. |    |de MySQL.                                                                             |
  30. |    |Pour les prochaines fonctionnalit√©s, F Liste de voeux pour les versions futures de    |
  31. |    |MySQL (la TODO).                                                                      |
  32. |    |Pour la liste de tous les contributeurs √† ce produit, C Contributions √† MySQL.        |
  33. |    |IMPORTANT:                                                                            |
  34. |    |Envoyer les bugs ou erreurs, questions ou commentaires √† la liste de diffusion :      |
  35. |    |mysql@lists.mysql.com. 2.3 Comment rapporter des bugs et des probl√®mes.               |
  36. |    |Dans les distributions source, le script mysqlbug est rang√© dans le dossier           |
  37. |    |``scripts''. Dans les distributions compil√©es, mysqlbug est rang√© dans le dossier     |
  38. |    |``bin''.                                                                              |
  39. |    |Si vous avez des suggestions concernant les ajouts de fonctionnalit√©s ou corrections √†|
  40. |    |ce manuel, envoyer les √† la liste de diffusion (en anglais)                           |
  41. |    |(@email:{mysql@lists.mysql.com}), avec le sujet suivant : documentation suggestion :  |
  42. |    |[Insert topic here]. 2.1 Les listes de diffusion MySQL                                |
  43. |    |1.1 Qu'est ce que MySQL?                                                              |
  44. |    |MySQL est un v√©ritable serveur de base de donn√©es SQL multi-utilisateur et            |
  45. |    |multi-threaded. SQL est le plus populaire langage de base de donn√©es dans le monde.   |
  46. |    |MySQL est une configuration client/serveur ce qui consiste en un serveur d√©mon mysqld,|
  47. |    |diff√©rents programmes clients et des librairies.                                      |
  48. |    |SQL est un langage standardis√© qui rend facile le stockage, la mise √† jour et l'acc√®s |
  49. |    |√† l'information. Par exemple, vous pouvez utiliser le SQL pour r√©cup√©rer des          |
  50. |    |informations sur un produit ou stocker des informations client sur un site web. MySQL |
  51. |    |est suffisamment rapide et flexible pour g√©rer des historiques et des images.         |
  52. |    |Les principaux objectifs de MySQL sont la rapidit√©, la robustesse et la facilit√©      |
  53. |    |d'utilisation. MySQL a √©t√© originellement d√©velopp√© parce que nous au TcX avions      |
  54. |    |besoin d'un serveur SQL qui puisse g√©rer des grandes bases de donn√©es de mani√®re plus |
  55. |    |rapide que ce que pouvaient offrir les distributeurs de bases de donn√©es. Nous        |
  56. |    |utilisons donc MySQL depuis 1996 dans un environnement de plus de 40 bases de donn√©es |
  57. |    |contenant 10,000 tables, dont plus de 500 contiennent plus de 7 millions              |
  58. |    |d'enregistrements. C'est environ 100 giga octets de donn√©es critiques.                |
  59. |    |La base sur laquelle MySQL est construite est un ensemble de routines qui ont √©t√©     |
  60. |    |largement √©prouv√©es pendant des ann√©es dans un environnement de production exigeant.  |
  61. |    |M√™me si MySQL est encore en d√©veloppement, il propose d√©j√† un ensemble de             |
  62. |    |fonctionnalit√©s riches et extr√™mement utiles.                                         |
  63. |    |La prononciation classique de MySQL est ``Maille Ess Ku Ell''                         |
  64. |    |1.2 A propos de ce manuel                                                             |
  65. |    |Ce manuel est actuellement disponible en Texinfo, texte plein, Info, HTML, PostScript |
  66. |    |and PDF versions. A cause de leur taille, les versions en PostScript et PDF ne sont   |
  67. |    |pas inclues dans la distribution principale de MySQL, mais sont disponibles sur       |
  68. |    |http://www.mysql.com.                                                                 |
  69. |    |Le document initial est le fichier Texinfo. La version HTML a √©t√© g√©n√©r√©e             |
  70. |    |automatiquement avec une version modifi√©e de texi2html. Les versions plain text et    |
  71. |    |Info ont √©t√© produites avec makeinfo. La version Postscript version a √©t√© produite en |
  72. |    |utilisant texi2dvi et dvips. La version PDF a √©t√© produite avec l'utilitaire          |
  73. |    |Ghostscript ps2pdf.                                                                   |
  74. |    |La version am√©ricaine de ce manuel a √©t√© √©crite et mise √† jour par David Axmark,      |
  75. |    |Michael (Monty) Widenius, Paul DuBois and Kim Aldale. Pour les autres contributeurs,  |
  76. |    |cf. section C Contributions √† MySQL.                                                  |
  77. |    |1.2.1 Conventions utilis√©es dans ce manuel                                            |
  78. |    |Ce manuel utilise certaines conventions typographiques :                              |
  79. |    |constant                                                                              |
  80. |    |La police √† empattement constant est utilis√©e pour les noms de commandes et les       |
  81. |    |options; les d√©clarations en SQL; les noms de base de donn√©es, tables et colonnes; le |
  82. |    |code en C et Perl; et les variables d'environnement. Exemple: ``Pour obtenir une aide |
  83. |    |succinte, utilisez l'option --help de mysqladmin.''                                   |
  84. |    |``filename''                                                                          |
  85. |    |La police √† empattement constant avec des guillemets est utilis√©e pour les noms de    |
  86. |    |fichiers et les arborescences. Exemple: ``La distribution est install√©e dans le       |
  87. |    |dossier ``/usr/local/''.''                                                            |
  88. |    |``c''                                                                                 |
  89. |    |La police √† empattement constant avec des guillemets est aussi utilis√©e pour indiquer |
  90. |    |une suite de caract√®res. Exemple: ``Pour indiquer un caract√®re joker, utilisez le     |
  91. |    |caract√®re ``%''.''                                                                    |
  92. |    |italic                                                                                |
  93. |    |La police italic est utilis√©e pour mettre en relief certains termes, Comme ceci.      |
  94. |    |boldface                                                                              |
  95. |    |La police Gras pour un acc√®s √† des noms privil√©gi√©s (e.g., ``Ne distribuez pas le     |
  96. |    |droit de process √† la l√©g√®re'') et souligner des termes sp√©cialement importants.      |
  97. |    |Lorsque les commandes sont d√©crites et doivent √™tre ex√©cut√©es par un programme        |
  98. |    |sp√©cifique, le programme est indiqu√©e par le prompt avec la commande. Par exemple,    |
  99. |    |shell> indique que la commande doit √™tre ex√©cut√©e √† partir du login shell, et mysql>  |
  100. |    |indique que la commande doit √™tre ex√©cut√©e √† partir client mysql.                     |
  101. |    |                                                                                      |
  102. |    |shell> Tapez une commande shell ici                                                   |
  103. |    |                                                                                      |
  104. |    |mysql> Tapez une commande mysql ici                                                   |
  105. |    |Les commandes Shell d√©crites utilisent la syntaxe shell Bourne. Si vous utilisez un   |
  106. |    |shell csh, vous devez formuler vos commandes un peu diff√©remment.                     |
  107. |    |Par exemple, la s√©quence de mise √† jour d'une variable d'environnement et d'ex√©cution |
  108. |    |d'une commande se pr√©sente comme suit dans la syntaxe Bourne:                         |
  109. |    |                                                                                      |
  110. |    |shell> VARNAME=value some_command                                                     |
  111. |    |pour csh:                                                                             |
  112. |    |shell> setenv VARNAME value                                                           |
  113. |    |                                                                                      |
  114. |    |shell> some_command                                                                   |
  115. |    |Les noms de base de donn√©es, tables et colonnes sont souvent utilis√©s dans des        |
  116. |    |commandes. Pour indiquer ces utilisations le manuel utilise la convention suivante,   |
  117. |    |nom_base_de_donnees, nom_table et nom_colonne. Par exemple, vous pourrez voir des     |
  118. |    |d√©clarations comme les suivantes:                                                     |
  119. |    |                                                                                      |
  120. |    |mysql> SELECT nom_colonne FROM nom_base_de_donnees.nom_table;                         |
  121. |    |Cela signifie que si vous devez utiliser une d√©claration similaire, vos utiliserez vos|
  122. |    |propres noms de base de donn√©es, de tables et de colonnes, peut-√™tre comme ceci :     |
  123. |    |                                                                                      |
  124. |    |mysql> SELECT nom_auteur FROM biblio_db.liste_auteur;                                 |
  125. |    |Les d√©clarations SQL peuvent √™tre √©crites en majuscules ou minuscules. Lorsque ce     |
  126. |    |manuel montre une expression SQL, les majuscules sont utilis√©es pour les mots clefs en|
  127. |    |cours de discussion et les minuscules pour le reste de l'expression. Donc vous pourrez|
  128. |    |voir ce qui suit pour la d√©claration du SELECT:                                       |
  129. |    |                                                                                      |
  130. |    |mysql> SELECT count(*) FROM nom_table;                                                |
  131. |    |D'autre part, si il s'agit de la fonction COUNT(), l'expression sera √©crite comme     |
  132. |    |suit:                                                                                 |
  133. |    |                                                                                      |
  134. |    |mysql> select COUNT(*) from nom_table;                                                |
  135. |    |Dans le cas o√π aucun mot clef n'est √† souligner, l'expression est en majuscule.       |
  136. |    |Dans la description de la syntaxe d'une expression, les crochets (``['' et ``]'') sont|
  137. |    |utilis√©s pour indiquer les options:                                                   |
  138. |    |                                                                                      |
  139. |    |DROP TABLE [IF EXISTS] nom_table                                                      |
  140. |    |Lorsque les √©l√©ments syntaxiques consistent en un certain nombres d'alternatives, les |
  141. |    |alternatives sont s√©par√©s par des barres verticales (``|''). Quand un membre d'un     |
  142. |    |ensemble de possibilit√©s peut √™tre choisit, les possibilit√©s sont list√©es √†           |
  143. |    |l'int√©rieure de crochets. Quand un membre doit √™tre choisit, les possibilit√©s sont    |
  144. |    |list√©es √† l'int√©rieure de (``{'' and ``''}):                                          |
  145. |    |                                                                                      |
  146. |    |TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)                                 |
  147. |    |                                                                                      |
  148. |    |{DESCRIBE | DESC} nom_table {nom_colonne | wild}                                      |
  149. |    |1.3 Historique de MySQL                                                               |
  150. |    |Nous avions l'intention d'utiliser mSQL pour se connecter √† nos tables fond√©es sur nos|
  151. |    |routines (ISAM). Apr√®s plusieurs tests, nous sommes venus √† la conclusion que mSQL    |
  152. |    |n'√©tait pas assez rapide, ni flexible pour nos besoins. La r√©sultat a √©t√© le codage   |
  153. |    |d'une nouvelle interface SQL pour notre base ave la plupart des interface API de mSQL.|
  154. |    |Ces API ont √©t√© choisis pour faciliter le portage sur des codes tiers.                |
  155. |    |La d√©rivation du nom MySQL n'est pas parfaitement claire. Notre arborescence et un    |
  156. |    |certain nombre de nos librairies et outils commencaient par le pr√©fixe "My" depuis des|
  157. |    |ann√©es. M√™me si la soeur de Monty (il y a quelques ann√©es) √©tait surnomm√©e My. A part |
  158. |    |les deux anecdotes le nom de MySQL est encore un myst√®re, pour nous aussi.            |
  159. |    |1.4 Caract√©ristiques de MySQL                                                         |
  160. |    |La liste suivante d√©crit quelques caract√©ristiques importantes de MySQL:              |
  161. |    |Compl√®tement multi-threaded en utilisant les threads du noyau. Cela signifie qu'il    |
  162. |    |peut utiliser plusieurs CPU.                                                          |
  163. |    |C, C++, Eiffel, Java, Perl, PHP, Python et TCL APIs. 20 API MySQL.                    |
  164. |    |Fonctionne sur diff√©rentes plates-formes. 4.2 Syst√®mes d'exploitation support√©s par   |
  165. |    |MySQL.                                                                                |
  166. |    |Plusieurs types de colonnes: entier sign√©/non-sign√© 1, 2, 3, 4et 8 bytes long, FLOAT, |
  167. |    |DOUBLE, CHAR, VARCHAR, TEXT, BLOB, DATE, TIME, DATETIME, TIMESTAMP, YEAR, SET et ENUM |
  168. |    |types. 7.2 Types de colonnes.                                                         |
  169. |    |Jointures ultra rapides, gr?ce √† un optimiseur de jointures √† une passe.              |
  170. |    |Les requ√™tes SELECT et WHERE supportent tous les op√©rateurs et fonctions. Exemple:    |
  171. |    |                                                                                      |
  172. |    |mysql> SELECT CONCAT(first_name, " ", last_name) FROM nom_table                       |
  173. |    |WHERE income/dependents > 10000 AND age > 30;                                         |
  174. |    |Les fonctions SQL sont impl√©ment√©es √† travers des classes de librairies extr√™mement   |
  175. |    |optimis√©es et devraient fonctionner aussi vite qu'elles peuvent! En g√©n√©ral il n'y a  |
  176. |    |plus d'allocation m√©moire apr√®s une requ√™te d'initialisation.                         |
  177. |    |Support pour les clauses des instructions SQL GROUP BY et ORDER BY . Support pour le  |
  178. |    |groupe d'instructions (COUNT(), COUNT(DISTINCT), AVG(), STD(), SUM(), MAX() et MIN()).|
  179. |    |                                                                                      |
  180. |    |Support pour LEFT OUTER JOIN avec la syntaxe ANSI SQL et ODBC.                        |
  181. |    |Le m√©lange des tables de diff√©rentes bases de donn√©es est support√© dans une m√™me      |
  182. |    |requ√™te (apr√®s la version 3.22).                                                      |
  183. |    |Syst√®me flexible et s√©curis√© de droits et de mots de passe, et qui autorise une       |
  184. |    |v√©rification faites sur l'h√¥te. Les mots de passe sont s√©curis√©s depuis que la gestion|
  185. |    |des mots de passe est crypt√© entre le client et le serveur.                           |
  186. |    |ODBC (Open-DataBase-Connectivity) pour Windows95 (avec source). Toutes les fonctions  |
  187. |    |ODBC 2.5 et d'autres. Vous pouvez, par exemple, utiliser Access pour vous connecter au|
  188. |    |serveur MySQL. 16 MySQL et ODBC                                                       |
  189. |    |Tables rapides √† B-tree avec compression des index.                                   |
  190. |    |16 index par tables sont autoris√©s. Chaque index consiste en 1 et 15 colonnes ou      |
  191. |    |parties de colonnes. La longueur maximale d'un index est de 256 bytes (ceci peut √™tre |
  192. |    |modifi√© lors de la compilation MySQL). Un index devrait utiliser un pr√©fixe CHAR ou   |
  193. |    |VARCHAR .                                                                             |
  194. |    |Enregistrements de longueur fixe ou variable.                                         |
  195. |    |Les Tables de hashage en m√©moire, qui sont utilis√©es comme des tables temporaires.    |
  196. |    |Gestion de grandes bases de donn√©es. Nous utilisons MySQL avec des bases de 50,000,000|
  197. |    |enregistrements.                                                                      |
  198. |    |Toutes les colonnes ont des valeurs par d√©faut. Vous pouvez utiliser INSERT pour      |
  199. |    |ins√©rer un ensemble de colonnes; les colonnes qui n'ont de valeurs explicites sont    |
  200. |    |initialis√©es √† leur valeur par d√©faut.                                                |
  201. |    |Utilise GNU Automake, Autoconf et libtool pour la portabilit√©.                        |
  202. |    |Ecrit en C et C++. Test√© avec un nombre cons√©quent de compilateurs diff√©rents.        |
  203. |    |Syst√®me efficace d'allocation m√©moire thread-based.                                   |
  204. |    |Pas de perte de m√©moire. Test√© avec un d√©tecteur de perte de m√©moire commercial       |
  205. |    |(purify).                                                                             |
  206. |    |Inclus isamchk, un utilitaire rapide pour le contr√¥le, l'optimisation et la r√©paration|
  207. |    |des tables. 13 Maintenance d'un serveur MySQL                                         |
  208. |    |Support de l' ISO-8859-1 Latin1. Par exemple, les caract√®res scandinaves              |
  209. |    |@ringaccent{a}, @"a and @"o sont autoris√©s dans le nom des tables et des colonnes.    |
  210. |    |Toutes les donn√©es sont sauvegard√©es sous le format ISO-8859-1 Latin1. Les            |
  211. |    |comparaisons de colonnes en cha√Ænes de caract√®res normales sont "insensible √† la      |
  212. |    |casse".                                                                               |
  213. |    |Le tri est coh√©rent avec la norme ISO-8859-1 Latin1. Il est possible de le changer    |
  214. |    |dans le source en ajoutant un nouveau tableau de tri. Pour voir un exemple de tri     |
  215. |    |avanc√©, regardez le code Tch√®que. MySQL supporte diff√©rentes polices qui peuvent √™tre |
  216. |    |sp√©cifi√©es √† la compilation.                                                          |
  217. |    |Alias sur les tables et colonnes comme dans le standard SQL92.                        |
  218. |    |DELETE, INSERT, REPLACE et UPDATE retournent le nombre de lignes trait√©es.            |
  219. |    |Les noms de fonction restent disponibles pour les tables et les colonnes. Par exemple,|
  220. |    |ABS reste un nom de colonne valide. L'unique restriction est que lors de l'appel d'une|
  221. |    |fonction, les espaces entre le nom de la fonction et les parenth√®ses '(' qui suivent  |
  222. |    |ne sont pas autoris√©es. 7.30 Mots reserv√©s par MySQL                                  |
  223. |    |Tous les programmes de MySQL dispose d'une aide en ligne, accessible gr?ce √† l'option |
  224. |    |--help ou -?.                                                                         |
  225. |    |Le serveur peut fournir au client les messages d'erreurs en plusieurs langues. 9.1    |
  226. |    |Quels sont les langues support√©s par MySQL?.                                          |
  227. |    |Les clients se connectent au serveur MySQL en utilisant les connexions TCP/IP, les    |
  228. |    |sockets Unix ou les pipes nomm√©s sous NT.                                             |
  229. |    |La commande sp√©cifique √† MySQL SHOW peut √™tre utilis√©e pour avoir des informations    |
  230. |    |concernant les bases de donn√©es, les tables et les index. La commande EXPLAIN peut    |
  231. |    |√™tre utilis√©e pour d√©terminer comment l'optimiseur r√©sout la requ√™te.                 |
  232. |    |1.5 Est ce que MySQL est stable?                                                      |
  233. |    |Cette section r√©pond aux questions "Qu'elle est la stabilit√© de MySQL?'' et, ``Puis-je|
  234. |    |faire confiance √† MySQL sur ce projet?''. Nous allons essayer de clarifier quelques   |
  235. |    |probl√®mes et r√©pondre aux questions les plus importantes qui concernent une majorit√©  |
  236. |    |de personnes. Cette section rassemble les informations r√©colt√©es dans la liste de     |
  237. |    |diffusion (qui est tr√®s active dans l'identification des bogues).                     |
  238. |    |A TcX, MySQL fonctionne depuis mi-1996 sans aucun probl√®me. Lorsque MySQL a √©t√©       |
  239. |    |diffus√© aupr√®s du grand public, un certain nombre de codes n'avaient pas √©t√© test√©s et|
  240. |    |ils ont √©t√© vite identifi√©s par les nouveaux utilisateurs qui ont utilis√© les requ√™tes|
  241. |    |d'une mani√®re diff√©rente de la notre. Chaque nouvelle release a moins de probl√®mes de |
  242. |    |portabilit√© que la pr√©c√©dente (m√™me si √† chaque fois de nouvelles fonctionnalit√©s sont|
  243. |    |identifi√©es), et nous esp√©rons bient√¥t qu'une prochaine version sera labellis√©e       |
  244. |    |"Stable".                                                                             |
  245. |    |Chaque release de MySQL est utilisable et il n'y a de probl√®mes uniquement lorsque les|
  246. |    |utilisateurs commencent √† utiliser les "zones d'ombres". Naturellement, il est        |
  247. |    |difficile de conna√Ætre le contenu de ces zones d'ombres; cette section a pour objectif|
  248. |    |d'identifier les zones connues. La description concerne la version 3.22.x de MySQL.   |
  249. |    |Tous les bogues connus sont corrig√©s dans la derni√®re version, √† l'exception de la    |
  250. |    |liste des bogues r√©pertori√©s dans la section des erreurs. Cf. section E Erreurs       |
  251. |    |connues et manques de MySQL.                                                          |
  252. |    |MySQL est d√©compos√© en plusieurs couches et diff√©rents modules ind√©pendants. Les      |
  253. |    |modules sont list√©s ci-dessous avec leur √©tat de stabilit√© :                          |
  254. |    |Le gestionnaire de tables ISAM -- Stable                                              |
  255. |    |Il g√®re le stockage et la lecture de toutes les donn√©es. Dans toutes les releases de  |
  256. |    |MySQL, un seul bogue a √©t√© report√©. La seule fa√ßon connue d'avoir une table corrompue |
  257. |    |est de "tuer" le serveur au milieu de la mise √† jour. Et m√™me un tel sc√©nario ne      |
  258. |    |d√©truira probablement pas toutes les donn√©es sans qu'il soit possible de les          |
  259. |    |r√©cup√©rer, car toutes les donn√©es sont vid√©es de la m√©moire, entre chaque requ√™te. Il |
  260. |    |n'y a jamais eu de bogues li√©s √† la destruction de donn√©es.                           |
  261. |    |L'analyseur syntaxique et l'analyseur lexical -- Stable                               |
  262. |    |Il n'y a pas un seul bogue d'identifi√© depuis longtemps dans ce module.               |
  263. |    |Le code du client C -- Stable                                                         |
  264. |    |Pas de probl√®mes connus. Dans la version pr√©c√©dente 3.20, il y avait quelques limites |
  265. |    |dans la taille du buffer d'envoi/r√©ception. Depuis de la 3.21.x, la taille du buffer  |
  266. |    |est maintenant dynamique et initialis√© par d√©faut √† 24M.                              |
  267. |    |Programmes clients standards -- Stable                                                |
  268. |    |Cela inclus mysql, mysqladmin et mysqlshow, mysqldump, et mysqlimport.                |
  269. |    |Basic SQL -- Stable                                                                   |
  270. |    |Syst√®me de fonction basic SQL, classes de cha√Ænes de caract√®res et gestion dynamique  |
  271. |    |de la m√©moire. Pas de bogues identifi√©s.                                              |
  272. |    |Optimiseur de requ√™te -- Gamma                                                        |
  273. |    |Optimiseur d'intervalle -- Stable                                                     |
  274. |    |Optimiseur de jointure -- Stable                                                      |
  275. |    |Verrouillage -- Gamma                                                                 |
  276. |    |Cela est tr√®s d√©pendant du syst√®me. Sur certains syst√®mes il y a de gros probl√®mes en |
  277. |    |utilisant le verrouillage standard de l'OS (fcntl()). Dans ces cas l√†, vous devriez   |
  278. |    |faire fonctionner le d√©mon MySQL avec l'option --skip-locking. Les probl√®mes sont     |
  279. |    |connus, sur quelques syst√®mes Linux et sur SunOS lorsque le gestionnaire de fichiers  |
  280. |    |est mont√© sur NFS.                                                                    |
  281. |    |Linux threads -- Gamma                                                                |
  282. |    |Le seul probl√®me identifi√© concerne l'appel de la fonction fcntl(), qui est r√©solu en |
  283. |    |utilisant l'option --skip-locking de mysqld. Quelques personnes ont report√© des       |
  284. |    |probl√®mes avec la version release 0.5.                                                |
  285. |    |Solaris 2.5+ pthreads -- Stable                                                       |
  286. |    |Nous l'utilisons pour nos syst√®mes en production.                                     |
  287. |    |MIT-pthreads (autres syst√®mes) -- Gamma                                               |
  288. |    |Il y a pas de bogues identifi√©s depuis la 3.20.15 et la 3.20.16. sur quelques         |
  289. |    |syst√®mes, il y a un disfonctionnement . Quelques op√©rations sont assez lentes (un     |
  290. |    |arr√™t de 1/20 second est effectu√© entre chaque requ√™te). Bien sur, MIT-pthreads peut  |
  291. |    |ralentir un peu l'ensemble, mais les commandes SELECT qui utilisent des index sont    |
  292. |    |faites en un laps de temps tellement court, que le verrouillage et l'√©change de thread|
  293. |    |n'est pas n√©cessaire.                                                                 |
  294. |    |Autres impl√©mentations -- Alpha - Beta                                                |
  295. |    |Le portage sur d'autres syst√®mes restent assez nouveau et ont peut-√™tre des bugs,     |
  296. |    |probablement dans le serveur MySQL, et plus certainement dans l'impl√©mentation des    |
  297. |    |threads.                                                                              |
  298. |    |LOAD DATA ..., INSERT ... SELECT -- Stable                                            |
  299. |    |Quelques personnes ont cru identifier des bogues dans ce module, c'√©tait li√© √† une    |
  300. |    |m√©prise. V√©rifier la documentation sur le sujet!                                      |
  301. |    |ALTER TABLE -- Gamma                                                                  |
  302. |    |Changements mineures dans la 3.22.12.                                                 |
  303. |    |DBD -- Gamma                                                                          |
  304. |    |Maintenant maintenu par Jochen Wiedmann                                               |
  305. |    |mysqlaccess -- Gamma                                                                  |
  306. |    |Ecrit et maintenu par Yves Carlier                                                    |
  307. |    |GRANT -- Beta                                                                         |
  308. |    |Gros changement dans la MySQL 3.22.12.                                                |
  309. |    |MyODBC (utilise ODBC SDK 2.5) -- Beta                                                 |
  310. |    |Il fonctionne normalement avec la plupart des programmes.                             |
  311. |    |TcX fournit un support payant par email, cependant la mailing liste MySQL r√©pond √† la |
  312. |    |plupart des questions. Les bogues sont en g√©n√©ral corrig√©s par des patchs; pour les   |
  313. |    |bogues plus importants, il y a de nouvelles versions.                                 |
  314. |    |1.6 Compatibilit√© an 2000                                                             |
  315. |    |MySQL lui-m√™me n'a pas de probl√©mes avec la compatibilit√© An 2000 (Y2K):              |
  316. |    |MySQL utilise les fonctions de gestion du temps d'Unix et n'a pas de probl√®mes        |
  317. |    |jusqu'en 2069; toutes les ann√©es sur 2-digit sont comprises entre 1970 et 2069, cela  |
  318. |    |qui signifie que si vous stocker 01 dans une colonne ann√©e, MySQL le traite comme     |
  319. |    |2001.                                                                                 |
  320. |    |Toutes les fonctions de date de MySQL sont stock√©es dans un fichier unique            |
  321. |    |``sql/time.cc'' et cod√©es pour √™tre compatible An 2000.                               |
  322. |    |Dans la version 3.22 de MySQL et les versions ult√©rieures, le nouveau type de colonne |
  323. |    |Ann√©e peut stocker des ann√©es entre 0 et 1901 jusqu'√† 2155 sur 1 byte et √©diter sur 2 |
  324. |    |ou 4 digits.                                                                          |
  325. |    |Vous pouvez avoir des probl√®mes avec des applications qui utilisent MySQL mais non    |
  326. |    |compatible An 2000.                                                                   |
  327. |    |Malheureusement ces probl√®mes sont difficilement corrigibles lorsque ces applications |
  328. |    |sont √©crites par diff√©rents programmeurs et que chacun utilise ses propres conventions|
  329. |    |pour g√©rer les dates.                                                                 |
  330. |    |Vous trouverez ci-apr√®s une d√©monstration simple qui illustre le fait que MySQL n'a   |
  331. |    |aucun probl√®me avec les dates jusqu'en 2030!                                          |
  332. |    |                                                                                      |
  333. |    |mysql> DROP TABLE IF EXISTS y2k;                                                      |
  334. |    |                                                                                      |
  335. |    |mysql> CREATE TABLE y2k (date date, date_time datetime, time_stamp timestamp);        |
  336. |    |                                                                                      |
  337. |    |mysql> INSERT INTO y2k VALUES ("1998-12-31","1998-12-31 23:59:59",19981231235959);    |
  338. |    |                                                                                      |
  339. |    |mysql> INSERT INTO y2k VALUES ("1999-01-01","1999-01-01 00:00:00",19990101000000);    |
  340. |    |                                                                                      |
  341. |    |mysql> INSERT INTO y2k VALUES ("1999-09-09","1999-09-09 23:59:59",19990909235959);    |
  342. |    |                                                                                      |
  343. |    |mysql> INSERT INTO y2k VALUES ("2000-01-01","2000-01-01 00:00:00",20000101000000);    |
  344. |    |                                                                                      |
  345. |    |mysql> INSERT INTO y2k VALUES ("2000-02-28","2000-02-28 00:00:00",20000228000000);    |
  346. |    |                                                                                      |
  347. |    |mysql> INSERT INTO y2k VALUES ("2000-02-29","2000-02-29 00:00:00",20000229000000);    |
  348. |    |                                                                                      |
  349. |    |mysql> INSERT INTO y2k VALUES ("2000-03-01","2000-03-01 00:00:00",20000301000000);    |
  350. |    |                                                                                      |
  351. |    |mysql> INSERT INTO y2k VALUES ("2000-12-31","2000-12-31 23:59:59",20001231235959);    |
  352. |    |                                                                                      |
  353. |    |mysql> INSERT INTO y2k VALUES ("2001-01-01","2001-01-01 00:00:00",20010101000000);    |
  354. |    |                                                                                      |
  355. |    |mysql> INSERT INTO y2k VALUES ("2004-12-31","2004-12-31 23:59:59",20041231235959);    |
  356. |    |                                                                                      |
  357. |    |mysql> INSERT INTO y2k VALUES ("2005-01-01","2005-01-01 00:00:00",20050101000000);    |
  358. |    |                                                                                      |
  359. |    |mysql> INSERT INTO y2k VALUES ("2030-01-01","2030-01-01 00:00:00",20300101000000);    |
  360. |    |                                                                                      |
  361. |    |mysql> INSERT INTO y2k VALUES ("2050-01-01","2050-01-01 00:00:00",20500101000000);    |
  362. |    |                                                                                      |
  363. |    |mysql> SELECT * FROM y2k;                                                             |
  364. |    |                                                                                      |
  365. |    |                                                                                      |
  366. |    |+------------+---------------------+----------------+                                 |
  367. |    || date       | date_time           | time_stamp     |                                 |
  368. |    |+------------+---------------------+----------------+                                 |
  369. |    || 1998-12-31 | 1998-12-31 23:59:59 | 19981231235959 |                                 |
  370. |    || 1999-01-01 | 1999-01-01 00:00:00 | 19990101000000 |                                 |
  371. |    || 1999-09-09 | 1999-09-09 23:59:59 | 19990909235959 |                                 |
  372. |    || 2000-01-01 | 2000-01-01 00:00:00 | 20000101000000 |                                 |
  373. |    || 2000-02-28 | 2000-02-28 00:00:00 | 20000228000000 |                                 |
  374. |    || 2000-02-29 | 2000-02-29 00:00:00 | 20000229000000 |                                 |
  375. |    || 2000-03-01 | 2000-03-01 00:00:00 | 20000301000000 |                                 |
  376. |    || 2000-12-31 | 2000-12-31 23:59:59 | 20001231235959 |                                 |
  377. |    || 2001-01-01 | 2001-01-01 00:00:00 | 20010101000000 |                                 |
  378. |    || 2004-12-31 | 2004-12-31 23:59:59 | 20041231235959 |                                 |
  379. |    || 2005-01-01 | 2005-01-01 00:00:00 | 20050101000000 |                                 |
  380. |    || 2030-01-01 | 2030-01-01 00:00:00 | 20300101000000 |                                 |
  381. |    || 2050-01-01 | 2050-01-01 00:00:00 | 00000000000000 |                                 |
  382. |    |+------------+---------------------+----------------+                                 |
  383. |    |13 rows in set (0.00 sec)                                                             |
  384. |    |                                                                                      |
  385. |    |mysql> DROP TABLE y2k;                                                                |
  386. |    |Cela montre que le type DATE et DATETIME sont compatibles, alors que le type          |
  387. |    |TIMESTAMP, qui est utilis√© pour stocker la date courante, est limit√©e au 2030-01-01.  |
  388. |    |TIMESTAMP est compris entre 1970 et 2030 sur les machines 32-bits.                    |
  389. |    |M√™me si MySQL est compatible An 2000, il est de votre responsabilit√© de fournir une   |
  390. |    |entr√©e correcte. 7.2.6.1 Bug de l'an 2000 et donn√©es de types date pour les r√®gles    |
  391. |    |appliqu√©es par MySQL pour la gestion des entr√©es ambigu√´s de donn√©es (Donn√©e contenant|
  392. |    |des valeurs sur 2-digit).                                                             |
  393. |    |1.7 Informations sur le SQL                                                           |
  394. |    |Ces livres ont √©t√© recommand√©s par plusieurs personnes sur la liste de diffusion MySQL|
  395. |    |:                                                                                     |
  396. |    |                                                                                      |
  397. |    |Judith S. Bowman, Sandra L. Emerson et Marcy Darnovsky                                |
  398. |    |                                                                                      |
  399. |    |The Practical SQL Handbook: Using Structured Query Language                           |
  400. |    |                                                                                      |
  401. |    |Second Edition                                                                        |
  402. |    |                                                                                      |
  403. |    |Addison-Wesley                                                                        |
  404. |    |                                                                                      |
  405. |    |ISBN 0-201-62623-3                                                                    |
  406. |    |                                                                                      |
  407. |    |http://www.awl.com                                                                    |
  408. |    |Celui-ci aussi a eu quelques recommandations sur la liste de diffusion :              |
  409. |    |                                                                                      |
  410. |    |Martin Gruber                                                                         |
  411. |    |                                                                                      |
  412. |    |Understanding SQL                                                                     |
  413. |    |                                                                                      |
  414. |    |ISBN 0-89588-644-8                                                                    |
  415. |    |                                                                                      |
  416. |    |Publisher Sybex 510 523 8233                                                          |
  417. |    |                                                                                      |
  418. |    |Alameda, CA USA                                                                       |
  419. |    |Un tutorial SQL est disponible sur                                                    |
  420. |    |http://www.geocities.com/ResearchTriangle/Node/9672/sqltut.html                       |
  421. |    |SQL in 21 Tagen (Livre en Allemand ):                                                 |
  422. |    |http://www.mut.de/leseecke/buecher/sql/inhalt.htm                                     |
  423. |    |1.8 Liens utiles                                                                      |
  424. |    |1.8.1 Outils de d√©veloppement WEB qui supportent MySQL.                               |
  425. |    |http://www.php.net/                                                                   |
  426. |    |http://xsp.lentus.se/                                                                 |
  427. |    |http://www.voicenet.com/~zellert/tjFM                                                 |
  428. |    |http://www.wernhart.priv.at/php/                                                      |
  429. |    |http://www.dbwww.com/                                                                 |
  430. |    |http://www.daa.com.au/~james/www-sql/                                                 |
  431. |    |http://www.minivend.com/minivend/                                                     |
  432. |    |http://www.heitml.com/                                                                |
  433. |    |http://www.metahtml.com/                                                              |
  434. |    |http://www.binevolve.com/                                                             |
  435. |    |http://hawkeye.net/                                                                   |
  436. |    |http://www.fastflow.com/                                                              |
  437. |    |http://www.wdbi.net/                                                                  |
  438. |    |http://www.webgroove.com/                                                             |
  439. |    |http://www.ihtml.com/                                                                 |
  440. |    |ftp://ftp.igc.org/pub/myodbc/README                                                   |
  441. |    |http://calistra.com/MySQL/                                                            |
  442. |    |http://www.webmerger.com Cet outil CGI interpr√®te des fichiers, et g√©n√®re des         |
  443. |    |affichages dynamiques, bas√© sur un ensemble simple de balises. Il est fonctionne d√©j√† |
  444. |    |avec MySQL et PostgreSQL via ODBC.                                                    |
  445. |    |1.8.2 Serveurs Web avec des outils MySQL.                                             |
  446. |    |http://bourbon.netvision.net.il/mysql/mod_auth_mysql/                                 |
  447. |    |http://www.roxen.com/                                                                 |
  448. |    |1.8.3 Exemples et sources                                                             |
  449. |    |http://www.little6.com/about/linux/ Un site d'emploi en ligne, construit MySQL, PHP3  |
  450. |    |et Linux.                                                                             |
  451. |    |http://www.delec.com/is/products/prep/examples/BookShelf/index.html Un outil qui rend |
  452. |    |tr√®s simple la mise la cr√©ation de documentation automatique. Ils ont utilis√© MySQL   |
  453. |    |comme un exemple.                                                                     |
  454. |    |http://shredder.elen.utah.edu/steve.html Utilise MySQL et webmerger. Il y a une base  |
  455. |    |des employ√©s, et une base des plaques d'immatriculation. (plus de 1.2 million). Le    |
  456. |    |champs des immatriculation est index√©, et les recherches sont instantan√©es.           |
  457. |    |http://www.worldrecords.com Un moteur de recherche pour la musique, fait avec MySQL et|
  458. |    |PHP.                                                                                  |
  459. |    |http://webdev.berber.co.il/                                                           |
  460. |    |http://www.webtechniques.com/features/1998/01/note/note.shtml                         |
  461. |    |http://modems.rosenet.net/mysql/                                                      |
  462. |    |http://www.odbsoft.com/cook/sources.htm                                               |
  463. |    |http://www.gusnet.cx/proj/telsql/.                                                    |
  464. |    |http://www.productivity.org/projects/mysql/                                           |
  465. |    |http://www.iserver.com/support/contrib/perl5/modules.html                             |
  466. |    |http://tecfa.unige.ch/guides/java/staf2x/ex/jdbc/coffee-break                         |
  467. |    |http://www.spade.com/linux/howto/PostgreSQL-HOWTO-41.html                             |
  468. |    |http://www.ooc.com/                                                                   |
  469. |    |http://www.pbc.ottawa.on.ca/                                                          |
  470. |    |http://keilor.cs.umass.edu/pluribus/ Pluribus, is a free search engine that learns to |
  471. |    |improve the quality of its results over time. Pluribus works by recording which pages |
  472. |    |a user prefers among those returned for a query. A user votes for a page by selecting |
  473. |    |it; Pluribus then uses that knowledge to improve the quality of the results when      |
  474. |    |someone else submits the same (or similar) query. Uses PHP and MySQL.                 |
  475. |    |http://www.stopbit.com/ A technology news site using MySQL and PHP                    |
  476. |    |http://www.jokes2000.com/scripts/                                                     |
  477. |    |http://www.hotwired.com/webmonkey/backend/tutorials/tutorial1.html                    |
  478. |    |http://www.geocities.com/CapeCanaveral/2064/mysql.html                                |
  479. |    |http://futurerealm.com/forum/futureforum.cgi                                          |
  480. |    |http://www.linuxsupportline.com/~kalendar/ KDE based calendar manager The calendar    |
  481. |    |manager has both single user (file based) and multi user (MySQL database) support.    |
  482. |    |http://tim.desert.net/~tim/imger/                                                     |
  483. |    |http://www.penguinservices.com/scripts                                                |
  484. |    |1.8.4 Liens ODBC.                                                                     |
  485. |    |http://www.openlinksw.com/iodbc/                                                      |
  486. |    |http://users.ids.net/~bjepson/freeODBC/                                               |
  487. |    |1.8.5 Liens API.                                                                      |
  488. |    |http://www.jppp.com Partially implemented TDataset-compatible components for MySQL.   |
  489. |    |http://www.riverstyx.net/qpopmysql/ A patch to allow POP3 authentication from a MySQL |
  490. |    |database. There's also a link to someone who wrote a patch for Procmail to allow any  |
  491. |    |MTA to deliver to users in a MySQL database.                                          |
  492. |    |http://www.pbc.ottawa.on.ca                                                           |
  493. |    |http://www.lilback.com/macsql/                                                        |
  494. |    |1.8.6 Clients et applications.                                                        |
  495. |    |http://www.urbanresearch.com/software/utils/urbsql/index.html                         |
  496. |    |http://www.etu.info.unicaen.fr/~fbilhaut/kmysql/                                      |
  497. |    |1.8.7 Autres liens MySQL.                                                             |
  498. |    |http://www.wix.com/mysql-hosting                                                      |
  499. |    |http://www.open.com.au/products.html                                                  |
  500. |    |http://www.stonekeep.com/pts/                                                         |
  501. |    |http://tomato.nvgc.vt.edu/~hroberts/mot                                               |
  502. |    |http://www.seawood.org/msql_bind/                                                     |
  503. |    |http://home.wxs.nl/cgi-bin/planeteers/pgidszoek.cgi                                   |
  504. |    |http://www.cynergi.net/non-secure/exportsql/                                          |
  505. |    |http://SAL.KachinaTech.COM/H/1/MYSQL.html                                             |
  506. |    |http://www.infotech-nj.com/itech/index.shtml                                          |
  507. |    |http://www.pmpcs.com/                                                                 |
  508. |    |http://www.aewa.org                                                                   |
  509. |    |http://abattoir.cc.ndsu.nodak.edu/~nem/mysql/udf/                                     |
  510. |    |http://21ccs.com/~gboersm/y2kmatrix/                                                  |
  511. |    |1.8.8 SQL et interfaces pour bases de donn√©es.                                        |
  512. |    |http://www.penguinpowered.com/~kmysql KMySQL is a database client for KDE that        |
  513. |    |primarily supports MySQL.                                                             |
  514. |    |http://java.sun.com/products/jdbc/                                                    |
  515. |    |http://tfdec1.fys.kuleuven.ac.be/~michael/fpc-linux/mysql                             |
  516. |    |http://www.gagme.com/mysql                                                            |
  517. |    |http://www.amsoft.ru/easysql/                                                         |
  518. |    |http://www.lightlink.com/hessling/rexxsql.html                                        |
  519. |    |http://www.binevolve.com/~tdarugar/tcl-sql                                            |
  520. |    |1.8.9 Liens sur les bases de donn√©es.                                                 |
  521. |    |http://www.pcslink.com/~ej/dbweb.html                                                 |
  522. |    |http://black.hole-in-the.net/guy/webdb/                                               |
  523. |    |http://www.symbolstone.org/technology/perl/DBI/index.html                             |
  524. |    |http://www-public.rz.uni-duesseldorf.de/~tolj                                         |
  525. |    |http://dbasecentral.com/                                                              |
  526. |    |http://www.Tek-Tips.com Tek-Tips Forums are 800+ independent peer-to-peer             |
  527. |    |non-commercial support forums for Computer Professionals. Features include automatic  |
  528. |    |e-mail notification of responses, a links library, and member confidentiality         |
  529. |    |guaranteed.                                                                           |
  530. |    |Il y a beaucoup de sites Web qui utilisent MySQL. Cf. section A Quelques utilisateurs |
  531. |    |MySQL.                                                                                |
  532. |    |2 La liste de diffusion MySQL et comment rapporter des bugs                           |
  533. |    |2.1 Les listes de diffusion MySQL                                                     |
  534. |    |Pour s'incrire sur la liste de diffusion (en anglais) de MySQL, envoyez un message √†  |
  535. |    |l'adresse suivante : mysql-subscribe@lists.mysql.com.                                 |
  536. |    |Pour se d√©sinscrire de la liste de diffusion MySQL, envoyez un message √† l'adresse    |
  537. |    |suivante : mysql-unsubscribe@lists.mysql.com.                                         |
  538. |    |Seule l'adresse d'origine de votre message sera utilis√©e. Le sujet et le contenu du   |
  539. |    |mail sont ignor√©s.                                                                    |
  540. |    |Si votre adresse de r√©ponse n'est pas valide, vous pouvez la sp√©cifier explicitement. |
  541. |    |Vous pouvez alors ajouter un signe tiret `-', suivi de votre adresse, dont l'arobase  |
  542. |    |`@' a √©t√© remplac√© par `='. Par exemple, pour inscrire l'adrsse paul@hote.domaine,    |
  543. |    |envoyez un message √† l'adresse mysql-subscribe-paul=hote.domaine@lists.mysql.com.     |
  544. |    |Les mails envoy√©s √† mysql-subscribe@lists.mysql.com ou                                |
  545. |    |mysql-unsubscribe@lists.mysql.com sont g√©r√©s automatiquement par le robot de la liste,|
  546. |    |ezmlm. Des informations √† propos de ezmlm sont disponibles √† the ezmlm Website.       |
  547. |    |Pour envoyer un message √† la liste elle m√™me, envoyez votre message √†                 |
  548. |    |mysql@lists.mysql.com. Cependant, n'envoyez pas de message d'inscription ou de        |
  549. |    |d√©sinscription √† mysql@lists.mysql.com, car les mails envoy√©s la bas sont             |
  550. |    |automatiquement envoy√© √† des milliers d'utilisateurs.                                 |
  551. |    |Votre site local peut disposer de sa propre base d'utilisateurs de                    |
  552. |    |mysql@lists.mysql.com. Dans ce cas, il a peut √™tre sa propre liste de diffusion, qui  |
  553. |    |relaient les messages de lists.mysql.com. Dans ce cas, contactez votre administrateur |
  554. |    |pour √™tre ajout√© ou supprim√© de la liste de diffusion.                                |
  555. |    |Les listes de diffusions suivantes existent :                                         |
  556. |    |annonces                                                                              |
  557. |    |Cette liste sert √† annoncer les nouvelles versions de MySQL et des programmes         |
  558. |    |associ√©s. Elle a un faible traffic, et il est pr√©f√©rable que tous les utilisateurs y  |
  559. |    |soient inscrit.                                                                       |
  560. |    |mysql                                                                                 |
  561. |    |La liste principale de discussion √† propos de MySQL. Notez bien que certains sujets   |
  562. |    |sont trait√©s dans des listes de diffusions s√©par√©es. Si vous postez un message sur une|
  563. |    |mauvaise liste, vous risquez de ne pas avoir de r√©ponse.                              |
  564. |    |mysql-digest                                                                          |
  565. |    |La liste mysql dans un format condens√©. Cela signifie que tous les messages de la     |
  566. |    |journ√©e sont rassembl√©s en un grand message, mais une fois par jour.                  |
  567. |    |java                                                                                  |
  568. |    |Discussion √† propos de MySQL et Java. G√©n√©ralement, √† propos des pilotes JDBC.        |
  569. |    |java-digest                                                                           |
  570. |    |La version condens√©e de la liste sur java.                                            |
  571. |    |win32                                                                                 |
  572. |    |Tout ce qui concerne MySQL sur les OS Microsoft, comme par exemple Windows NT.        |
  573. |    |win32-digest                                                                          |
  574. |    |La version condens√©e de la liste sur win32.                                           |
  575. |    |myodbc                                                                                |
  576. |    |Tout ce qui concerne les connexions √† MySQL avec ODBC.                                |
  577. |    |myodbc-digest                                                                         |
  578. |    |La version condens√©e de la liste sur myodbc.                                          |
  579. |    |msql-mysql-modules                                                                    |
  580. |    |Tout ce qui concerne les connexions √† MySQL avec Perl.                                |
  581. |    |msql-mysql-modules-digest                                                             |
  582. |    |La version condens√©e de la liste sur msql-mysql-modules.                              |
  583. |    |developer                                                                             |
  584. |    |Une liste pour ceux qui travaille sur le code de MySQL.                               |
  585. |    |developer-digest                                                                      |
  586. |    |La version condens√©e de la liste sur developer.                                       |
  587. |    |Vous vous inscrivez ou d√©sincrivez de ces listes de la m√™me mani√®re que d√©crit ci     |
  588. |    |dessus. Dans votre message, utilisez simplement l'adresse de la liste qui vous        |
  589. |    |interesse, plut√¥t que mysql. Par exemple, pour s'inscrire ou se d√©sinscrire √† la liste|
  590. |    |myodbc envoyez un message √† myodbc-subscribe@lists.mysql.com ou                       |
  591. |    |myodbc-unsubscribe@lists.mysql.com.                                                   |
  592. |    |2.2 Poser des questions et rapporter des bugs                                         |
  593. |    |Avant d'envoyer un rapport de bug, ou une question, suivez les instructions suivantes |
  594. |    |:                                                                                     |
  595. |    |Commencez par chercher dans le manuel en ligne de MySQL :                             |
  596. |    |                                                                                      |
  597. |    |http://www.mysql.com/Manual_chapter/manual_toc.html                                   |
  598. |    |Nous essayons de garder le manuel √† jour en le modifiant suivant, et en ajoutant des  |
  599. |    |solutions pour les probl√®mes rencontr√©s.                                              |
  600. |    |Recherchez dans les archives de la liste MySQL:                                       |
  601. |    |                                                                                      |
  602. |    |http://www.mysql.com/doc.html                                                         |
  603. |    |Vous pouvez aussi utiliser http://www.mysql.com/search.html pour rechercher dans les  |
  604. |    |pages web (y compris le manuel) qui sont situ√©s √† http://www.mysql.com/.              |
  605. |    |Si vous ne trouvez pas d'information dans le manuel, ou dans les pages d'archives,    |
  606. |    |v√©rifiez avec votre expert MySQL local. Si vous ne pouvez trouver aucune r√©ponse,     |
  607. |    |passez √† la section suivante pour savoir comment envoyer un message √†                 |
  608. |    |mysql@lists.mysql.com.                                                                |
  609. |    |2.3 Comment rapporter des bugs et des probl√®mes                                       |
  610. |    |Ecrire un rapport de bug n√©cessite de la patience, mais ce premier geste va √©conomiser|
  611. |    |votre temps, et le notre. Cette section vous aide √† √©crire votre rapport de bug       |
  612. |    |correctement, de mani√®re √† ce que vous ne perdiez pas votre temps √† √©crire des        |
  613. |    |messages qui ne nous servirons √† rien.                                                |
  614. |    |Nous vous encourageons √† utiliser le script mysqlbug pour g√©n√©rer un rapport de bug   |
  615. |    |(ou un rapport sur n'importe quel probl√®me). mysqlbug est situ√©s dans le dossier de la|
  616. |    |distribution source, ou, dans la distribution binaire, dans le dossier `bin' de votre |
  617. |    |dossier d'installation MySQL.Si vous ne pouvez pas utiliser mysqlbug, il est          |
  618. |    |pr√©f√©rable d'inclure toutes les informations list√©es ci dessous.                      |
  619. |    |Le script mysqlbug vous aide √† g√©n√©rer un rapport de bug en d√©terminant les           |
  620. |    |informations suivantes automatiquement : mais si vous pensez que quelque chose        |
  621. |    |d'important manque, ajoutez le au message. Relisez attentivement cette section, et    |
  622. |    |assurez vous que toutes les informations d√©crites ci dessous sont incluses dans votre |
  623. |    |rapport.                                                                              |
  624. |    |Gardez √† l'esprit qu'il est toujours possible de r√©pondre √† un message qui contient   |
  625. |    |trop d'information, alors que ce n'est pas possible avec un message qui en contient   |
  626. |    |pas assez. Souvent, les rapports omettent des informations car les utilisateurs       |
  627. |    |pensent avoir compris les causes du probl√®me et que certains d√©tails sont             |
  628. |    |insignifiants. Le bon principe est le suivant : Si vous doutez de quelque chose, dites|
  629. |    |le. Il est milles fois plus rapide d'ajouter quelques lignes dans votre rapport,      |
  630. |    |plut√¥t que d'√™tre forc√© de le renvoy√© encore une fois, pour compl√©ment d'information. |
  631. |    |L'erreur la plus r√©pandue est que les utilisateurs n'indique pas le num√©ro de version |
  632. |    |de la distribution MySQL qu'ils utilisent, ou la plate forme sur laquelle ils op√®rent |
  633. |    |(y compris la version de cette plate forme). C'est une information primordiale, et 99%|
  634. |    |des cas sont inexploitables sans cette information. Souvent, nous avons des questions |
  635. |    |du genre : ``Pourquoi est ce que √ßa plante chez moi?'' et nous nous aper√ßevons que    |
  636. |    |cette fonctionnalit√© n'est pas disponible sur la version de MySQL utilis√©e, ou bien   |
  637. |    |que le bug a √©t√© corrig√© dans les versions plus r√©centes. Parfois, l'erreur d√©pend de |
  638. |    |l'OS. Dans ces cas, il est presque impossible de corriger l'erreur sans connaitre le  |
  639. |    |nom de l'OS, et le num√©ro de version de la plate forme.                               |
  640. |    |N'oubliez pas d'inclure des inforamtions sur les compilateurs, si cela a un rapport   |
  641. |    |avec votre probl√®me. Souvent, on trouve des erreurs dans les compilateurs, et les     |
  642. |    |utilisateurs pensent que c'est li√© √† MySQL. La plus part des compilateurs sont en     |
  643. |    |d√©veloppement constants, et s'am√©liorent de version en version. Pour savoir si votre  |
  644. |    |probl√®me d√©pend du compilateur, nous avons besoin de savoir quel compilateur est      |
  645. |    |utilis√©. Notez que chaque probl√®me li√© √† la compilation doit √™tre consid√©r√© comme un  |
  646. |    |bug, et rapport√© de mani√®re ad√©quate.                                                 |
  647. |    |Une bonne description du probl√®me est toujours utile dans un rapport de bug. C'est √†  |
  648. |    |dire, toutes les manipulations que vous avez faites, qui ont conduit au bug, et la    |
  649. |    |description du bug lui m√™me. Les meilleurs rapports inclus aussi un exemple complet   |
  650. |    |pour reproduire le bug.                                                               |
  651. |    |Si un programme produit un message d'erreur, il est tr√®s important d'inclure le       |
  652. |    |message dans votre rapport! Si vous recherchez dans les archives, il est pr√©f√©rable   |
  653. |    |d'utiliser le message d'erreur exact (m√™me la casse est importante). N'essayez pas de |
  654. |    |vous souvenir du message : faites en un copier/coller du message entier!              |
  655. |    |Pensez √† inclure les informations suivantes dans votre rapport:                       |
  656. |    |Le num√©ro de version de la distribution de MySQL que vous utilisez (par exemple, MySQL|
  657. |    |3.22.22). Vous pouvez savoir le num√©ro de version que vous utilisez en ex√©cutant la   |
  658. |    |commande mysqladmin version. mysqladmin est situ√© dans le dossier `bin' de votre      |
  659. |    |dossier d'installation MySQL.                                                         |
  660. |    |La marque et le mod√®le de machine que vous exploitez.                                 |
  661. |    |Le nom de l'OS et sa verison. Pour la plus part des OS, vous pouvez avoir ces         |
  662. |    |informations avec la commande UNIX uname -a.                                          |
  663. |    |Parfois, la quantit√© de m√©moire (r√©elle et virtuelle) est importante. En cas de doute,|
  664. |    |incluez ces valeurs.                                                                  |
  665. |    |Si vous utilisez une version source de MySQL, le nom et la version du compilateur est |
  666. |    |aussi apr√©ciable. Si vous avez une version binaire, le nom de la distribution est     |
  667. |    |n√©cessaire.                                                                           |
  668. |    |Si le probl√®me intervient lors de la compilation, incluez l'erreur exacte, le message |
  669. |    |d'erreur, et quelques lignes de contexte.                                             |
  670. |    |Si une table est li√©e au probl√®me, incluez le r√©sultat de la commande mysqldump       |
  671. |    |--no-data nom_base_de_donnees nom_table1 nom_table2 ... C'est tr√®s simple √† faire, et |
  672. |    |c'est une m√©thode puissante pour rassembler toutes les informations d'une table qui   |
  673. |    |nous permettra de recr√©er une situation identique √† la votre.                         |
  674. |    |Pour les bugs li√©s √† la vitesse, ou les probl√®mes avec les commandes SELECT vous      |
  675. |    |devriez toujours include le r√©sultat d'une commande EXPLAIN SELECT ..., et au moins le|
  676. |    |nombre de lignes que votre commande SELECT doit produire. Plus vous pourrez           |
  677. |    |transmettre d'informations, sur votre situation, plus nous pourrons vous aider. Par   |
  678. |    |exemple, voici un tr√®s bon rapport de bug ( post√© avec le script mysqlbug, bien       |
  679. |    |entendu) : Exemple lanc√© depuis la ligne de commande mysql:                           |
  680. |    |                                                                                      |
  681. |    |mysql> SHOW VARIABLES;                                                                |
  682. |    |mysql> EXPLAIN SELECT ...                                                             |
  683. |    |<output-from-EXPLAIN>                                                                 |
  684. |    |mysql> FLUSH STATUS;                                                                  |
  685. |    |mysql> SELECT ...                                                                     |
  686. |    |<Une courte description du r√©sultat de SELECT,                                        |
  687. |    |en incluant le temps de travail de la requ√™te>                                        |
  688. |    |mysql> SHOW STATUS;                                                                   |
  689. |    |<output from SHOW STATUS>                                                             |
  690. |    |Si un bug ou un probl√®me intervient lors du fonctionnement de MySQL, essayer de nous  |
  691. |    |fournir un script qui pourra reproduire l'anomalie. Ce script incluera tous les       |
  692. |    |fichiers n√©cessaires. Plus le script sera proche de votre environnement, et mieux ce  |
  693. |    |sera. Si vous ne pouvez pas fournir de script, vous devez au moins nous fournir       |
  694. |    |l'affichage de mysqladmin variables extended-status processlist dans votre mail, pour |
  695. |    |nous fournir des informations sur votre syst√®me.                                      |
  696. |    |Si vous pensez que MySQL produit un r√©sultat un peu inattendu, pensez √† inclure non   |
  697. |    |seulement l'√©trange r√©sultat de votre requ√™te, mais aussi votre avis sur ce qui       |
  698. |    |devrait √™tre retourn√©, et ce qui le justifie.                                         |
  699. |    |Lorsque vous donnez un exemple de probl√®me, il est mieux d'utiliser des noms de       |
  700. |    |variables, de tables, qui existent dans votre situation r√©elle, plut√¥t que d'inventer |
  701. |    |de nouveau noms. Le probl√®me peut √™tre li√© aux noms de colonnes, table...etc! Ces cas |
  702. |    |sont peut √™tre rares, mais il vaut mieux √™tre prudent que navr√©. Apr√®s tout, il est   |
  703. |    |plus facile de fournir un exemple proche de votre exemple et c'est aussi plus clair   |
  704. |    |pour nous. Dans le cas o√π vous ne souhaitez pas afficher vos donn√©es √† des tiers, vous|
  705. |    |pouvez utiliser le dossier ftp pour le transf√©rer :                                   |
  706. |    |ftp://www.mysql.com/pub/mysql/secret/. Si les donn√©es sont vraiment tr√®s              |
  707. |    |confidentielles, et que vous ne voulez pas nous les montrer, utilisez d'autres        |
  708. |    |valeurs, mais consid√©rez ce choix en dernier recours!                                 |
  709. |    |Incluez toutes les options utilis√©es par les programmes ad√©quats, si possible. Par    |
  710. |    |exemple, vous pouvez indiquer les options de d√©marrage de mysqld, et celle que vous   |
  711. |    |utilisez pour les clients MySQL. Les options de programmes tels que mysqld et mysql,  |
  712. |    |et le script configure sont souvent la cl√© de myst√®res. Ce n'est jamais une mauvaise  |
  713. |    |id√©e de nous les transmettre, de toutes mani√®res. Si vous utilisez des modules, tels  |
  714. |    |que Perl ou PHP, n'oubliez pas de donner leur num√©ro de version.                      |
  715. |    |Si vous n'arrivez pas √† reproduire l'erreur avec quelques lignes, ou que la table est |
  716. |    |trop grosse pour √™tre post√©e sur la liste de diffusion (plus de 10 lignes), il est    |
  717. |    |pr√©f√©rable de faire un dump de la table, avec mysqldump et de cr√©er un fichier        |
  718. |    |`README' qui d√©crit votre probl√®me. Cr√©ez une archive compress√©e de vos fichiers avec |
  719. |    |tar et gzip ou zip, et transf√©rez en ftp dans le dossier                              |
  720. |    |ftp://www.mysql.com/pub/mysql/secret/. Puis, envoyez une courte description de votre  |
  721. |    |probl√®me sur la liste de diffusion.                                                   |
  722. |    |Si vos questions sont li√©es aux droits, ajoutez les donn√©es de mysqlaccess, celui de  |
  723. |    |mysqladmin reload et tous les messages d'erreur que vous obtenez en vous connectant.  |
  724. |    |Lorsque vous testez les droits, il est pr√©f√©rable de faire tourner d'abord            |
  725. |    |mysqlaccess. Apr√®s √ßa, exc√©cutez la commande mysqladmin reload version, et en dernier |
  726. |    |ressort, essayez de vous connectez avec le programme qui pose probl√®me. mysqlaccess   |
  727. |    |est situ√© dans le dossier `bin' de votre dossier d'installation.                      |
  728. |    |Si vosu avez un patch pour un bug, c'est bien. Mais ne supposez jamais que ce patch   |
  729. |    |est tout ce dont nous r√©vions, ou m√™me que nous allons l'utiliser si vous ne          |
  730. |    |fournissez pas les informations n√©cessaires pour tester le bug. Nous pouvons          |
  731. |    |rencontrer des probl√®mes avec votre patch, voire m√™me, nous pouvons ne pas le         |
  732. |    |comprendre. Dans ce cas, nous ne pourrons pas l'utiliser. Si nous ne pouvons pas      |
  733. |    |v√©rifier l'objectif du patch, nous ne l'utiliserons pas. Les cas de tests nous seront |
  734. |    |d'un pr√©cieux secours. Montrez bien toutes les situations que le patch prend en       |
  735. |    |compte. Si nous trouvons un effet de bord (m√™me rare), ou un cas extr√™me que le patche|
  736. |    |ne g√®re pas, il risque d'√™tre inutile.                                                |
  737. |    |Toutes les tentatives de deviner l'origine du bug, pourquoi il survient, ou de quoi il|
  738. |    |d√©coule sont g√©n√©ralement fausses. Il arrive que m√™me nous, avec l'aide d'un d√©bugger,|
  739. |    |ne pouvons pas toujours determiner la cause r√©elle du bug.                            |
  740. |    |Indiquez dans votre mail que vous avez v√©rifi√© le manuel de r√©f√©rence, et les         |
  741. |    |archives, de mani√®re √† montrer que vous avez d√©j√† essay√© de r√©soudre le probl√®me vous |
  742. |    |m√™me.                                                                                 |
  743. |    |Si vous avez une erreur parse error, prenez le temps de bien v√©rifier votre syntaxe.  |
  744. |    |Si vous ne pouvez pas trouver d'erreur, il est fort probable que votre version de     |
  745. |    |MySQL ne supporte par la requ√™te que vous utilisez. Si vous utilisez la version       |
  746. |    |courant et que le manuel de r√©f√©rence http://www.mysql.com/doc.html ne couvre pas la  |
  747. |    |syntaxe que vous utilisez, c'est que MySQL ne supporte pas votre requ√™te. Dans ce cas,|
  748. |    |votre seul option est d'impl√©menter vous m√™me l'option ou d'envoyer un email √†        |
  749. |    |mysql-licensing@mysql.com et demandez √† ce qu'elle soit impl√©ment√©e. Si le manuel     |
  750. |    |couvre votre syntaxe, mais que vous avez une vieille version de MySQL, v√©rifiez       |
  751. |    |l'historique de MySQL pour voir quand la syntaxe a √©t√© impl√©ment√©e. D Historique des  |
  752. |    |versions de MySQL. Dans ce cas, il vous reste la possibilit√© de vous mettre √† jour    |
  753. |    |avec une nouvelle version de MySQL.                                                   |
  754. |    |Si vous avez un probl√®me tel que vos donn√©es semblent corrompues, ou que vous avez des|
  755. |    |erreurs lorsque vous acc√©dez √† une table particuli√®re, vous devriez essayer de        |
  756. |    |v√©rifier et r√©parer vos tables avec isamchk. 13 Maintenance d'un serveur MySQL.       |
  757. |    |Si vos tables se corrompent souvent, vous pouvez essayer de voir quand cela arrive, et|
  758. |    |pourquoi! Dans ce cas, `mysql-data-directory/'hostname'.err' peut contenir certaines  |
  759. |    |informations sur ce qui est pass√©. N'oubliez pas d'ajouter toutes les informations    |
  760. |    |utiles dans votre rapport de bug. Normalement, mysqld ne crashe JAMAIS de table s'il  |
  761. |    |n'a pas √©t√© tu√© durant une modification. Si vous pouvez trouver la source de la fin du|
  762. |    |processus mysqld, il est plus facile pour nous de vous fournir un correctif.          |
  763. |    |Si possible, t√©l√©chargez la version la plus r√©cente de MySQL et v√©rifiez si cela      |
  764. |    |r√©soud votre probl√®me. Toutes les versions de MySQL sont test√©s de mani√®re exhaustive,|
  765. |    |et devrait fonctionner sans probl√®me. Nous essayons de rendre nos developpement       |
  766. |    |compatibles avec les anciennes versions, ce qui vous permettra de changer de version  |
  767. |    |de MySQL en quelques minutes! 4.3 Quelle version de MySQL utiliser.                   |
  768. |    |Si vous √™tre un client du support, n'envoyez pas le rapport en double sur l'adresse   |
  769. |    |pour voir si quelqu'un exp√©riment√© peut r√©soudre votre probl√®me.                      |
  770. |    |Pour savoir comment rapporter √† propos de MyODBC, allez √† 16.2 Comment rapporter des  |
  771. |    |bugs avec MyODBC.                                                                     |
  772. |    |Pour des solutions aux probl√®mes courants, reportez vous √† 18 Probl√®mes et erreurs    |
  773. |    |fr√©quents.                                                                            |
  774. |    |Lorsque des informations vous sont envoy√©es individuellement, et pas √† la liste de    |
  775. |    |diffusion, il est de bon ton de rassembler toutes les r√©ponses, et de les envoyer √† la|
  776. |    |liste de diffusion pour que le b√©n√©fices des r√©ponses profite √† tous.                 |
  777. |    |2.4 R√®gles pour r√©pondre aux questions sur la liste de diffusion                      |
  778. |    |Si vous pensez que vous avec une r√©ponse d'inter√™t g√©n√©ral, vous voudrez surement     |
  779. |    |envoyer un mail sur la liste de diffusion, plut√¥t que de r√©pondre uniquement √† la     |
  780. |    |personne qui a pos√© la question. Essayez de rendre votre r√©ponse aussi g√©n√©rale que   |
  781. |    |possible, pour que tous ceux qui ne connaissent pas le probl√®me initiale puisse       |
  782. |    |comprendre. Lorsque vous envoyez votre r√©ponse, v√©rifiez que vous n'etes pas en double|
  783. |    |avec une autre r√©ponse.                                                               |
  784. |    |Dans votre r√©ponse, essayez de r√©sumer la question; ne vous sentez pas oblig√© de citer|
  785. |    |toute la question.                                                                    |
  786. |    |N'envoyez pas de mail avec votre navigateur HTML. De nombreux utilisateurs ne lisent  |
  787. |    |pas leur mail avec un navigateur.                                                     |
  788. |    |3 Support et licences MySQL                                                           |
  789. |    |This chapter describes MySQL licensing and support arrangements, including:           |
  790. |    |Our licensing policies for non-Microsoft and Microsoft operating systems              |
  791. |    |The copyrights under which MySQL is distributed ( 3.2 Copyrights de MySQL)            |
  792. |    |Sample situations illustrating when a license is required ( 3.4 Exemple de licences)  |
  793. |    |Licensing and support costs ( 3.5 Licences et couts du support MySQL), and support    |
  794. |    |benefits ( 3.6 Types de support commercial)                                           |
  795. |    |3.1 Politique de licence MySQL                                                        |
  796. |    |The formal terms of the license for non-Microsoft operating systems such as Unix or   |
  797. |    |OS/2 are specified in J Licence MySQL pour les syt√®mes d'exploitation non-Microsoft.  |
  798. |    |Basically, our licensing policy is as follows:                                        |
  799. |    |For normal internal use, MySQL generally costs nothing. You do not have to pay us if  |
  800. |    |you do not want to.                                                                   |
  801. |    |A license is required if:                                                             |
  802. |    |You sell the MySQL server directly or as a part of another product or service         |
  803. |    |You charge for installing and maintaining a MySQL server at some client site          |
  804. |    |You include MySQL in a distribution that is non redistributable and you charge for    |
  805. |    |some part of that distribution                                                        |
  806. |    |For circumstances under which a MySQL license is required, you need a license per     |
  807. |    |machine that runs the mysqld server. However, a multiple-CPU machine counts as a      |
  808. |    |single machine, and there is no restriction on the number of MySQL servers that run on|
  809. |    |one machine, or on the number of clients concurrently connected to a server running on|
  810. |    |that machine!                                                                         |
  811. |    |You do not need a license to include client code in commercial programs. The client   |
  812. |    |access part of MySQL is in the public domain. The mysql command line client includes  |
  813. |    |code from the readline library that is under the GNU Public License.                  |
  814. |    |For customers who have purchased 10 licenses or a high enough level of support, we    |
  815. |    |provide additional functionality. Currently, this means we provide the pack_isam      |
  816. |    |utility for creating fast compressed read-only databases. (The server includes support|
  817. |    |for reading such databases but not the packing tool used to create them.) If support  |
  818. |    |agreements generate sufficient revenue, we will probably release this tool under the  |
  819. |    |same license as the MySQL server.                                                     |
  820. |    |If your use of MySQL does not require a license, but you like MySQL and want to       |
  821. |    |encourage further development, you are certainly welcome to purchase a license anyway.|
  822. |    |                                                                                      |
  823. |    |If you use MySQL in a commercial context such that you profit by its use, we ask that |
  824. |    |you further the development of MySQL by purchasing some level of support. We feel that|
  825. |    |if MySQL helps your business, it is reasonable to ask that you help MySQL. (Otherwise,|
  826. |    |if you ask us support questions, you are not only using for free something into which |
  827. |    |we've put a lot a work, you're asking us to provide free support, too.)               |
  828. |    |For use under Microsoft operating systems (Win95/Win98/WinNT), you need a MySQL       |
  829. |    |license after a trial period of 30 days, with the exception that licenses may be      |
  830. |    |obtained upon request at no cost for educational use or for university- or            |
  831. |    |government-sponsored research settings. K Licence MySQL pour les OS Microsoft. A      |
  832. |    |shareware version of MySQL-Win32 that you can try before buying is available at       |
  833. |    |http://www.mysql.com/mysql_w32.htmy. After you have paid, you will get a password that|
  834. |    |will enable you to access the newest MySQL-Win32 version.                             |
  835. |    |If you have any questions as to whether or not a license is required for your         |
  836. |    |particular use of MySQL, please contact us. 3.5.2 Contacts.                           |
  837. |    |If you require a MySQL license, the easiest way to pay for it is to use the license   |
  838. |    |form at TcX's secure server at https://www.mysql.com/license.htmy. Other forms of     |
  839. |    |payment are discussed in 3.5.1 Informations pratique de paiement.                     |
  840. |    |3.2 Copyrights de MySQL                                                               |
  841. |    |There are several different copyrights on the MySQL distribution:                     |
  842. |    |The MySQL-specific source needed to build the mysqlclient library and programs in the |
  843. |    |`client' directory is in the public domain. Each file that is in the public domain has|
  844. |    |a header which clearly states so. This includes everything in the `client' directory  |
  845. |    |and some parts of the mysys, mystring and dbug libraries.                             |
  846. |    |Some small parts of the source (GNU getopt) are covered by the ``GNU LIBRARY LIBRARY  |
  847. |    |GENERAL PUBLIC LICENSE''. See the `mysys/COPYING.LIB' file.                           |
  848. |    |Some small parts of the source (GNU readline) are covered by the ``GNU GENERAL PUBLIC |
  849. |    |LICENSE''. See the `readline/COPYING' file.                                           |
  850. |    |Some parts of the source (the regexp library) are covered by a Berkeley style         |
  851. |    |copyright.                                                                            |
  852. |    |The other source needed for the MySQL server on non-Microsoft platforms is covered by |
  853. |    |the ``MySQL FREE PUBLIC LICENSE'', which is based on the ``Aladdin FREE PUBLIC        |
  854. |    |LICENSE.'' J Licence MySQL pour les syt√®mes d'exploitation non-Microsoft. When running|
  855. |    |MySQL on any Microsoft operating system, other licensing applies.                     |
  856. |    |The following points set forth the philosophy behind our copyright policy:            |
  857. |    |The SQL client library should be totally free so that it can be included in commercial|
  858. |    |products without limitations.                                                         |
  859. |    |People who want free access to the software into which we have put a lot of work can  |
  860. |    |have it, so long as they do not try to make money directly by distributing it for     |
  861. |    |profit.                                                                               |
  862. |    |People who want the right to keep their own software proprietary, but also want the   |
  863. |    |value from our work, can pay for the privilege.                                       |
  864. |    |That means normal in-house use is FREE. But if you use MySQL for something important  |
  865. |    |to you, you may want to help further its development by purchasing a license or a     |
  866. |    |support contract. 3.6 Types de support commercial.                                    |
  867. |    |3.2.1 Modifications ult√©rieures possibles du copyright                                |
  868. |    |We may choose to distribute older versions of MySQL with the GPL in the future.       |
  869. |    |However, these versions will be identified as GNU MySQL. Also, all copyright notices  |
  870. |    |in the relevant files will be changed to the GPL.                                     |
  871. |    |3.3 Distribution commerciale de MySQL                                                 |
  872. |    |This section is a clarification of the license terms that are set forth in the ``MySQL|
  873. |    |FREE PUBLIC LICENSE'' (FPL). J Licence MySQL pour les syt√®mes d'exploitation          |
  874. |    |non-Microsoft.                                                                        |
  875. |    |MySQL may be used freely, including by commercial entities for evaluation or          |
  876. |    |unsupported internal use. However, distribution for commercial purposes of MySQL, or  |
  877. |    |anything containing or derived from MySQL in whole or in part, requires a written     |
  878. |    |commercial license from TcX AB, the sole entity authorized to grant such licenses.    |
  879. |    |You may not include MySQL ``free'' in a package containing anything for which a charge|
  880. |    |is being made, except as noted below.                                                 |
  881. |    |The intent of the exception provided in the second clause of the license is to allow  |
  882. |    |commercial organizations operating an FTP server or a bulletin board to distribute    |
  883. |    |MySQL freely from it, provided that:                                                  |
  884. |    |The organization complies with the other provisions of the FPL, which include among   |
  885. |    |other things a requirement to distribute the full source code of MySQL and of any     |
  886. |    |derived work, and to distribute the FPL itself along with MySQL;                      |
  887. |    |The only charge for downloading MySQL is a charge based on the distribution service   |
  888. |    |and not one based on the content of the information being retrieved (i.e., the charge |
  889. |    |would be the same for retrieving a random collection of bits of the same size);       |
  890. |    |The server or BBS is accessible to the general public, i.e., the phone number or IP   |
  891. |    |address is not kept secret, and anyone may obtain access to the information (possibly |
  892. |    |by paying a subscription or access fee that is not dependent on or related to         |
  893. |    |purchasing anything else).                                                            |
  894. |    |If you want to distribute software in a commercial context that incorporates MySQL and|
  895. |    |you do not want to meet these conditions, you should contact TcX AB to find out about |
  896. |    |commercial licensing, which involves a payment. The only ways you legally can         |
  897. |    |distribute MySQL or anything containing MySQL are by distributing MySQL under the     |
  898. |    |requirements of the FPL, or by getting a commercial license from TcX AB.              |
  899. |    |3.4 Exemple de licences                                                               |
  900. |    |This section describes some situations illustrating whether or not you must license   |
  901. |    |the MySQL server. Generally these examples involve providing MySQL as part of a       |
  902. |    |product or service that you are selling to a customer, or requiring that MySQL be used|
  903. |    |in conjunction with your product. In such cases, it is your responsibility to obtain a|
  904. |    |license for the customer if one is necessary. (This requirement is waived if your     |
  905. |    |customer already has a MySQL license. But the seller must send customer information   |
  906. |    |and the license number to TcX, and the license must be a full license, not an OEM     |
  907. |    |license.)                                                                             |
  908. |    |Note that a single MySQL license covers any number of CPUs/users/customers/mysqld     |
  909. |    |servers on a machine!                                                                 |
  910. |    |3.4.1 Vente de produits qui utilisent MySQL                                           |
  911. |    |To determine whether or not you need a MySQL license when selling your application,   |
  912. |    |you should ask whether the proper functioning of your application is contingent on the|
  913. |    |use of MySQL and whether you include MySQL with your product. There are several cases |
  914. |    |to consider:                                                                          |
  915. |    |Does your application require MySQL to function properly? If your product requires    |
  916. |    |MySQL, you need a license for any machine that runs the mysqld server. For example, if|
  917. |    |you've designed your application around MySQL, then you've really made a commercial   |
  918. |    |product that requires the engine, so you need a license. If your application does not |
  919. |    |require MySQL, you need not obtain a license. For example, if MySQL just added some   |
  920. |    |new optional features to your product (such as adding logging to a database if MySQL  |
  921. |    |is used rather than logging to a text file), it should fall within normal use, and a  |
  922. |    |license would not be required. In other words, you need a license if you sell a       |
  923. |    |product designed specifically for use with MySQL or that requires the MySQL server to |
  924. |    |function at all. This is true whether or not you provide MySQL for your client as part|
  925. |    |of your product distribution. It also depends on what you're doing for the client. Do |
  926. |    |you plan to provide your client with detailed instructions on installing MySQL with   |
  927. |    |your software? Then your product may be contingent on the use of MySQL; if so, you    |
  928. |    |need to buy a license. If you are simply tying into a database that you expect already|
  929. |    |to have been installed by the time your software is purchased, then you probably don't|
  930. |    |need a license.                                                                       |
  931. |    |Do you include MySQL in a distribution and charge for that distribution? If you       |
  932. |    |include MySQL with a distribution that you sell to customers, you will need a license |
  933. |    |for any machine that runs the mysqld server, because in this case you are selling a   |
  934. |    |system that includes MySQL. This is true whether the use of MySQL with your product is|
  935. |    |required or optional.                                                                 |
  936. |    |Do you neither require for your product nor include MySQL with it? Suppose you want to|
  937. |    |sell a product that is designed generally to use ``some database'' and that can be    |
  938. |    |configured to use any of several supported alternative database systems (MySQL,       |
  939. |    |PostgreSQL, or something else). That is, your product does not not require MySQL, but |
  940. |    |can support any database with a base level of functionality, and you don't rely on    |
  941. |    |anything that only MySQL supports. Does one of you owe us money if your customer      |
  942. |    |actually does choose to use MySQL? In this case, if you don't provide, obtain or set  |
  943. |    |up MySQL for the customer should the customer decide to use it, neither of you need a |
  944. |    |license. If you do perform that service, see MySQL services.                          |
  945. |    |3.4.2 Vente de services MySQL                                                         |
  946. |    |If you perform MySQL installation on a client's machine and any money changes hands   |
  947. |    |for the service (directly or indirectly), then you must buy a MySQL license.          |
  948. |    |If you sell an application for which MySQL is not strictly required but can be used, a|
  949. |    |license may be indicated, depending on how MySQL is set up. Suppose your product      |
  950. |    |neither requires MySQL nor includes it in your product distribution, but can be       |
  951. |    |configured to use MySQL for those customers who so desire. (This would be the case,   |
  952. |    |for example, if your product can use any of a number of database engines.)            |
  953. |    |If the customer obtains and installs MySQL, no license is needed. If you perform that |
  954. |    |service for your customer, then a license is needed because then you are selling a    |
  955. |    |service that includes MySQL.                                                          |
  956. |    |3.4.3 ISP MySQL                                                                       |
  957. |    |Internet Service Providers (ISPs) often host MySQL servers for their customers.       |
  958. |    |If you are an ISP that allows customers to install and administer MySQL for themselves|
  959. |    |on your machine with no assistance from you, neither you nor your customer need a     |
  960. |    |MySQL license.                                                                        |
  961. |    |If you charge for MySQL installation and administrative support as part of your       |
  962. |    |customer service, then you need a license because you are selling a service that      |
  963. |    |includes MySQL.                                                                       |
  964. |    |3.4.4 Utiliser un serveur web avec MySQL                                              |
  965. |    |If you use MySQL in conjunction with a web server, you don't have to pay for a        |
  966. |    |license.                                                                              |
  967. |    |This is true even if you run a commercial web server that uses MySQL, since you are   |
  968. |    |not selling MySQL itself. However, in this case we would like you to purchase MySQL   |
  969. |    |support, because MySQL is helping your enterprise.                                    |
  970. |    |3.5 Licences et couts du support MySQL                                                |
  971. |    |Our current license prices are shown below. All prices are in US Dollars. If you pay  |
  972. |    |by credit card, the currency is EURO (European Union Euro) so the prices will differ  |
  973. |    |slightly.                                                                             |
  974. |    |Number of licenses                                                                    |
  975. |    |Price per copy                                                                        |
  976. |    |Total                                                                                 |
  977. |    |                                                                                      |
  978. |    |1                                                                                     |
  979. |    |US $200                                                                               |
  980. |    |US $200                                                                               |
  981. |    |                                                                                      |
  982. |    |10 pack                                                                               |
  983. |    |US $150                                                                               |
  984. |    |US $1500                                                                              |
  985. |    |                                                                                      |
  986. |    |50 pack                                                                               |
  987. |    |US $120                                                                               |
  988. |    |US $6000                                                                              |
  989. |    |                                                                                      |
  990. |    |For high volume (OEM) purchases, the following prices apply:                          |
  991. |    |Number of licenses                                                                    |
  992. |    |Price per copy                                                                        |
  993. |    |Minimum at one time                                                                   |
  994. |    |Minimum payment                                                                       |
  995. |    |                                                                                      |
  996. |    |100-999                                                                               |
  997. |    |US $40                                                                                |
  998. |    |100                                                                                   |
  999. |    |US $4000                                                                              |
  1000. |    |                                                                                      |
  1001. |    |1000-2499                                                                             |
  1002. |    |US $25                                                                                |
  1003. |    |200                                                                                   |
  1004. |    |US $5000                                                                              |
  1005. |    |                                                                                      |
  1006. |    |2500-4999                                                                             |
  1007. |    |US $20                                                                                |
  1008. |    |400                                                                                   |
  1009. |    |US $8000                                                                              |
  1010. |    |                                                                                      |
  1011. |    |For OEM purchases, you must act as the middle-man for eventual problems or extension  |
  1012. |    |requests from your users. We also require that OEM customers have at least an extended|
  1013. |    |email support contract.                                                               |
  1014. |    |If you have a low-margin high-volume product, you can always talk to us about other   |
  1015. |    |terms (for example, a percent of the sale price). If you do, please be informative    |
  1016. |    |about your product, pricing, market and any other information that may be relevant.   |
  1017. |    |After buying 10 MySQL licenses, you will get a personal copy of the pack_isam utility.|
  1018. |    |You are not allowed to redistribute this utility but you can distribute tables packed |
  1019. |    |with it.                                                                              |
  1020. |    |A full-price license is not a support agreement and includes very minimal support.    |
  1021. |    |This means that we try to answer any relevant question. If the answer is in the       |
  1022. |    |documentation, we will direct you to the appropriate section. If you have not         |
  1023. |    |purchased a license or support, we probably will not answer at all.                   |
  1024. |    |If you discover what we consider a real bug, we are likely to fix it in any case. But |
  1025. |    |if you pay for support we will notify you about the fix status instead of just fixing |
  1026. |    |it in a later release.                                                                |
  1027. |    |More comprehensive support is sold separately. Descriptions of what each level of     |
  1028. |    |support includes are given in 3.6 Types de support commercial. Costs for the various  |
  1029. |    |types of commercial support are shown below. Support level prices are in EURO         |
  1030. |    |(European Union Euro). One EURO is about 1.17 USD.                                    |
  1031. |    |Type of support                                                                       |
  1032. |    |Cost per year                                                                         |
  1033. |    |                                                                                      |
  1034. |    |Basic email support                                                                   |
  1035. |    |EURO 170                                                                              |
  1036. |    |                                                                                      |
  1037. |    |Extended email support                                                                |
  1038. |    |EURO 1000                                                                             |
  1039. |    |                                                                                      |
  1040. |    |Login support                                                                         |
  1041. |    |EURO 2000                                                                             |
  1042. |    |                                                                                      |
  1043. |    |Extended login support                                                                |
  1044. |    |EURO 5000                                                                             |
  1045. |    |                                                                                      |
  1046. |    |You may upgrade from any lower level of support to a higher level of support for the  |
  1047. |    |difference between the prices of the two support levels.                              |
  1048. |    |3.5.1 Informations pratique de paiement                                               |
  1049. |    |Currently we can take SWIFT payments, cheques or credit cards.                        |
  1050. |    |Payment should be made to:                                                            |
  1051. |    |                                                                                      |
  1052. |    |Postgirot Bank AB                                                                     |
  1053. |    |105 06 STOCKHOLM, SWEDEN                                                              |
  1054. |    |                                                                                      |
  1055. |    |TCX DataKonsult AB                                                                    |
  1056. |    |BOX 6434                                                                              |
  1057. |    |11382 STOCKHOLM, SWEDEN                                                               |
  1058. |    |                                                                                      |
  1059. |    |SWIFT address: PGSI SESS                                                              |
  1060. |    |Account number: 96 77 06 - 3                                                          |
  1061. |    |Specify: license and/or support and your name and email address.                      |
  1062. |    |In Europe and Japan you can use EuroGiro (that should be less expensive) to the same  |
  1063. |    |account.                                                                              |
  1064. |    |If you want to pay by cheque, make it payable to ``Monty Program KB'' and mail it to  |
  1065. |    |the address below:                                                                    |
  1066. |    |                                                                                      |
  1067. |    |TCX DataKonsult AB                                                                    |
  1068. |    |BOX 6434                                                                              |
  1069. |    |11382 STOCKHOLM, SWEDEN                                                               |
  1070. |    |If you want to pay by credit card over the Internet, you can use TcX's secure license |
  1071. |    |form.                                                                                 |
  1072. |    |You can also print a copy of the license form, fill it in and send it by fax to:      |
  1073. |    |+46-8-729 69 05                                                                       |
  1074. |    |If you want us to bill you, you can use the license form and write ``bill us'' in the |
  1075. |    |comment field. You can also mail a message to with your company information and ask us|
  1076. |    |to bill you.                                                                          |
  1077. |    |3.5.2 Contacts                                                                        |
  1078. |    |For commercial licensing, or if you have any questions about any of the information in|
  1079. |    |this section, please contact the MySQL licensing team. The much preferred m√©thode is  |
  1080. |    |by E-Mail to these may take much longer (Fax +46-8-729 69 05).                        |
  1081. |    |                                                                                      |
  1082. |    |David Axmark                                                                          |
  1083. |    |Detron HB                                                                             |
  1084. |    |Kungsgatan 65 B                                                                       |
  1085. |    |753 21 UPPSALA                                                                        |
  1086. |    |SWEDEN                                                                                |
  1087. |    |Voice Phone +46-18-10 22 80     (Timezone GMT+1. Swedish and English spoken)          |
  1088. |    |3.6 Types de support commercial                                                       |
  1089. |    |3.6.1 Support email basique                                                           |
  1090. |    |Basic email support is a very inexpensive support option and should be thought of more|
  1091. |    |as a way to support our development of MySQL than as a real support option.           |
  1092. |    |At this support level, the MySQL mailing lists are the preferred means of             |
  1093. |    |communication. Questions normally should be mailed to the primary mailing list        |
  1094. |    |(mysql@lists.mysql.com) or one of the other regular lists (for example,               |
  1095. |    |mysql-win32@lists.mysql.com for Windows-related MySQL questions), as someone else     |
  1096. |    |already may have experienced and solved the problem you have. 2.2 Poser des questions |
  1097. |    |et rapporter des bugs.                                                                |
  1098. |    |However, by purchasing basic email support, you also have access to the support       |
  1099. |    |address mysql-support@mysql.com, which is not available as part of the minimal support|
  1100. |    |that you get by purchasing a MySQL license. This means that for especially critical   |
  1101. |    |questions, you can cross-post your message to mysql-support@mysql.com. (If the message|
  1102. |    |contains sensitive data, you should post only to mysql-support@mysql.com.)            |
  1103. |    |REMEMBER! to ALWAYS include your registration number and expiration date when you send|
  1104. |    |a message to                                                                          |
  1105. |    |Basic email support includes the following types of service:                          |
  1106. |    |If your question is already answered in the manual, we will inform you of the correct |
  1107. |    |section in which you can find the answer. If the answer is not in the manual, we will |
  1108. |    |point you in the right direction to solve your problem.                               |
  1109. |    |We guarantee a timely answer for your email messages. We can't guarantee that we can  |
  1110. |    |solve any problem, but at least you will receive an answer if we can contact you by   |
  1111. |    |email.                                                                                |
  1112. |    |We will help with unexpected problems when you install MySQL from a binary            |
  1113. |    |distribution on supported platforms. This level of support does not cover installing  |
  1114. |    |MySQL from a source distribution. ``Supported'' platforms are those for which MySQL is|
  1115. |    |known to work. 4.2 Syst√®mes d'exploitation support√©s par MySQL.                       |
  1116. |    |We will help you with bugs and missing features. Any bugs that are found are fixed for|
  1117. |    |the next MySQL release. If the bug is critical for you, we will mail you a patch for  |
  1118. |    |it as soon the bug is fixed. Critical bugs always have the highest priority for us, to|
  1119. |    |ensure that they are fixed as soon as possible.                                       |
  1120. |    |Your suggestions for the further development of MySQL will be taken into              |
  1121. |    |consideration. By taking email support you have already helped the further development|
  1122. |    |of MySQL. If you want to have more input, upgrade to a higher level of support.       |
  1123. |    |If you want us to help optimize your system, you must upgrade to a higher level of    |
  1124. |    |support.                                                                              |
  1125. |    |3.6.2 Support email √©tendu                                                            |
  1126. |    |Extended email support includes everything in basic email support with these          |
  1127. |    |additions:                                                                            |
  1128. |    |Your email will be dealt with before mail from basic email support users and          |
  1129. |    |non-registered users.                                                                 |
  1130. |    |Your suggestions for the further development of MySQL will receive strong             |
  1131. |    |consideration. Simple extensions that suit the basic goals of MySQL are implemented in|
  1132. |    |a matter of days. By taking extended email support you have already helped the further|
  1133. |    |development of MySQL.                                                                 |
  1134. |    |We include a binary version of the pack_isam packing tool for creating fast compressed|
  1135. |    |read-only databases (it does not support BLOB or TEXT types yet). The current server  |
  1136. |    |includes support for reading such databases but not the packing tool used to create   |
  1137. |    |them.                                                                                 |
  1138. |    |Typical questions that are covered by extended email support are:                     |
  1139. |    |We will answer and (within reason) solve questions that relate to possible bugs in    |
  1140. |    |MySQL. As soon as the bug is found and corrected, we will mail a patch for it.        |
  1141. |    |We will help with unexpected problems when you install MySQL from a source or binary  |
  1142. |    |distribution on supported platforms.                                                  |
  1143. |    |We will answer questions about missing features and offer hints how to work around    |
  1144. |    |them.                                                                                 |
  1145. |    |We will provide hints on optimizing mysqld for your situation.                        |
  1146. |    |You are allowed to influence the priority of items on the MySQL TODO. This will ensure|
  1147. |    |that the features you really need will be implemented sooner than they might be       |
  1148. |    |otherwise.                                                                            |
  1149. |    |3.6.3 Support de login                                                                |
  1150. |    |Login support includes everything in extended email support with these additions:     |
  1151. |    |Your email will be dealt with even before mail from extended email support users.     |
  1152. |    |Your suggestions for the further development of MySQL will be taken into very high    |
  1153. |    |consideration. Realistic extensions that can be implemented in a couple of hours and  |
  1154. |    |that suit the basic goals of MySQL will be implemented as soon as possible.           |
  1155. |    |If you have a very specific problem, we can try to log in on your system to solve the |
  1156. |    |problem ``in place.''                                                                 |
  1157. |    |Like any database vendor, we can't guarantee that we can rescue any data from crashed |
  1158. |    |tables, but if the worst happens we will help you rescue as much as possible. MySQL   |
  1159. |    |has proven itself very reliable, but anything is possible due to circumstances beyond |
  1160. |    |our control (for example, if your system crashes or someone kills the server by       |
  1161. |    |executing a kill -9 command).                                                         |
  1162. |    |We will provide hints on optimizing your system and your queries.                     |
  1163. |    |You are allowed to call a MySQL developer (in moderation) and discuss your            |
  1164. |    |MySQL-related problems.                                                               |
  1165. |    |3.6.4 Support de login √©tendu                                                         |
  1166. |    |Extended login support includes everything in login support with these additions:     |
  1167. |    |Your email has the highest possible priority.                                         |
  1168. |    |We will actively examine your system and help you optimize it and your queries. We may|
  1169. |    |also optimize and/or extend MySQL to better suit your needs.                          |
  1170. |    |You may also request special extensions just for you. For example:                    |
  1171. |    |                                                                                      |
  1172. |    |mysql> select MY_CALCULATION(nom_colonne1,nom_colonne2) from nom_table;               |
  1173. |    |We will provide a binary distribution of all important MySQL releases for your system,|
  1174. |    |as long as we can get an account on a similar system. In the worst case, we may       |
  1175. |    |require access to your system to be able to create a binary distribution.             |
  1176. |    |If you can provide accommodations and pay for traveler fares, you can even get a MySQL|
  1177. |    |developer to visit you and offer you help with your troubles. Extended login support  |
  1178. |    |entitles you to one personal encounter per year, but we are as always very flexible   |
  1179. |    |towards our customers!                                                                |
  1180. |    |4 Instalation de MySQL                                                                |
  1181. |    |This chapter describes how to obtain and install MySQL:                               |
  1182. |    |For a list of sites from which you can obtain MySQL, see Getting MySQL.               |
  1183. |    |To see which platforms are supported, see 4.2 Syst√®mes d'exploitation support√©s par   |
  1184. |    |MySQL.                                                                                |
  1185. |    |Several versions of MySQL are available, in both binary and source distributions. To  |
  1186. |    |determine which version and type of distribution you should use, see 4.4 Comment et   |
  1187. |    |quand sont g√©n√©r√©es les mises √† jour.                                                 |
  1188. |    |Installation instructions for binary and source distributions are described in 4.6    |
  1189. |    |Installer une version binaire de MySQL, and 4.7 Installer une version source de MySQL.|
  1190. |    |Each set of instructions includes a section on system-specific problems you may run   |
  1191. |    |into.                                                                                 |
  1192. |    |For post-installation procedures, see 4.15 Param√®trage post-installation et tests.    |
  1193. |    |These procedures apply whether you install MySQL using a binary or source             |
  1194. |    |distribution.                                                                         |
  1195. |    |4.1 Comment obtenir MySQL                                                             |
  1196. |    |Check the MySQL home page for information about the current version and for           |
  1197. |    |downloading instructions.                                                             |
  1198. |    |However, the Internet connection at TcX is not so fast; we would prefer that you do   |
  1199. |    |the actual downloading from one of the mirror sites listed below.                     |
  1200. |    |Please report bad or out of date mirrors to webmaster@mysql.com.                      |
  1201. |    |Europe:                                                                               |
  1202. |    |[pic]Austria [Univ. of Technology/Vienna] WWW FTP                                     |
  1203. |    |[pic]Bulgaria [Naturella] FTP                                                         |
  1204. |    |[pic]Croatia [HULK] WWW FTP                                                           |
  1205. |    |[pic]Czech Republic [Masaryk University in Brno] WWW FTP                              |
  1206. |    |[pic]Denmark [Ake] WWW                                                                |
  1207. |    |[pic]Denmark [SunSITE] WWW FTP                                                        |
  1208. |    |[pic]Estonia [OKinteractive] WWW                                                      |
  1209. |    |[pic]France [minet] WWW                                                               |
  1210. |    |[pic]Finland [EUnet] WWW                                                              |
  1211. |    |[pic]Finland [clinet] FTP                                                             |
  1212. |    |[pic]Germany [Bonn University, Bonn] WWW FTP                                          |
  1213. |    |[pic]Germany [Wolfenbuettel] WWW FTP                                                  |
  1214. |    |[pic]Germany [Staufen] WWW                                                            |
  1215. |    |[pic]Germany [Cable & Wireless] FTP                                                   |
  1216. |    |[pic]Greece [NTUA, Athens] WWW FTP                                                    |
  1217. |    |[pic]Italy [Teta Srl] WWW                                                             |
  1218. |    |[pic]Poland [Sunsite] WWW FTP                                                         |
  1219. |    |[pic]Portugal [lerianet] WWW FTP                                                      |
  1220. |    |[pic]Russia [DirectNet] WWW                                                           |
  1221. |    |[pic]Russia [IZHCOM] WWW FTP                                                          |
  1222. |    |[pic]Russia [Scientific Center/Chernogolovka] FTP                                     |
  1223. |    |[pic]Romania [Timisoara] WWW FTP                                                      |
  1224. |    |[pic]Romania [Bucharest] WWW FTP                                                      |
  1225. |    |[pic]Sweden [Sunet] WWW FTP                                                           |
  1226. |    |[pic]Switzerland [Sunsite] WWW FTP                                                    |
  1227. |    |[pic]UK [Omnipotent/UK] WWW FTP                                                       |
  1228. |    |[pic]UK [PLiG/UK] WWW FTP                                                             |
  1229. |    |[pic]UK [SunSITE] WWW FTP                                                             |
  1230. |    |[pic]Ukraine [PACO] WWW FTP                                                           |
  1231. |    |North America:                                                                        |
  1232. |    |[pic]Canada [Tryc] WWW                                                                |
  1233. |    |[pic]USA [Hurricane Electric/San Jose] WWW                                            |
  1234. |    |[pic]USA [Netcasting/West Coast] FTP                                                  |
  1235. |    |[pic]USA [Circle Net/North Carolina] WWW                                              |
  1236. |    |[pic]USA [Gina net/Florida] WWW                                                       |
  1237. |    |[pic]USA [pingzero/Los Angeles] WWW                                                   |
  1238. |    |[pic]USA [DIGEX] FTP                                                                  |
  1239. |    |South America:                                                                        |
  1240. |    |[pic]Chile [Vision] WWW                                                               |
  1241. |    |Asia:                                                                                 |
  1242. |    |[pic]China [Freecode] WWW                                                             |
  1243. |    |[pic]Korea [KREONet] WWW                                                              |
  1244. |    |[pic]Japan [Soft Agency] WWW                                                          |
  1245. |    |[pic]Japan [Nagoya Syouka University] WWW FTP                                         |
  1246. |    |[pic]Singapore [HJC] WWW FTP                                                          |
  1247. |    |[pic]Taiwan [HT] WWW                                                                  |
  1248. |    |Australia:                                                                            |
  1249. |    |[pic]Australia [AARNet/Queensland] WWW FTP                                            |
  1250. |    |[pic]Australia [Tas] WWW FTP                                                          |
  1251. |    |[pic]Australia [Blue Planet/Melbourne] WWW                                            |
  1252. |    |[pic]Australia [ITworks Consulting/Victoria] WWW                                      |
  1253. |    |Africa:                                                                               |
  1254. |    |[pic]South-Africa [Mweb/] WWW                                                         |
  1255. |    |[pic]South-Africa [The Internet Solution/Johannesburg] FTP                            |
  1256. |    |4.2 Syst√®mes d'exploitation support√©s par MySQL                                       |
  1257. |    |We use GNU Autoconf so it is possible to port MySQL to all modern systems with working|
  1258. |    |Posix threads and a C++ compiler. (To compile only the client code, a C++ compiler is |
  1259. |    |required but not threads.) We use and develop the software ourselves primarily on Sun |
  1260. |    |Solaris (versions 2.5 & 2.6) and to a lesser extent on RedHat Linux 5.0.              |
  1261. |    |MySQL has been reported to compile sucessfully on the following operating             |
  1262. |    |system/thread package combinations. Note that for many operating systems, the native  |
  1263. |    |thread support works only in the latest versions.                                     |
  1264. |    |AIX 4.x with native threads                                                           |
  1265. |    |BSDI 2.x with the included MIT-pthreads package                                       |
  1266. |    |BSDI 3.0, 3.1 and 4.x with native threads                                             |
  1267. |    |DEC UNIX 4.x with native threads                                                      |
  1268. |    |FreeBSD 2.x with the included MIT-pthreads package                                    |
  1269. |    |FreeBSD 3.x with native threads                                                       |
  1270. |    |HP-UX 10.20 with the included MIT-pthreads package                                    |
  1271. |    |HP-UX 11.x with the native threads.                                                   |
  1272. |    |Linux 2.0+ with LinuxThreads 0.7.1 or glibc 2.0.7                                     |
  1273. |    |NetBSD 1.3/1.4 Intel and NetBSD 1.3 Alpha (Requires GNU make)                         |
  1274. |    |OpenBSD 2.x with the included MIT-pthreads package                                    |
  1275. |    |OS/2 Warp 3, FixPack 29 and OS/2 Warp 4, FixPack 4                                    |
  1276. |    |SGI Irix 6.x with native threads                                                      |
  1277. |    |Solaris 2.5, 2.6 and 2.7 with native threads on SPARC and x86                         |
  1278. |    |SunOS 4.x with the included MIT-pthreads package                                      |
  1279. |    |SCO OpenServer with a recent port of the FSU Pthreads package                         |
  1280. |    |SCO UnixWare 7.0.1                                                                    |
  1281. |    |Tru64 Unix                                                                            |
  1282. |    |Win95, Win98 and NT (the newest version is currently available only for users with a  |
  1283. |    |MySQL license or MySQL email support). For those who wish to test before they buy, we |
  1284. |    |have released MySQL 3.21.29 (an older version) as shareware.                          |
  1285. |    |4.3 Quelle version de MySQL utiliser                                                  |
  1286. |    |The first decision to make is whether you want to use the latest development release  |
  1287. |    |or the last stable release:                                                           |
  1288. |    |Normally, if you are beginning to use MySQL for the first time or trying to port it to|
  1289. |    |some system for which there is no binary distribution, we recommend going with the    |
  1290. |    |development release (currently 3.22.x). This is because there are usually no really   |
  1291. |    |serious bugs in the development release, and you can easily test it on your machine   |
  1292. |    |with the crash-me and benchmark tests. 11 La suite de tests de MySQL.                 |
  1293. |    |Otherwise, if you are running an old system and want to upgrade, but don't want to    |
  1294. |    |take chances with 3.22, you should upgrade to 3.21.33. We have tried to fix only fatal|
  1295. |    |bugs and make small, relatively safe changes to that version.                         |
  1296. |    |The second decision to make is whether you want to use a source distribution or a     |
  1297. |    |binary distribution:                                                                  |
  1298. |    |If you want to run MySQL on a platform for which a current binary distribution exists,|
  1299. |    |use that. Generally, it will be easier to install than a source distribution.         |
  1300. |    |If you want to read (and/or modify) the C and C++ code that makes up MySQL, you should|
  1301. |    |get a source distribution. The source code is always the ultimate manual. Source      |
  1302. |    |distributions also contain more tests and examples than binary distributions.         |
  1303. |    |The MySQL naming scheme uses release numbers that consist of three numbers and a      |
  1304. |    |suffix. For example, a release name like mysql-3.21.17-beta is interpreted like this: |
  1305. |    |The first number (3) describes the file format. All version 3 releases have the same  |
  1306. |    |file format. When a version 4 appears, every table will have to be converted to the   |
  1307. |    |new format (nice tools for this will be included, of course).                         |
  1308. |    |The second number (21) is the release level. Normally there are two to choose from.   |
  1309. |    |One is the release/stable branch (currently 21) and the other is the development      |
  1310. |    |branch (currently 22) . Normally both are stable, but the development version may have|
  1311. |    |quirks, missing documentation on new features or may fail to compile on some systems. |
  1312. |    |The third number (17) is the version number within the release level. This is         |
  1313. |    |incremented for each new distribution. Usually you want the latest version for the    |
  1314. |    |release level you have choosen.                                                       |
  1315. |    |The suffix (beta) indicates the stability level of the release. The possible suffixes |
  1316. |    |are:                                                                                  |
  1317. |    |alpha indicates that the release contains some large section of new code that hasn't  |
  1318. |    |been 100% tested. Known bugs (usually there are none) should be documented in the News|
  1319. |    |section. D Historique des versions de MySQL. There are also new commands and          |
  1320. |    |extensions in most alpha releases.                                                    |
  1321. |    |beta means that all new code has been tested. No major new features were added. There |
  1322. |    |should be no known bugs.                                                              |
  1323. |    |gamma is a beta that has been around a while and seems to work fine. This is what many|
  1324. |    |other companies call a release.                                                       |
  1325. |    |If there is no suffix, it means that the version has been run for a while at many     |
  1326. |    |different sites with no reports of bugs other than platform-specific bugs. This is    |
  1327. |    |what we call a stable release.                                                        |
  1328. |    |All versions of MySQL are run through our standard tests and benchmarks to ensure that|
  1329. |    |they are relatively safe to use. Since the standard tests are extended over time to   |
  1330. |    |check for all previously found bugs, the test suite keeps getting better.             |
  1331. |    |Note that all releases have been tested at least with:                                |
  1332. |    |An internal test suite                                                                |
  1333. |    |This is part of a production system for a customer. It has many tables with hundreds  |
  1334. |    |of megabytes of data.                                                                 |
  1335. |    |The MySQL benchmark suite                                                             |
  1336. |    |This runs a range of common queries. It is also a test to see whether the latest batch|
  1337. |    |of optimizations actually made the code faster. 11 La suite de tests de MySQL.        |
  1338. |    |The crash-me test                                                                     |
  1339. |    |This tries to determine what features the database supports and what its capabilities |
  1340. |    |and limitations are. 11 La suite de tests de MySQL.                                   |
  1341. |    |Another test is that we use the newest MySQL version in our internal production       |
  1342. |    |environment, on at least one machine. We have more than 100 gigabytes of data to work |
  1343. |    |with.                                                                                 |
  1344. |    |4.4 Comment et quand sont g√©n√©r√©es les mises √† jour                                   |
  1345. |    |MySQL is evolving quite rapidly here at TcX and we want to share this with other MySQL|
  1346. |    |users. We try to make a release when we have very useful features that others seem to |
  1347. |    |have a need for.                                                                      |
  1348. |    |We also try to help out users who request features that are easy to implement. We also|
  1349. |    |take note of what our licensed users want to have and we especially take note of what |
  1350. |    |our extended email supported customers want and try to help them out.                 |
  1351. |    |No one has to download a new release. The News section will tell you if the new       |
  1352. |    |release has something you really want. D Historique des versions de MySQL.            |
  1353. |    |We use the following policy when updating MySQL:                                      |
  1354. |    |For each minor update, the last number in the version string is incremented. When     |
  1355. |    |there are major new features or minor incompatibilities with previous versions, the   |
  1356. |    |second number in the version string is incremented. When the file format changes, the |
  1357. |    |first number is increased.                                                            |
  1358. |    |Stable tested releases are meant to appear about 1-2 times a year, but if small bugs  |
  1359. |    |are found, a release with only bug-fixes will be released.                            |
  1360. |    |Working releases are meant to appear about every 1-8 weeks.                           |
  1361. |    |Binary distributions for some platforms will be made by us for major releases. Other  |
  1362. |    |people may make binary distributions for other systems but probably less frequently.  |
  1363. |    |We usually make patches available as soon as we have located and fixed small bugs.    |
  1364. |    |For non-critical but annoying bugs, we will make patches available if they are sent to|
  1365. |    |us. Otherwise we will combine many of them into a larger patch.                       |
  1366. |    |If there is, by any chance, a fatal bug in a release we will make a new release as    |
  1367. |    |soon as possible. We would like other companies to do this, too. :)                   |
  1368. |    |The current stable release is 3.22; We have already moved active development to 3.23. |
  1369. |    |Bugs will still be fixed in the stable version. We don't believe in a complete freeze,|
  1370. |    |as this also leaves out bug fixes and things that ``must be done''. ``Somewhat        |
  1371. |    |frozen'' means that we may add small things that ``almost surely will not affect      |
  1372. |    |anything that's already working''.                                                    |
  1373. |    |4.5 Structure de l'installation                                                       |
  1374. |    |This section describes the default layout of the directories created by installing    |
  1375. |    |binary and source distributions.                                                      |
  1376. |    |A binary distribution is installed by unpacking it at the installation location you   |
  1377. |    |choose (typically `/usr/local/mysql') and creates the following directories in that   |
  1378. |    |location:                                                                             |
  1379. |    |Directory                                                                             |
  1380. |    |Contents of directory                                                                 |
  1381. |    |                                                                                      |
  1382. |    |`bin'                                                                                 |
  1383. |    |Client programs and the mysqld server                                                 |
  1384. |    |                                                                                      |
  1385. |    |`data'                                                                                |
  1386. |    |Log files, databases                                                                  |
  1387. |    |                                                                                      |
  1388. |    |`include'                                                                             |
  1389. |    |Include (header) files                                                                |
  1390. |    |                                                                                      |
  1391. |    |`lib'                                                                                 |
  1392. |    |Libraries                                                                             |
  1393. |    |                                                                                      |
  1394. |    |`scripts'                                                                             |
  1395. |    |mysql_install_db                                                                      |
  1396. |    |                                                                                      |
  1397. |    |`share/mysql'                                                                         |
  1398. |    |Error message files                                                                   |
  1399. |    |                                                                                      |
  1400. |    |`sql-bench'                                                                           |
  1401. |    |Benchmarks                                                                            |
  1402. |    |                                                                                      |
  1403. |    |A source distribution is installed after you configure and compile it. By default, the|
  1404. |    |installation step installs files under `/usr/local', in the following subdirectories: |
  1405. |    |Directory                                                                             |
  1406. |    |Contents of directory                                                                 |
  1407. |    |                                                                                      |
  1408. |    |`bin'                                                                                 |
  1409. |    |Client programs and scripts                                                           |
  1410. |    |                                                                                      |
  1411. |    |`include/mysql'                                                                       |
  1412. |    |Include (header) files                                                                |
  1413. |    |                                                                                      |
  1414. |    |`info'                                                                                |
  1415. |    |Documentation in Info format                                                          |
  1416. |    |                                                                                      |
  1417. |    |`lib/mysql'                                                                           |
  1418. |    |Libraries                                                                             |
  1419. |    |                                                                                      |
  1420. |    |`libexec'                                                                             |
  1421. |    |The mysqld server                                                                     |
  1422. |    |                                                                                      |
  1423. |    |`share/mysql'                                                                         |
  1424. |    |Error message files                                                                   |
  1425. |    |                                                                                      |
  1426. |    |`sql-bench'                                                                           |
  1427. |    |Benchmarks and crash-me test                                                          |
  1428. |    |                                                                                      |
  1429. |    |`var'                                                                                 |
  1430. |    |Databases and log files.                                                              |
  1431. |    |                                                                                      |
  1432. |    |Within an installation directory, the layout of a source installation differs from    |
  1433. |    |that of a binary installation in the following ways:                                  |
  1434. |    |The mysqld server is installed in the `libexec' directory rather than in the `bin'    |
  1435. |    |directory.                                                                            |
  1436. |    |The data directory is `var' rather than `data'.                                       |
  1437. |    |mysql_install_db is installed in the `/usr/local/bin' directory rather than in        |
  1438. |    |`/usr/local/mysql/scripts'.                                                           |
  1439. |    |The header file and library directories are `include/mysql' and `lib/mysql' rather    |
  1440. |    |than `include' and `lib'.                                                             |
  1441. |    |4.6 Installer une version binaire de MySQL                                            |
  1442. |    |You need the following tools to install a MySQL binary distribution:                  |
  1443. |    |GNU gunzip to uncompress the distribution.                                            |
  1444. |    |A reasonable tar to unpack the distribution. GNU tar is known to work.                |
  1445. |    |An alternative installation m√©thode under Linux is to use RPM (RedHat Package Manager)|
  1446. |    |distributions. 4.6.1 Linux RPM.                                                       |
  1447. |    |If you run into problems, PLEASE ALWAYS USE mysqlbug when posting questions to        |
  1448. |    |mysql@lists.mysql.com. Even if the problem isn't a bug, mysqlbug gathers system       |
  1449. |    |information that will help others solve your problem. By not using mysqlbug, you      |
  1450. |    |lessen the likelihood of getting a solution to your problem! You will find mysqlbug in|
  1451. |    |the `bin' directory after you unpack the distribution. 2.3 Comment rapporter des bugs |
  1452. |    |et des probl√®mes.                                                                     |
  1453. |    |The basic commands you must execute to install and use a MySQL binary distribution    |
  1454. |    |are:                                                                                  |
  1455. |    |                                                                                      |
  1456. |    |shell> gunzip < mysql-VERSION-OS.tar.gz | tar xvf -                                   |
  1457. |    |shell> ln -s mysql-VERSION-OS mysql                                                   |
  1458. |    |shell> cd mysql                                                                       |
  1459. |    |shell> scripts/mysql_install_db                                                       |
  1460. |    |shell> bin/safe_mysqld &                                                              |
  1461. |    |You can add new users using the bin/mysql_setpermission script if you install the DBI |
  1462. |    |and Msql-Mysql-modules Perl modules.                                                  |
  1463. |    |Here follows a more detailed description:                                             |
  1464. |    |To install a binary distribution, follow the steps below, then proceed to 4.15        |
  1465. |    |Param√®trage post-installation et tests, for post-installation setup and testing:      |
  1466. |    |Pick the directory under which you want to unpack the distribution, and move into it. |
  1467. |    |In the example below, we unpack the distribution under `/usr/local' and create a      |
  1468. |    |directory `/usr/local/mysql' into which MySQL is installed. (The following            |
  1469. |    |instructions therefore assume you have permission to create files in `/usr/local'. If |
  1470. |    |that directory is protected, you will need to perform the installation as root.)      |
  1471. |    |Obtain a distribution file from one of the sites listed in Getting MySQL. MySQL binary|
  1472. |    |distributions are provided as compressed tar archives and have names like             |
  1473. |    |`mysql-VERSION-OS.tar.gz', where VERSION is a number (e.g., 3.21.15), and OS indicates|
  1474. |    |the type of operating system for which the distribution is intended (e.g.,            |
  1475. |    |pc-linux-gnu-i586).                                                                   |
  1476. |    |Unpack the distribution and create the installation directory:                        |
  1477. |    |                                                                                      |
  1478. |    |shell> gunzip < mysql-VERSION-OS.tar.gz | tar xvf -                                   |
  1479. |    |shell> ln -s mysql-VERSION-OS mysql                                                   |
  1480. |    |The first command creates a directory named `mysql-VERSION-OS'. The second command    |
  1481. |    |makes a symbolic link to that directory. This lets you refer more easily to the       |
  1482. |    |installation directory as `/usr/local/mysql'.                                         |
  1483. |    |Change into the installation directory:                                               |
  1484. |    |                                                                                      |
  1485. |    |shell> cd mysql                                                                       |
  1486. |    |You will find several files and subdirectories in the mysql directory. The most       |
  1487. |    |important for installation purposes are the `bin' and `scripts' subdirectories.       |
  1488. |    |`bin'                                                                                 |
  1489. |    |This directory contains client programs and the server You should add the full        |
  1490. |    |pathname of this directory to your PATH environment variable so that your shell finds |
  1491. |    |the MySQL programs properly.                                                          |
  1492. |    |`scripts'                                                                             |
  1493. |    |This directory contains the mysql_install_db script used to initialize the server     |
  1494. |    |access permissions.                                                                   |
  1495. |    |If you would like to use mysqlaccess and have the MySQL distribution in some          |
  1496. |    |nonstandard place, you must change the location where mysqlaccess expects to find the |
  1497. |    |mysql client. Edit the `bin/mysqlaccess' script at approximately line 18. Search for a|
  1498. |    |line that looks like this:                                                            |
  1499. |    |                                                                                      |
  1500. |    |$MYSQL     = '/usr/local/bin/mysql';    # path to mysql executable                    |
  1501. |    |Change the path to reflect the location where mysql actually is stored on your system.|
  1502. |    |If you do not do this, you will get a broken pipe error when you run mysqlaccess.     |
  1503. |    |Create the MySQL grant tables (necessary only if you haven't installed MySQL before): |
  1504. |    |                                                                                      |
  1505. |    |shell> scripts/mysql_install_db                                                       |
  1506. |    |If you want to install support for the Perl DBI/DBD interface, see 4.10 Remarques sur |
  1507. |    |l'installation Perl.                                                                  |
  1508. |    |If you would like MySQL to start automatically when you boot your machine, you can    |
  1509. |    |copy support-files/mysql.server to the location where your system has its startup     |
  1510. |    |files. More information can be found in the support-files/mysql.server script itself, |
  1511. |    |and in 4.15.3 D√©marrer et arr√™te MySQL automatiquement.                               |
  1512. |    |After everything has been unpacked and installed, you should initialize and test your |
  1513. |    |distribution.                                                                         |
  1514. |    |You can start the MySQL server with the following command:                            |
  1515. |    |                                                                                      |
  1516. |    |shell> bin/safe_mysqld &                                                              |
  1517. |    |Note that MySQL versions older than 3.22.10 started the MySQL server when you run     |
  1518. |    |mysql_install_db. This is no longer true!                                             |
  1519. |    |4.15 Param√®trage post-installation et tests.                                          |
  1520. |    |4.6.1 Linux RPM                                                                       |
  1521. |    |The recommended way to install MySQL on Linux is by using an RPM file. The MySQL RPMs |
  1522. |    |are currently being built on a RedHat 5.2 system but should work on other versions of |
  1523. |    |Linux that support rpm and use glibc.                                                 |
  1524. |    |If you have problems with an RPM file, for example Sorry, the host 'xxxx' could not be|
  1525. |    |looked up, see 4.6.3.1 Linux notes.                                                   |
  1526. |    |The RPM files you may want to use are:                                                |
  1527. |    |MySQL-VERSION.i386.rpm The MySQL server. You will need this unless you only want to   |
  1528. |    |connect to another MySQL server running on another machine.                           |
  1529. |    |MySQL-client-VERSION.i386.rpm The standard MySQL client programs. You probably always |
  1530. |    |want to install this package.                                                         |
  1531. |    |MySQL-bench-VERSION.i386.rpm Tests and benchmarks. Requires Perl and                  |
  1532. |    |msql-mysql-modules RPMs.                                                              |
  1533. |    |MySQL-devel-VERSION.i386.rpm Libraries and include files needed if you want to compile|
  1534. |    |other MySQL clients, such as the Perl modules.                                        |
  1535. |    |MySQL-VERSION.src.rpm This contains the source code for all of the above packages. It |
  1536. |    |can also be used to try to build RPMs for other architectures (for example, Alpha or  |
  1537. |    |SPARC).                                                                               |
  1538. |    |To see all files in an RPM package:                                                   |
  1539. |    |                                                                                      |
  1540. |    |shell> rpm -qpl MySQL-VERSION.i386.rpm                                                |
  1541. |    |To perform a standard minimal installation, run this command:                         |
  1542. |    |                                                                                      |
  1543. |    |shell> rpm -i MySQL-VERSION.i386.rpm MySQL-client-VERSION.i386.rpm                    |
  1544. |    |To install just the client package:                                                   |
  1545. |    |                                                                                      |
  1546. |    |shell> rpm -i MySQL-client-VERSION.i386.rpm                                           |
  1547. |    |The RPM places data in `/var/lib/mysql'. The RPM also creates the appropriate entries |
  1548. |    |in `/sbin/rc.d/' to start the server automatically at boot time. (This means that if  |
  1549. |    |you have performed a previous installation, you may want to make a copy of your       |
  1550. |    |previously-installed MySQL startup file if you made any changes to it, so you don't   |
  1551. |    |lose your changes.)                                                                   |
  1552. |    |After installing the RPM file(s), go to the binary install section and use the        |
  1553. |    |instructions there, starting from the step that creates the MySQL grant tables. 4.6   |
  1554. |    |Installer une version binaire de MySQL.                                               |
  1555. |    |4.6.2 Construire un programme client                                                  |
  1556. |    |If you compile MySQL clients that you've written yourself or that you obtain from a   |
  1557. |    |third party, they must be linked using the -lmysqlclient option on the link command.  |
  1558. |    |You may also need to specify a -L option to tell the linker where to find the library.|
  1559. |    |For example, if the library is installed in `/usr/local/mysql/lib', use               |
  1560. |    |-L/usr/local/mysql/lib -lmysqlclient on the link command.                             |
  1561. |    |For clients that use MySQL header files, you may need to specify a -I option when you |
  1562. |    |compile them (for example, -I/usr/local/mysql/include), so the compiler can find the  |
  1563. |    |header files.                                                                         |
  1564. |    |4.6.3 Instruction sp√©cifiques aux OS                                                  |
  1565. |    |The following sections indicate some of the issues that have been observed to occur on|
  1566. |    |particular systems when installing MySQL from a binary distribution.                  |
  1567. |    |4.6.3.1 Linux notes                                                                   |
  1568. |    |MySQL needs at least Linux 2.0.                                                       |
  1569. |    |The binary release is linked with -static, which means you not normally need not worry|
  1570. |    |about which version of the system libraries you have. You need not install            |
  1571. |    |LinuxThreads, either. A program linked with -static is slightly bigger than a         |
  1572. |    |dynamically-linked program but also slightly faster (3-5%). One problem however is    |
  1573. |    |that you can't use user definable functions (UDFs) with a statically-linked program.  |
  1574. |    |If you are going to write or use UDF functions (this is something only for C or C++   |
  1575. |    |programmers) you must compile MySQL yourself, using dynamic linking.                  |
  1576. |    |If you are using a libc-based system (instead of a glibc2 system), you will probably  |
  1577. |    |get some problems with hostname resolving and getpwnam() with the binary release.     |
  1578. |    |(This is because glibc unfortunately depends on some external libraries to resolve    |
  1579. |    |hostnames and getwpent() , even when compiled with -static). In this case you probably|
  1580. |    |get the following error message when you run mysql_install_db:                        |
  1581. |    |                                                                                      |
  1582. |    |Sorry, the host 'xxxx' could not be looked up                                         |
  1583. |    |or the following error when you try to run mysqld with the --user option:             |
  1584. |    |                                                                                      |
  1585. |    |getpwnam: No such file or directory                                                   |
  1586. |    |You can solve this problem one of the following ways:                                 |
  1587. |    |Get a MySQL source distribution (an RPM or the tar distribution) and install this     |
  1588. |    |instead.                                                                              |
  1589. |    |Execute mysql_install_db --force; This will not execute the resolveip test in         |
  1590. |    |mysql_install_db. The downside is that you can't use host names in the grant tables;  |
  1591. |    |you must use IP numbers instead (except for localhost). If you are using an old MySQL |
  1592. |    |release that doesn't support --force you have to remove the resolveip test in         |
  1593. |    |mysql_install with an editor.                                                         |
  1594. |    |Start mysqld with su instead of using --user.                                         |
  1595. |    |The Linux-Intel binary and RPM releases of MySQL are configured for the highest       |
  1596. |    |possible speed. We are always trying to use the fastest stable compiler available.    |
  1597. |    |MySQL Perl support requires Perl 5.004_03 or newer.                                   |
  1598. |    |4.6.3.2 HP-UX notes                                                                   |
  1599. |    |The binary distribution of MySQL for HP-UX is distributed as an HP depot file and as a|
  1600. |    |tar file. To use the depot file you must be running at least HP-UX 10.x to have access|
  1601. |    |to HP's software depot tools.                                                         |
  1602. |    |The HP version of MySQL was compiled on an HP 9000/8xx server under HP-UX 10.20, and  |
  1603. |    |uses MIT-pthreads. It is known to work well under this configuration. MySQL 3.22.26   |
  1604. |    |and newer can also be built with HP's native thread package.                          |
  1605. |    |Other configurations that may work:                                                   |
  1606. |    |HP 9000/7xx running HP-UX 10.20+                                                      |
  1607. |    |HP 9000/8xx running HP-UX 10.30                                                       |
  1608. |    |The following configurations almost definitely won't work:                            |
  1609. |    |HP 9000/7xx or 8xx running HP-UX 10.x where x < 2                                     |
  1610. |    |HP 9000/7xx or 8xx running HP-UX 9.x                                                  |
  1611. |    |To install the distribution, use one of the commands below, where /path/to/depot is   |
  1612. |    |the full pathname of the depot file:                                                  |
  1613. |    |To install everything, including the server, client and development tools:            |
  1614. |    |                                                                                      |
  1615. |    |shell> /usr/sbin/swinstall -s /path/to/depot mysql.full                               |
  1616. |    |To install only the server:                                                           |
  1617. |    |                                                                                      |
  1618. |    |shell> /usr/sbin/swinstall -s /path/to/depot mysql.server                             |
  1619. |    |To install only the client package:                                                   |
  1620. |    |                                                                                      |
  1621. |    |shell> /usr/sbin/swinstall -s /path/to/depot mysql.client                             |
  1622. |    |To install only the development tools:                                                |
  1623. |    |                                                                                      |
  1624. |    |shell> /usr/sbin/swinstall -s /path/to/depot mysql.developer                          |
  1625. |    |The depot places binaries and libraries in `/opt/mysql' and data in `/var/opt/mysql'. |
  1626. |    |The depot also creates the appropriate entries in `/sbin/init.d' and `/sbin/rc2.d' to |
  1627. |    |start the server automatically at boot time. Obviously, this entails being root to    |
  1628. |    |install.                                                                              |
  1629. |    |To install the HP-UX tar distribution, you must have a copy of gnu tar.               |
  1630. |    |4.7 Installer une version source de MySQL                                             |
  1631. |    |You need the following tools to build and install MySQL from source:                  |
  1632. |    |GNU gunzip to uncompress the distribution.                                            |
  1633. |    |A reasonable tar to unpack the distribution. GNU tar is known to work.                |
  1634. |    |A working ANSI C++ compiler. gcc >= 2.8.1, egcs >= 1.0.2, SGI C++ and SunPro C++ are  |
  1635. |    |some of the compilers that are known to work. libg++ is not needed when using gcc. gcc|
  1636. |    |2.7.x has a bug that makes it impossible to compile some perfectly legal C++ files,   |
  1637. |    |such as `sql/sql_base.cc'. If you only have gcc 2.7.x, you must upgrade your gcc to be|
  1638. |    |able to compile MySQL.                                                                |
  1639. |    |A good make program. GNU make is always recommended and is sometimes required. If you |
  1640. |    |have problems, we recommend trying GNU make 3.75 or newer.                            |
  1641. |    |If you run into problems, PLEASE ALWAYS USE mysqlbug when posting questions to        |
  1642. |    |mysql@lists.mysql.com. Even if the problem isn't a bug, mysqlbug gathers system       |
  1643. |    |information that will help others solve your problem. By not using mysqlbug, you      |
  1644. |    |lessen the likelihood of getting a solution to your problem! You will find mysqlbug in|
  1645. |    |the `scripts' directory after you unpack the distribution. 2.3 Comment rapporter des  |
  1646. |    |bugs et des probl√®mes.                                                                |
  1647. |    |4.7.1 Introduction √† l'installation rapide                                            |
  1648. |    |The basic commands you must execute to install a MySQL source distribution are (from  |
  1649. |    |an unpacked tar file):                                                                |
  1650. |    |                                                                                      |
  1651. |    |shell> configure                                                                      |
  1652. |    |shell> make                                                                           |
  1653. |    |shell> make install                                                                   |
  1654. |    |shell> scripts/mysql_install_db                                                       |
  1655. |    |shell> /usr/local/mysql/bin/safe_mysqld &                                             |
  1656. |    |If you start from a source RPM, then do the following.                                |
  1657. |    |                                                                                      |
  1658. |    |shell> rpm --rebuild MySQL-VERSION.src.rpm                                            |
  1659. |    |This will make a binary RPM that you can install.                                     |
  1660. |    |You can add new users using the bin/mysql_setpermission script if you install the DBI |
  1661. |    |and Msql-Mysql-modules Perl modules.                                                  |
  1662. |    |Here follows a more detailed description:                                             |
  1663. |    |To install a source distribution, follow the steps below, then proceed to 4.15        |
  1664. |    |Param√®trage post-installation et tests, for post-installation initialization and      |
  1665. |    |testing.                                                                              |
  1666. |    |Pick the directory under which you want to unpack the distribution, and move into it. |
  1667. |    |Obtain a distribution file from one of the sites listed in Getting MySQL. MySQL source|
  1668. |    |distributions are provided as compressed tar archives and have names like             |
  1669. |    |`mysql-VERSION.tar.gz', where VERSION is a number like .                              |
  1670. |    |Unpack the distribution into the current directory:                                   |
  1671. |    |                                                                                      |
  1672. |    |shell> gunzip < mysql-VERSION.tar.gz | tar xvf -                                      |
  1673. |    |This command creates a directory named `mysql-VERSION'.                               |
  1674. |    |Change into the top-level directory of the unpacked distribution:                     |
  1675. |    |                                                                                      |
  1676. |    |shell> cd mysql-VERSION                                                               |
  1677. |    |Configure the release and compile everything:                                         |
  1678. |    |                                                                                      |
  1679. |    |shell> ./configure --prefix=/usr/local/mysql                                          |
  1680. |    |shell> make                                                                           |
  1681. |    |When you run configure, you might want to specify some options. Run ./configure --help|
  1682. |    |for a list of options. configure options, discusses some of the more useful options.  |
  1683. |    |If configure fails, and you are going to send mail to lines from `config.log' that you|
  1684. |    |think can help solve the problem. Also include the last couple of lines of output from|
  1685. |    |configure if configure aborts. Post the bug report using the mysqlbug script. 2.3     |
  1686. |    |Comment rapporter des bugs et des probl√®mes. If the compile fails, see 4.8 Probl√®mes  |
  1687. |    |de compilation?, for help with a number of common problems.                           |
  1688. |    |Install everything:                                                                   |
  1689. |    |                                                                                      |
  1690. |    |shell> make install                                                                   |
  1691. |    |You might need to run this command as root.                                           |
  1692. |    |Create the MySQL grant tables (necessary only if you haven't installed MySQL before): |
  1693. |    |                                                                                      |
  1694. |    |shell> scripts/mysql_install_db                                                       |
  1695. |    |Note that MySQL versions older than 3.22.10 started the MySQL server when you run     |
  1696. |    |mysql_install_db. This is no longer true!                                             |
  1697. |    |If you want to install support for the Perl DBI/DBD interface, see 4.10 Remarques sur |
  1698. |    |l'installation Perl.                                                                  |
  1699. |    |If you would like MySQL to start automatically when you boot your machine, you can    |
  1700. |    |copy support-files/mysql.server to the location where your system has its startup     |
  1701. |    |files. More information can be found in the support-files/mysql.server script itself, |
  1702. |    |and in 4.15.3 D√©marrer et arr√™te MySQL automatiquement.                               |
  1703. |    |After everything has been installed, you should initialize and test your distribution.|
  1704. |    |                                                                                      |
  1705. |    |You can start the MySQL server with the following command, where BINDIR is the        |
  1706. |    |directory in which safe_mysqld is installed (`/usr/local/bin' by default):            |
  1707. |    |                                                                                      |
  1708. |    |shell> BINDIR/safe_mysqld &                                                           |
  1709. |    |If that command fails immediately with mysqld daemon ended then you can find some     |
  1710. |    |information in the file `mysql-data-directory/'hostname'.err'. The likely reason is   |
  1711. |    |that you already have another mysqld server running. 19.3 Faire tourner plusieurs     |
  1712. |    |serveurs MySQL sur la m√™me machine.                                                   |
  1713. |    |4.15 Param√®trage post-installation et tests.                                          |
  1714. |    |4.7.2 Appliquer un patch                                                              |
  1715. |    |Sometimes patches appear on the mailing list or are placed in the patches area of the |
  1716. |    |MySQL FTP site.                                                                       |
  1717. |    |To apply a patch from the mailing list, save the message in which the patch appears in|
  1718. |    |a file, change into the top-level directory of your MySQL source tree and run these   |
  1719. |    |commands:                                                                             |
  1720. |    |                                                                                      |
  1721. |    |shell> patch -p1 < patch-file-name                                                    |
  1722. |    |shell> rm config.cache                                                                |
  1723. |    |shell> make clean                                                                     |
  1724. |    |Patches from the FTP site are distributed as plain text files or as files compressed  |
  1725. |    |with gzip files. Apply a plain patch as shown above for mailing list patches. To apply|
  1726. |    |a compressed patch, change into the top-level directory of your MySQL source tree and |
  1727. |    |run these commands:                                                                   |
  1728. |    |                                                                                      |
  1729. |    |shell> gunzip < patch-file-name.gz | patch -p1                                        |
  1730. |    |shell> rm config.cache                                                                |
  1731. |    |shell> make clean                                                                     |
  1732. |    |After applying a patch, follow the instructions for a normal source install, beginning|
  1733. |    |with the ./configure step. After running the make install step, restart your MySQL    |
  1734. |    |server.                                                                               |
  1735. |    |You may need to bring down any currently running server before you run make install.  |
  1736. |    |(Use mysqladmin shutdown to do this.) Some systems do not allow you to install a new  |
  1737. |    |version of a program if it replaces the version that is currently executing.          |
  1738. |    |4.7.3 Options communes de configure                                                   |
  1739. |    |The configure script gives you a great deal of control over how you configure your    |
  1740. |    |MySQL distribution. Typically you do this using options on the configure command line.|
  1741. |    |You can also affect configure using certain environment variables. For a list of      |
  1742. |    |options supported by configure, run this command:                                     |
  1743. |    |                                                                                      |
  1744. |    |shell> ./configure --help                                                             |
  1745. |    |Some of the more commonly-used configure options are described below:                 |
  1746. |    |To compile just the MySQL client libraries and client programs and not the server, use|
  1747. |    |the --without-server option:                                                          |
  1748. |    |                                                                                      |
  1749. |    |shell> ./configure --without-server                                                   |
  1750. |    |If you don't have a C++ compiler, mysql will not compile (it is the one client program|
  1751. |    |that requires C++). In this case, you can remove the code in configure that tests for |
  1752. |    |the C++ compiler and then run ./configure with the --without-server option. The       |
  1753. |    |compile step will still try to build mysql, but you can ignore any warnings about     |
  1754. |    |`mysql.cc'. (If make stops, try make -k to tell it to continue with the rest of the   |
  1755. |    |build even if errors occur.)                                                          |
  1756. |    |If you don't want your log files and database directories located under               |
  1757. |    |`/usr/local/var', use a configure command something like one of these:                |
  1758. |    |                                                                                      |
  1759. |    |shell> ./configure --prefix=/usr/local/mysql                                          |
  1760. |    |shell> ./configure --prefix=/usr/local \                                              |
  1761. |    |--localstatedir=/usr/local/mysql/data                                                 |
  1762. |    |The first command changes the installation prefix so that everything is installed     |
  1763. |    |under `/usr/local/mysql' rather than the default of `/usr/local'. The second command  |
  1764. |    |preserves the default installation prefix, but overrides the default location for     |
  1765. |    |database directories (normally `/usr/local/var') and changes it to                    |
  1766. |    |/usr/local/mysql/data.                                                                |
  1767. |    |If you are using Unix and you want the MySQL socket located somewhere other than the  |
  1768. |    |default location (normally in the directory `/tmp' or `/var/run', use a configure     |
  1769. |    |command like this:                                                                    |
  1770. |    |                                                                                      |
  1771. |    |shell> ./configure --with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock            |
  1772. |    |Note that the given file must be an absolute pathname!                                |
  1773. |    |If you want to compile statically-linked programs (e.g., to make a binary             |
  1774. |    |distribution, to get more speed or to work around problems with some RedHat           |
  1775. |    |distributions), run configure like this:                                              |
  1776. |    |                                                                                      |
  1777. |    |shell> ./configure --with-client-ldflags=-all-static \                                |
  1778. |    |--with-mysqld-ldflags=-all-static                                                     |
  1779. |    |If you are using gcc and don't have libg++ or libstdc++ installed, you can tell       |
  1780. |    |configure to use gcc as your C++ compiler:                                            |
  1781. |    |                                                                                      |
  1782. |    |shell> CC=gcc CXX=gcc ./configure                                                     |
  1783. |    |When you use gcc as your C++ compiler, it will not attempt to link in libg++ or       |
  1784. |    |libstdc++. If the build fails and produces errors about your compiler or linker not   |
  1785. |    |being able to create the shared library `libmysqlclient.so.#' (`#' is a version       |
  1786. |    |number), you can work around this problem by giving the --disable-shared option to    |
  1787. |    |configure. In this case, configure will not build a shared libmysqlclient.so.#        |
  1788. |    |library.                                                                              |
  1789. |    |You can configure MySQL not to use DEFAULT column values for non-NULL columns (i.e.,  |
  1790. |    |columns that are not allowed to be NULL). This causes INSERT statements to generate an|
  1791. |    |error unless you explicitly specify values for all columns that require a non-NULL    |
  1792. |    |value. To suppress use of default values, run configure like this:                    |
  1793. |    |                                                                                      |
  1794. |    |shell> CXXFLAGS=-DDONT_USE_DEFAULT_FIELDS ./configure                                 |
  1795. |    |By default, MySQL uses the ISO-8859-1 (Latin1) character set. To change the default   |
  1796. |    |set, use the --with-charset option:                                                   |
  1797. |    |                                                                                      |
  1798. |    |shell> ./configure --with-charset=CHARSET                                             |
  1799. |    |CHARSET may be one of big5, cp1251, cp1257, czech, danish,dec8, dos, euc_kr, german1, |
  1800. |    |hebrew, hp8, hungarian, koi8_ru, koi8_ukr, latin1, latin2, sjis, swe7, tis620, ujis,  |
  1801. |    |usa7, win1251 or win1251ukr. 9.1.1 Le jeu de caract√®re utilis√© pour le tri des        |
  1802. |    |donn√©es. Note that if you want to change the character set, you must do a make        |
  1803. |    |distclean between configurations! If you want to convert characters between the server|
  1804. |    |and the client, you should take a look at the SET OPTION CHARACTER SET command. SET   |
  1805. |    |OPTION. Warning: If you change character sets after having created any tables, you    |
  1806. |    |will have to run isamchk -r -q on every table. Your indexes may be sorted incorrectly |
  1807. |    |otherwise. (This can happen if you install MySQL, create some tables, then reconfigure|
  1808. |    |MySQL to use a different character set and reinstall it.)                             |
  1809. |    |To configure MySQL with debugging code, use the --with-debug option:                  |
  1810. |    |                                                                                      |
  1811. |    |shell> ./configure --with-debug                                                       |
  1812. |    |This causes a safe memory allocator to be included that can find some errors and that |
  1813. |    |provides output about what is happening. G.1 Debugguer un serveur MySQL.              |
  1814. |    |Options that pertain to particular systems can be found in the system-specific        |
  1815. |    |sections later in this chapter. 4.11 Quelques sp√©cificit√©s li√©es aux OS.              |
  1816. |    |4.8 Probl√®mes de compilation?                                                         |
  1817. |    |All MySQL programs compile cleanly for us with no warnings on Solaris using gcc. On   |
  1818. |    |other systems, warnings may occur due to differences in system include files. See 4.9 |
  1819. |    |Remarques sur MIT-pthreads, for warnings that may occur when using MIT-pthreads. For  |
  1820. |    |other problems, check the list below.                                                 |
  1821. |    |The solution to many problems involves reconfiguring. If you do need to reconfigure,  |
  1822. |    |take note of the following:                                                           |
  1823. |    |If configure is run after it already has been run, it may use information that was    |
  1824. |    |gathered during its previous invocation. This information is stored in `config.cache'.|
  1825. |    |When configure starts up, it looks for that file and reads its contents if it exists, |
  1826. |    |on the assumption that the information is still correct. That assumption is invalid   |
  1827. |    |when you reconfigure.                                                                 |
  1828. |    |Each time you run configure, you must run make again to recompile. However, you may   |
  1829. |    |want to remove old object files from previous builds first, since they were compiled  |
  1830. |    |using different configuration options.                                                |
  1831. |    |To prevent old configuration information or object files from being used, run these   |
  1832. |    |commands before rerunning configure:                                                  |
  1833. |    |                                                                                      |
  1834. |    |shell> rm config.cache                                                                |
  1835. |    |shell> make clean                                                                     |
  1836. |    |Alternatively, you can run make distclean.                                            |
  1837. |    |The list below describes some of the problems compiling MySQL that have been found to |
  1838. |    |occur most often:                                                                     |
  1839. |    |If you get errors when compiling `sql_yacc.cc' such as the ones shown below, you have |
  1840. |    |probably run out of memory or swap space:                                             |
  1841. |    |                                                                                      |
  1842. |    |Internal compiler error: program cc1plus got fatal signal 11                          |
  1843. |    |or                                                                                    |
  1844. |    |Out of virtual memory                                                                 |
  1845. |    |or                                                                                    |
  1846. |    |Virtual memory exhausted                                                              |
  1847. |    |The problem is that gcc requires huge amounts of memory to compile `sql_yacc.cc' with |
  1848. |    |inline functions. Try running configure with the --with-low-memory option:            |
  1849. |    |                                                                                      |
  1850. |    |shell> ./configure --with-low-memory                                                  |
  1851. |    |This option causes -fno-inline to be added to the compile line if you are using gcc   |
  1852. |    |and -O0 if you are using something else. You should try the --with-low-memory option  |
  1853. |    |even if you have so much memory and swap space that you think you can't possibly have |
  1854. |    |run out. This problem has been observed to occur even on systems with generous        |
  1855. |    |hardware configurations, and the --with-low-memory option usually fixes it.           |
  1856. |    |By default, configure picks c++ as the compiler name and GNU c++ links with -lg++. If |
  1857. |    |you are using gcc, that behavior can cause problems during configuration such as this:|
  1858. |    |                                                                                      |
  1859. |    |                                                                                      |
  1860. |    |configure: error: installation or configuration problem:                              |
  1861. |    |C++ compiler cannot create executables.                                               |
  1862. |    |You might also observe problems during compilation related to g++, libg++ or          |
  1863. |    |libstdc++. One cause of these problems is that you may not have g++, or you may have  |
  1864. |    |g++ but not libg++ or libstdc++. Take a look at the `config.log' file. It should      |
  1865. |    |contain the exact reason why your c++ compiler didn't work! To work around these      |
  1866. |    |problems, you can use gcc as your C++ compiler. Try setting the environment variable  |
  1867. |    |CXX to "gcc -O3". For example:                                                        |
  1868. |    |                                                                                      |
  1869. |    |shell> CXX="gcc -O3" ./configure                                                      |
  1870. |    |This works because gcc compiles C++ sources as well as g++ does, but does not link in |
  1871. |    |libg++ or libstdc++ by default. Another way to fix these problems, of course, is to   |
  1872. |    |install g++, libg++ and libstdc++.                                                    |
  1873. |    |If your compile fails with errors such as any of the following, you must upgrade your |
  1874. |    |version of make to GNU make:                                                          |
  1875. |    |                                                                                      |
  1876. |    |making all in mit-pthreads                                                            |
  1877. |    |make: Fatal error in reader: Makefile, line 18:                                       |
  1878. |    |Badly formed macro assignment                                                         |
  1879. |    |or                                                                                    |
  1880. |    |make: file `Makefile' line 18: Must be a separator (:                                 |
  1881. |    |or                                                                                    |
  1882. |    |pthread.h: No such file or directory                                                  |
  1883. |    |Solaris and FreeBSD are known to have troublesome make programs. GNU make version 3.75|
  1884. |    |is known to work.                                                                     |
  1885. |    |If you want to define flags to be used by your C or C++ compilers, do so by adding the|
  1886. |    |flags to the CFLAGS and CXXFLAGS environment variables. You can also specify the      |
  1887. |    |compiler names this way using CC and CXX. For example:                                |
  1888. |    |                                                                                      |
  1889. |    |shell> CC=gcc                                                                         |
  1890. |    |shell> CFLAGS=-O6                                                                     |
  1891. |    |shell> CXX=gcc                                                                        |
  1892. |    |shell> CXXFLAGS=-O6                                                                   |
  1893. |    |shell> export CC CFLAGS CXX CXXFLAGS                                                  |
  1894. |    |See 4.14 TcX, for a list of flag definitions that have been found to be useful on     |
  1895. |    |various systems.                                                                      |
  1896. |    |If you get an error message like this, you need to upgrade your gcc compiler:         |
  1897. |    |                                                                                      |
  1898. |    |client/libmysql.c:273: parse error before `__attribute__'                             |
  1899. |    |gcc 2.8.1 is known to work, but we recommend using egcs 1.0.3a or newer instead.      |
  1900. |    |If you get errors such as those shown below when compiling mysqld, configure didn't   |
  1901. |    |correctly detect the type of the last argument to accept(), getsockname() or          |
  1902. |    |getpeername():                                                                        |
  1903. |    |                                                                                      |
  1904. |    |cxx: Error: mysqld.cc, line 645: In this statement, the referenced                    |
  1905. |    |type of the pointer value "&length" is "unsigned long", which                         |
  1906. |    |is not compatible with "int".                                                         |
  1907. |    |new_sock = accept(sock, (struct sockaddr *)&cAddr, &length);                          |
  1908. |    |To fix this, edit the `config.h' file (which is generated by configure). Look for     |
  1909. |    |these lines:                                                                          |
  1910. |    |                                                                                      |
  1911. |    |/* Define as the base type of the last arg to accept */                               |
  1912. |    |#define SOCKET_SIZE_TYPE XXX                                                          |
  1913. |    |Change XXX to size_t or int, depending on your operating system. (Note that you will  |
  1914. |    |have to do this each time you run configure, since configure regenerates `config.h'.) |
  1915. |    |The `sql_yacc.cc' file is generated from `sql_yacc.yy'. Normally the build process    |
  1916. |    |doesn't need to create `sql_yacc.cc', because MySQL comes with an already-generated   |
  1917. |    |copy. However, if you do need to recreate it, you might encounter this error:         |
  1918. |    |                                                                                      |
  1919. |    |"sql_yacc.yy", line xxx fatal: default action causes potential...                     |
  1920. |    |This is a sign that your version of yacc is deficient. You probably need to install   |
  1921. |    |bison (the GNU version of yacc) and use that instead.                                 |
  1922. |    |If you need to debug mysqld or a MySQL client, run configure with the --with-debug    |
  1923. |    |option, then recompile and link your clients with the new client library. G.2         |
  1924. |    |Debugguer un client MySQL.                                                            |
  1925. |    |4.9 Remarques sur MIT-pthreads                                                        |
  1926. |    |This section describes some of the issues involved in using MIT-pthreads.             |
  1927. |    |Note that on Linux you should NOT use MIT-pthreads but install LinuxThreads! 4.11.5   |
  1928. |    |Linux (Toutes versions de Linux).                                                     |
  1929. |    |If your system does not provide native thread support, you will need to build MySQL   |
  1930. |    |using the MIT-pthreads package. This includes most FreeBSD systems, SunOS 4.x, Solaris|
  1931. |    |2.4 and earlier, and some others. 4.2 Syst√®mes d'exploitation support√©s par MySQL.    |
  1932. |    |On most systems, you can force MIT-pthreads to be used by running configure with the  |
  1933. |    |--with-mit-threads option:                                                            |
  1934. |    |                                                                                      |
  1935. |    |shell> ./configure --with-mit-threads                                                 |
  1936. |    |Building in a non-source directory is not supported when using MIT-pthreads, because  |
  1937. |    |we want to minimize our changes to this code.                                         |
  1938. |    |MIT-pthreads doesn't support the AF_UNIX protocol used to implement Unix sockets. This|
  1939. |    |means that if you compile using MIT-pthreads, all connections must be made using      |
  1940. |    |TCP/IP (which is a little slower). If you find after building MySQL that you cannot   |
  1941. |    |connect to the local server, it may be that your client is attempting to connect to   |
  1942. |    |localhost using a Unix socket as the default. Try making a TCP/IP connection with     |
  1943. |    |mysql by using a host option (-h or --host) to specify the local host name explicitly.|
  1944. |    |                                                                                      |
  1945. |    |The checks that determine whether or not to use MIT-pthreads occur only during the    |
  1946. |    |part of the configuration process that deals with the server code. If you have        |
  1947. |    |configured the distribution using --without-server to build only the client code,     |
  1948. |    |clients will not know whether or not MIT-pthreads is being used and will use Unix     |
  1949. |    |socket connections by default. Since Unix sockets do not work under MIT-pthreads, this|
  1950. |    |means you will need to use -h or --host when you run client programs.                 |
  1951. |    |When MySQL is compiled using MIT-pthreads, system locking is disabled by default for  |
  1952. |    |performance reasons. You can tell the server to use system locking with the           |
  1953. |    |--use-locking option.                                                                 |
  1954. |    |Sometimes the pthread bind() command fails to bind to a socket without any error      |
  1955. |    |message (at least on Solaris). The result is that all connections to the server fail. |
  1956. |    |For example:                                                                          |
  1957. |    |                                                                                      |
  1958. |    |shell> mysqladmin version                                                             |
  1959. |    |mysqladmin: connect to server at '' failed;                                           |
  1960. |    |error: 'Can't connect to mysql server on localhost (146)'                             |
  1961. |    |The solution to this is to kill the mysqld server and restart it. This has only       |
  1962. |    |happened to us when we have forced the server down and done a restart immediately.    |
  1963. |    |With MIT-pthreads, the sleep() system call isn't interruptible with SIGINT (break).   |
  1964. |    |This is only noticeable when you run mysqladmin --sleep. You must wait for the sleep()|
  1965. |    |call to terminate before the interrupt is served and the process stops.               |
  1966. |    |When linking you may receive warning messages like these (at least on Solaris); they  |
  1967. |    |can be ignored:                                                                       |
  1968. |    |                                                                                      |
  1969. |    |ld: warning: symbol `_iob' has differing sizes:                                       |
  1970. |    |(file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4;                        |
  1971. |    |file /usr/lib/libc.so value=0x140);                                                   |
  1972. |    |/my/local/pthreads/lib/libpthread.a(findfp.o) definition taken                        |
  1973. |    |ld: warning: symbol `__iob' has differing sizes:                                      |
  1974. |    |(file /my/local/pthreads/lib/libpthread.a(findfp.o) value=0x4;                        |
  1975. |    |file /usr/lib/libc.so value=0x140);                                                   |
  1976. |    |/my/local/pthreads/lib/libpthread.a(findfp.o) definition taken                        |
  1977. |    |Some other warnings also can be ignored:                                              |
  1978. |    |                                                                                      |
  1979. |    |implicit declaration of function `int strtoll(...)'                                   |
  1980. |    |implicit declaration of function `int strtoul(...)'                                   |
  1981. |    |We haven't gotten readline to work with MIT-pthreads. (This isn't needed, but may be  |
  1982. |    |interesting for someone.)                                                             |
  1983. |    |4.10 Remarques sur l'installation Perl                                                |
  1984. |    |4.10.1 Installer Perl sous Unix                                                       |
  1985. |    |Perl support for MySQL is provided by means of the DBI/DBD client interface. 20.5 API |
  1986. |    |MySQL en Perl. The Perl DBD/DBI client code requires Perl 5.004 or later. The         |
  1987. |    |interface will not work if you have an older version of Perl.                         |
  1988. |    |MySQL Perl support also requires that you've installed MySQL client programming       |
  1989. |    |support. If you installed MySQL from RPM files, client programs are in the client RPM,|
  1990. |    |but client programming support is in the developer RPM. Make sure you've installed the|
  1991. |    |latter RPM.                                                                           |
  1992. |    |As of release 3.22.8, Perl support is distributed separately from the main MySQL      |
  1993. |    |distribution. If you want to install Perl support, the files you will need can be     |
  1994. |    |obtained from http://www.mysql.com/Contrib.                                           |
  1995. |    |The Perl distributions are provided as compressed tar archives and have names like    |
  1996. |    |`MODULE-VERSION.tar.gz', where MODULE is the module name and VERSION is the version   |
  1997. |    |number. You should get the Data-Dumper, DBI, and Msql-Mysql-modules distributions and |
  1998. |    |install them in that order. The installation procedure is shown below. The example    |
  1999. |    |shown is for the Data-Dumper module, but the procedure is the same for all three      |
  2000. |    |distributions.                                                                        |
  2001. |    |Unpack the distribution into the current directory:                                   |
  2002. |    |                                                                                      |
  2003. |    |shell> gunzip < Data-Dumper-VERSION.tar.gz | tar xvf -                                |
  2004. |    |This command creates a directory named `Data-Dumper-VERSION'.                         |
  2005. |    |Change into the top-level directory of the unpacked distribution:                     |
  2006. |    |                                                                                      |
  2007. |    |shell> cd Data-Dumper-VERSION                                                         |
  2008. |    |Build the distribution and compile everything:                                        |
  2009. |    |                                                                                      |
  2010. |    |shell> perl Makefile.PL                                                               |
  2011. |    |shell> make                                                                           |
  2012. |    |shell> make test                                                                      |
  2013. |    |shell> make install                                                                   |
  2014. |    |The make test command is important, because it verifies that the module is working.   |
  2015. |    |Note that when you run that command during the Msql-Mysql-modules installation to     |
  2016. |    |exercise the interface code, the MySQL server must be running or the test will fail.  |
  2017. |    |It is a good idea to rebuild and reinstall the Msql-Mysql-modules distribution        |
  2018. |    |whenever you install a new release of MySQL, particularly if you notice symptoms such |
  2019. |    |as all your DBI scripts dumping core after you upgrade MySQL.                         |
  2020. |    |If you don't have the right to install Perl modules in the system directory or if you |
  2021. |    |to install local Perl modules, the following reference may help you:                  |
  2022. |    |                                                                                      |
  2023. |    |http://www.iserver.com/support/contrib/perl5/modules.html                             |
  2024. |    |Look under the heading Installing New Modules that Require Locally Installed Modules. |
  2025. |    |4.10.2 Installer ActiveState Perl sous Win32                                          |
  2026. |    |To install the MySQL DBD module with ActiveState Perl on Win32, you should do the     |
  2027. |    |following:                                                                            |
  2028. |    |Open a DOS shell.                                                                     |
  2029. |    |If required, set the HTTP_proxy variable. For example, you might try: set             |
  2030. |    |HTTP_proxy=my.proxy.com:3128                                                          |
  2031. |    |Start the PPM program: C:\perl\bin\ppm.pl                                             |
  2032. |    |If you have not already done so, install DBI: install DBI                             |
  2033. |    |If this succeeds, install DBD::mysql: http://www.mysql.com/Contrib/ppd/DBD-mysql.ppd  |
  2034. |    |If you can't get the above to work, you should instead install the MyODBC driver and  |
  2035. |    |connect to MySQL server through ODBC.                                                 |
  2036. |    |                                                                                      |
  2037. |    |use DBI;                                                                              |
  2038. |    |$dbh= DBI->connect("DBI:ODBC:$dsn","$user","$password") ||                            |
  2039. |    |die "Got error $DBI::errstr when connecting to $dsn\n";                               |
  2040. |    |4.10.3 Installer la distribution Perl de MySQL sous Win32                             |
  2041. |    |The MySQL Perl distribution contains DBI, DBD:MySQL and DBD:ODBC.                     |
  2042. |    |Get the Perl distribution for Win32 from http://www.mysql.com/download.html.          |
  2043. |    |Unzip the distribution in C: so that you get a `C:\PERL' directory.                   |
  2044. |    |Add the directory `C:\PERL\BIN' to your path.                                         |
  2045. |    |Add the directory `C:\PERL\BIN\MSWin32-x86-thread' or `C:\PERL\BIN\MSWin32-x86' to    |
  2046. |    |your path.                                                                            |
  2047. |    |Test that perl works by executing perl -v in a DOS shell.                             |
  2048. |    |4.10.4 Probl√®mes avec l'interface DBI/DBD de Perl                                     |
  2049. |    |If Perl reports that it can't find the ../mysql/mysql.so module, then the problem is  |
  2050. |    |probably that Perl can't locate the shared library `libmysqlclient.so'.               |
  2051. |    |You can fix this by any of the following m√©thodes:                                    |
  2052. |    |Compile the Msql-Mysql-modules distribution with perl Makefile.PL -static rather than |
  2053. |    |perl Makefile.PL                                                                      |
  2054. |    |Copy libmysqlclient.so to the directory where your other shared libraries are located |
  2055. |    |(probably `/usr/lib' or `/lib').                                                      |
  2056. |    |On Linux you can add the pathname of the directory where libmysqlclient.so is located |
  2057. |    |to the `/etc/ld.so.conf' file.                                                        |
  2058. |    |Add the pathname of the directory where libmysqlclient.so is located to the           |
  2059. |    |LD_RUN_PATH environment variable.                                                     |
  2060. |    |If you get the following errors from DBD-mysql, you are probably using gcc (or using  |
  2061. |    |an old binary compiled with gcc):                                                     |
  2062. |    |                                                                                      |
  2063. |    |/usr/bin/perl: can't resolve symbol '__moddi3'                                        |
  2064. |    |/usr/bin/perl: can't resolve symbol '__divdi3'                                        |
  2065. |    |Add -L/usr/lib/gcc-lib/... -lgcc to the link command when the `mysql.so' library gets |
  2066. |    |built (check the output from make for `mysql.so' when you compile the Perl client).   |
  2067. |    |The -L option should specify the pathname of the directory where `libgcc.a' is located|
  2068. |    |on your system.                                                                       |
  2069. |    |Another cause of this problem may be that Perl and MySQL aren't both compiled with    |
  2070. |    |gcc. In this case, you can solve the mismatch by compiling both with gcc.             |
  2071. |    |If you want to use the Perl module on a system that doesn't support dynamic linking   |
  2072. |    |(like SCO) you can generate a static version of Perl that includes DBI and DBD-mysql. |
  2073. |    |The way this works is that you generate a version of Perl with the DBI code linked in |
  2074. |    |and install it on top of your current Perl. Then you use that to build a version of   |
  2075. |    |Perl that additionally has the DBD code linked in, and install that.                  |
  2076. |    |On SCO, you must have the following environment variables set:                        |
  2077. |    |                                                                                      |
  2078. |    |shell> LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:/usr/progressive/lib              |
  2079. |    |or                                                                                    |
  2080. |    |shell>                                                                                |
  2081. |    |LD_LIBRARY_PATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:/usr/progressive/lib:/usr/sk|
  2082. |    |unk/lib                                                                               |
  2083. |    |shell>                                                                                |
  2084. |    |LIBPATH=/usr/lib:/lib:/usr/local/lib:/usr/ccs/lib:/usr/progressive/lib:/usr/skunk/lib |
  2085. |    |shell> MANPATH=scohelp:/usr/man:/usr/local1/man:/usr/local/man:/usr/skunk/man:        |
  2086. |    |First, create a Perl that includes a statically-linked DBI by running these commands  |
  2087. |    |in the directory where your DBI distribution is located:                              |
  2088. |    |                                                                                      |
  2089. |    |shell> perl Makefile.PL LINKTYPE=static                                               |
  2090. |    |shell> make                                                                           |
  2091. |    |shell> make install                                                                   |
  2092. |    |shell> make perl                                                                      |
  2093. |    |Then you must install the new Perl. The output of make perl will indicate the exact   |
  2094. |    |make command you will need to execute to perform the installation. On SCO, this is    |
  2095. |    |make -f Makefile.aperl inst_perl MAP_TARGET=perl.                                     |
  2096. |    |Next, use the just-created Perl to create another Perl that also includes a           |
  2097. |    |statically-linked DBD::mysql by running these commands in the directory where your    |
  2098. |    |Msql-Mysql-modules distribution is located:                                           |
  2099. |    |                                                                                      |
  2100. |    |shell> perl Makefile.PL LINKTYPE=static                                               |
  2101. |    |shell> make                                                                           |
  2102. |    |shell> make install                                                                   |
  2103. |    |shell> make perl                                                                      |
  2104. |    |Finally, you should install this new Perl. Again, the output of make perl indicates   |
  2105. |    |the command to use.                                                                   |
  2106. |    |4.11 Quelques sp√©cificit√©s li√©es aux OS                                               |
  2107. |    |The following sections indicate some of the issues that have been observed to occur on|
  2108. |    |particular systems when installing MySQL from a source distribution.                  |
  2109. |    |4.11.1 Solaris                                                                        |
  2110. |    |On Solaris, you may run into trouble even before you get the MySQL distribution       |
  2111. |    |unpacked! Solaris tar can't handle long file names, so you may see an error like this |
  2112. |    |when you unpack MySQL:                                                                |
  2113. |    |                                                                                      |
  2114. |    |x mysql-3.22.12-beta/bench/Results/ATIS-mysql_odbc-NT_4.0-cmp-db2,                    |
  2115. |    |informix,ms-sql,mysql,oracle,solid,sybase, 0 bytes, 0 tape blocks                     |
  2116. |    |tar: directory checksum error                                                         |
  2117. |    |In this case, you must use GNU tar (gtar) to unpack the distribution. You can find a  |
  2118. |    |precompiled copy for Solaris at http://www.mysql.com/Downloads/.                      |
  2119. |    |Sun native threads work only on Solaris 2.5 and higher. For 2.4 and earlier versions, |
  2120. |    |MySQL will automatically use MIT-pthreads. 4.9 Remarques sur MIT-pthreads.            |
  2121. |    |If you get the following error from configure:                                        |
  2122. |    |                                                                                      |
  2123. |    |checking for restartable system calls... configure: error can not run test            |
  2124. |    |programs while cross compiling                                                        |
  2125. |    |This means that you have something wrong with your compiler installation! In this case|
  2126. |    |you should upgrade your compiler to a newer version. You may also be able to solve    |
  2127. |    |this problem by inserting the following row into the config.cache file:               |
  2128. |    |                                                                                      |
  2129. |    |ac_cv_sys_restartable_syscalls=${ac_cv_sys_restartable_syscalls='no'}                 |
  2130. |    |If you are using Solaris on a SPARC, the recommended compiler is egcs 1.1.2 or newer. |
  2131. |    |You can find this at http://egcs.cygnus.com/. Note that egs 1.1.1 and gcc 2.8.1 don't |
  2132. |    |work reliably on SPARC!                                                               |
  2133. |    |The recommended configure line when using egcs 1.1.2 is:                              |
  2134. |    |                                                                                      |
  2135. |    |shell> CC=gcc CFLAGS="-O6"                                                            |
  2136. |    |CXX=gcc CXXFLAGS="-O6 -felide-constructors -fno-exceptions -fno-rtti"                 |
  2137. |    |./configure --prefix=/usr/local/mysql --with-low-memory                               |
  2138. |    |If you have the Sun Workshop 4.2 compiler, you can run configure like this:           |
  2139. |    |CC=cc CFLAGS="-xstrconst -Xa -xO4 -native -mt" CXX=CC CXXFLAGS="-xO4 -native -noex    |
  2140. |    |-mt" ./configure --prefix=/usr/local/mysql                                            |
  2141. |    |                                                                                      |
  2142. |    |shell> CC=cc CFLAGS="-Xa -fast -xO4 -native -xstrconst -mt" \                         |
  2143. |    |CXX=CC CXXFLAGS="-noex -XO4 -mt" \                                                    |
  2144. |    |./configure                                                                           |
  2145. |    |You may also have to edit the configure script to change this line:                   |
  2146. |    |                                                                                      |
  2147. |    |#if !defined(__STDC__) || __STDC__ != 1                                               |
  2148. |    |to this:                                                                              |
  2149. |    |                                                                                      |
  2150. |    |#if !defined(__STDC__)                                                                |
  2151. |    |If you turn on __STDC__ with the -Xc option, the Sun compiler can't compile with the  |
  2152. |    |Solaris `pthread.h' header file. This is a Sun bug (broken compiler or broken include |
  2153. |    |file).                                                                                |
  2154. |    |If mysqld issues the error message shown below when you run it, you have tried to     |
  2155. |    |compile MySQL with the Sun compiler without enabling the multi-thread option (-mt):   |
  2156. |    |                                                                                      |
  2157. |    |libc internal error: _rmutex_unlock: rmutex not held                                  |
  2158. |    |Add -mt to CFLAGS and CXXFLAGS and try again.                                         |
  2159. |    |If you get the following error when compiling MySQL with gcc, it means that your gcc  |
  2160. |    |is not configured for your version of Solaris!                                        |
  2161. |    |                                                                                      |
  2162. |    |shell> gcc -O3 -g -O2 -DDBUG_OFF  -o thr_alarm ...                                    |
  2163. |    |./thr_alarm.c: In function `signal_hand':                                             |
  2164. |    |./thr_alarm.c:556: too many arguments to function `sigwait'                           |
  2165. |    |The proper thing to do in this case is to get the newest version of egcs and compile  |
  2166. |    |it with your current gcc compiler! At least for Solaris 2.5, almost all binary        |
  2167. |    |versions of gcc have old, unusable include files that will break all programs that use|
  2168. |    |threads (and possibly other programs)!                                                |
  2169. |    |Solaris doesn't provide static versions of all system libraries (libpthreads and      |
  2170. |    |libdl), so you can't compile MySQL with --static. If you try to do so, you will get   |
  2171. |    |the error:                                                                            |
  2172. |    |                                                                                      |
  2173. |    |ld: fatal: library -ldl: not found                                                    |
  2174. |    |If too many processes try to connect very rapidly to mysqld, you will see this error  |
  2175. |    |in the MySQL log:                                                                     |
  2176. |    |                                                                                      |
  2177. |    |Error in accept: Protocol error                                                       |
  2178. |    |You might try starting the server with the --set-variable back_log=50 option as a     |
  2179. |    |workaround for this.                                                                  |
  2180. |    |If you are linking your own MySQL client, you might get the following error when you  |
  2181. |    |try to execute it:                                                                    |
  2182. |    |                                                                                      |
  2183. |    |ld.so.1: ./my: fatal: libmysqlclient.so.#: open failed: No such file or directory     |
  2184. |    |The problem can be avoided by one of the following m√©thodes:                          |
  2185. |    |Link the client with the following flag (instead of -Lpath):                          |
  2186. |    |-Wl,r/full-path-to-libmysqlclient.so.                                                 |
  2187. |    |Copy libmysqclient.so to `/usr/lib'.                                                  |
  2188. |    |Add the pathname of the directory where libmysqlclient.so is located to the           |
  2189. |    |LD_RUN_PATH environment variable before running your client.                          |
  2190. |    |4.11.2 Solaris 2.7                                                                    |
  2191. |    |You can normally use a Solaris 2.6 binary on Solaris 2.7. Most of the Solaris 2.6     |
  2192. |    |issues also apply for Solaris 2.7.                                                    |
  2193. |    |Solaris 2.7 has some bugs in the include files. You may see the following error when  |
  2194. |    |you use gcc:                                                                          |
  2195. |    |                                                                                      |
  2196. |    |/usr/include/widec.h:42: warning: `getwc' redefined                                   |
  2197. |    |/usr/include/wchar.h:326: warning: this is the location of the previous               |
  2198. |    |definition                                                                            |
  2199. |    |If this occurs, you can do the following to fix the problem:                          |
  2200. |    |Copy /usr/include/widec.h to .../lib/gcc-lib/os/gcc-version/include and change line 41|
  2201. |    |from:                                                                                 |
  2202. |    |                                                                                      |
  2203. |    |#if     !defined(lint) && !defined(__lint)                                            |
  2204. |    |                                                                                      |
  2205. |    |to                                                                                    |
  2206. |    |                                                                                      |
  2207. |    |#if     !defined(lint) && !defined(__lint) && !defined(getwc)                         |
  2208. |    |Alternatively, you can edit `/usr/include/widec.h' directly. Either way, after you    |
  2209. |    |make the fix, you should remove `config.cache' and run configure again!               |
  2210. |    |If you get errors like this when you run make, it's because configure didn't detect   |
  2211. |    |the `curses.h' file (probably because of the error in /usr/include/widec.h:           |
  2212. |    |                                                                                      |
  2213. |    |In file included from mysql.cc:50:                                                    |
  2214. |    |/usr/include/term.h:1060: syntax error before `,'                                     |
  2215. |    |/usr/include/term.h:1081: syntax error before `;'                                     |
  2216. |    |The solution to this is to do one of the following steps:                             |
  2217. |    |Edit `/usr/include/widec.h' as indicted above and rerun configure                     |
  2218. |    |Remove the #define HAVE_TERM line from `config.h' file and run make again.            |
  2219. |    |Configure with CFLAGS=-DHAVE_CURSES CXXFLAGS=-DCURSES ./configure                     |
  2220. |    |4.11.3 Solaris x86                                                                    |
  2221. |    |If you are using gcc or egcs on Solaris x86 and you experience problems with core     |
  2222. |    |dumps under load, you should use the following configure command:                     |
  2223. |    |                                                                                      |
  2224. |    |shell> CC=gcc CFLAGS="-O6 -fomit-frame-pointer" \                                     |
  2225. |    |CXX=gcc \                                                                             |
  2226. |    |CXXFLAGS="-O6 -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" \  |
  2227. |    |./configure --prefix=/usr/local/mysql                                                 |
  2228. |    |This will avoid problems with the libstdc++ library and with C++ exceptions.          |
  2229. |    |If this doesn't help, you should compile a debug version and run it with a trace file |
  2230. |    |or under gdb. G.1 Debugguer un serveur MySQL.                                         |
  2231. |    |4.11.4 SunOS 4                                                                        |
  2232. |    |On SunOS 4, MIT-pthreads is needed to compile MySQL, which in turn means you will need|
  2233. |    |GNU make.                                                                             |
  2234. |    |Some SunOS 4 systems have problems with dynamic libraries and libtool. You can use the|
  2235. |    |following configure line to avoid this problem:                                       |
  2236. |    |                                                                                      |
  2237. |    |shell> ./configure --disable-shared --with-mysqld-ldflags=-all-static                 |
  2238. |    |When compiling readline, you may get warnings about duplicate defines. These may be   |
  2239. |    |ignored.                                                                              |
  2240. |    |When compiling mysqld, there will be some implicit declaration of function warnings.  |
  2241. |    |These may be ignored.                                                                 |
  2242. |    |4.11.5 Linux (Toutes versions de Linux)                                               |
  2243. |    |MySQL uses LinuxThreads on Linux. If you are using an old Linux version that doesn't  |
  2244. |    |have glibc2, you must install LinuxThreads before trying to compile MySQL.            |
  2245. |    |http://www.mysql.com/Downloads/Linux                                                  |
  2246. |    |If you can't start mysqld or if mysql_install_db doesn't work, please continue        |
  2247. |    |reading! This only happens on Linux system with problems in the LinuxThreads or       |
  2248. |    |libc/glibc libraries. There are a lot of simple workarounds to get MySQL to work! The |
  2249. |    |simplest is to use the binary version of MySQL (not the RPM) for Linux x86. One nice  |
  2250. |    |aspect of this version is that it's probably 10% faster than any version you would    |
  2251. |    |compile yourself! 10.3 Comment la compilation et le link affecte la vitesse de MySQL. |
  2252. |    |One known problem with the binary distribution is that with older Linux systems that  |
  2253. |    |use libc (like RedHat 4.x or Slackware), you will get some non-fatal problems with    |
  2254. |    |hostname resolution 4.6.3.1 Linux notes.                                              |
  2255. |    |isamchk hangs with libc.so.5.3.12. Upgrading to the newest libc fixes this problem.   |
  2256. |    |When using LinuxThreads you will see a minimum of three processes running. These are  |
  2257. |    |in fact threads. There will be one thread for the LinuxThreads manager, one thread to |
  2258. |    |handle connections, and one thread to handle alarms and signals.                      |
  2259. |    |If you see a dead mysqld daemon process with ps, this usually means that you have     |
  2260. |    |found a bug in MySQL or you have got a corrupted table. 18.1 Que faire si MySQL plante|
  2261. |    |constamment?.                                                                         |
  2262. |    |If you are using LinuxThreads and mysqladmin shutdown doesn't work, you must upgrade  |
  2263. |    |to LinuxThreads 0.7.1 or newer.                                                       |
  2264. |    |If you are using RedHat, you might get errors like this:                              |
  2265. |    |                                                                                      |
  2266. |    |/usr/bin/perl is needed...                                                            |
  2267. |    |/usr/sh is needed...                                                                  |
  2268. |    |/usr/sh is needed...                                                                  |
  2269. |    |If so, you should upgrade your version of rpm to `rpm-2.4.11-1.i386.rpm' and          |
  2270. |    |`rpm-devel-2.4.11-1.i386.rpm' (or later).                                             |
  2271. |    |You can get the upgrades of libraries to RedHat 4.2 from                              |
  2272. |    |ftp://ftp.redhat.com/updates/4.2/i386. Or                                             |
  2273. |    |http://www.sunsite.unc.edu/pub/Linux/distributions/redhat/code/rpm/ for other         |
  2274. |    |distributions.                                                                        |
  2275. |    |If you are linking your own MySQL client and get the error:                           |
  2276. |    |                                                                                      |
  2277. |    |ld.so.1: ./my: fatal: libmysqlclient.so.4: open failed: No such file or directory     |
  2278. |    |when executing them, the problem can be avoided by one of the following m√©thodes:     |
  2279. |    |Link the client with the following flag (instead of -Lpath):                          |
  2280. |    |-Wl,r/path-libmysqlclient.so.                                                         |
  2281. |    |Copy libmysqclient.so to `/usr/lib'.                                                  |
  2282. |    |Add the pathname of the directory where libmysqlclient.so is located to the           |
  2283. |    |LD_RUN_PATH environment variable before running your client.                          |
  2284. |    |If you are using the Fujitsu compiler (fcc / FCC) you will have some problems         |
  2285. |    |compiling MySQL because the Linux header files are very gcc oriented.                 |
  2286. |    |The following configure line should work with fcc/FCC:                                |
  2287. |    |                                                                                      |
  2288. |    |CC=fcc CFLAGS="-O -K fast -K lib -K omitfp -Kpreex -D_GNU_SOURCE -DCONST=const        |
  2289. |    |-DNO_STRTOLL_PROTO" CXX=FCC CXXFLAGS="-O -K fast -K lib  -K omitfp -K preex           |
  2290. |    |--no_exceptions --no_rtti -D_GNU_SOURCE -DCONST=const -Dalloca=__builtin_alloca       |
  2291. |    |-DNO_STRTOLL_PROTO '-D_EXTERN_INLINE=static __inline'" ./configure                    |
  2292. |    |--prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static        |
  2293. |    |--disable-shared --with-low-memory                                                    |
  2294. |    |4.11.5.1 Linux-x86                                                                    |
  2295. |    |MySQL requires libc version 5.4.12 or newer. It's known to work with libc 5.4.46.     |
  2296. |    |glibc version 2.0.6 and later should also work. There have been some problems with the|
  2297. |    |glibc RPMs from RedHat so if you have problems, check whether or not there are any    |
  2298. |    |updates! The glibc 2.0.7-19 and 2.0.7-29 RPMs are known to work.                      |
  2299. |    |On some older Linux distributions, configure may produce an error like this:          |
  2300. |    |                                                                                      |
  2301. |    |Syntax error in sched.h. Change _P to __P in the /usr/include/sched.h file.           |
  2302. |    |See the Installation chapter in the Reference Manual.                                 |
  2303. |    |Just do what the error message says and add an extra underscore to the _P macro that  |
  2304. |    |has only one underscore, then try again.                                              |
  2305. |    |You may get some warnings when compiling; those shown below can be ignored:           |
  2306. |    |                                                                                      |
  2307. |    |mysqld.cc -o objs-thread/mysqld.o                                                     |
  2308. |    |mysqld.cc: In function `void init_signals()':                                         |
  2309. |    |mysqld.cc:315: warning: assignment of negative value `-1' to `long unsigned int'      |
  2310. |    |mysqld.cc: In function `void * signal_hand(void *)':                                  |
  2311. |    |mysqld.cc:346: warning: assignment of negative value `-1' to `long unsigned int'      |
  2312. |    |In Debian GNU/Linux, if you want MySQL to start automatically when the system boots,  |
  2313. |    |do the following:                                                                     |
  2314. |    |                                                                                      |
  2315. |    |shell> cp support-files/mysql.server /etc/init.d/mysql.server                         |
  2316. |    |shell> /usr/sbin/update-rc.d mysql.server defaults 99                                 |
  2317. |    |mysql.server can be found in the `share/mysql' directory under the MySQL installation |
  2318. |    |directory, or in the `support-files' directory of the MySQL source tree.              |
  2319. |    |If mysqld always core dumps when it starts up, the problem may be that you have an old|
  2320. |    |`/lib/libc.a'. Try renaming it, then remove `sql/mysqld' and do a new make install and|
  2321. |    |try again. This problem has been reported on some Slackware installations. RedHat 5.0 |
  2322. |    |has also a similar problem with some new glibc versions. 4.11.5.2 RedHat 5.0.         |
  2323. |    |If you get the following error when linking mysqld, it means that your `libg++.a' is  |
  2324. |    |not installed correctly:                                                              |
  2325. |    |                                                                                      |
  2326. |    |/usr/lib/libc.a(putc.o): In function `_IO_putc':                                      |
  2327. |    |putc.o(.text+0x0): multiple definition of `_IO_putc'                                  |
  2328. |    |You can avoid using `libg++.a' by running configure like this:                        |
  2329. |    |                                                                                      |
  2330. |    |shell> CXX=gcc ./configure                                                            |
  2331. |    |4.11.5.2 RedHat 5.0                                                                   |
  2332. |    |If you have any problems with MySQL on RedHat, you should start by upgrading glibc to |
  2333. |    |the newest possible version!                                                          |
  2334. |    |If you install all the official RedHat patches (including glibc-2.0.7-19 and          |
  2335. |    |glibc-devel-2.0.7-19), both the binary and source distributions of MySQL should work  |
  2336. |    |without any trouble!                                                                  |
  2337. |    |The updates are needed since there is a bug in glibc 2.0.5 in how pthread_key_create  |
  2338. |    |variables are freed. With glibc 2.0.5, you must use a statically-linked MySQL binary  |
  2339. |    |distribution. If you want to compile from source, you must install the corrected      |
  2340. |    |version of LinuxThreads from http://www.mysql.com/Downloads/Linux or upgrade your     |
  2341. |    |glibc.                                                                                |
  2342. |    |If you have an incorrect version of glibc or LinuxThreads, the symptom is that mysqld |
  2343. |    |crashes after each connection. For example, mysqladmin version will crash mysqld when |
  2344. |    |it finishes!                                                                          |
  2345. |    |Another symptom of incorrect libraries is that mysqld crashes at once when it starts. |
  2346. |    |On some Linux systems, this can be fixed by configuring like this:                    |
  2347. |    |                                                                                      |
  2348. |    |shell> ./configure --with-mysqld-ldflags=-all-static                                  |
  2349. |    |On Redhat 5.0, the easy way out is to install the glibc 2.0.7-19 RPM and run configure|
  2350. |    |without the --with-mysqld-ldflags=-all-static option.                                 |
  2351. |    |For the source distribution of glibc 2.0.7, a patch that is easy to apply and is      |
  2352. |    |tested with MySQL may be found at:                                                    |
  2353. |    |                                                                                      |
  2354. |    |http://www.mysql.com/Download/Linux/glibc-2.0.7-total-patch.tar.gz                    |
  2355. |    |If you experience crashes like these when you build MySQL, you can always download the|
  2356. |    |newest binary version of MySQL. This is statically-linked to avoid library conflicts  |
  2357. |    |and should work on all Linux systems!                                                 |
  2358. |    |MySQL comes with an internal debugger that can generate trace files with a lot of     |
  2359. |    |information that can be used to find and solve a wide range of different problems. G.1|
  2360. |    |Debugguer un serveur MySQL.                                                           |
  2361. |    |4.11.5.3 RedHat 5.1                                                                   |
  2362. |    |The glibc of RedHat 5.1 (glibc 2.0.7-13) has a memory leak, so to get a stable MySQL  |
  2363. |    |version, you must upgrade glibc to 2.0.7-19, downgrade glibc or use a binary version  |
  2364. |    |of mysqld. If you don't do this, you will encounter memory problems (out of memory,   |
  2365. |    |etc., etc.). The most common error in this case is:                                   |
  2366. |    |                                                                                      |
  2367. |    |Can't create a new thread (errno 11). If you are not out of available                 |
  2368. |    |memory, you can consult the manual for any possible OS dependent bug                  |
  2369. |    |After you have upgraded to glibc 2.0.7-19, you can configure MySQL with dynamic       |
  2370. |    |linking (the default), but you cannot run configure with the                          |
  2371. |    |--with-mysqld-ldflags=-all-static option until you have installed glibc 2.0.7-19 from |
  2372. |    |source!                                                                               |
  2373. |    |You can check which version of glibc you have with rpm -q glibc.                      |
  2374. |    |4.11.5.4 Linux-SPARC                                                                  |
  2375. |    |In some implementations, readdir_r() is broken. The symptom is that SHOW DATABASES    |
  2376. |    |always returns an empty set. This can be fixed by removing HAVE_READDIR_R from        |
  2377. |    |`config.h' after configuring and before compiling.                                    |
  2378. |    |Some problems will require patching your Linux installation. The patch can be found at|
  2379. |    |http://www.mysql.com/patches/Linux-sparc-2.0.30.diff. This patch is against the Linux |
  2380. |    |distribution `sparclinux-2.0.30.tar.gz' that is available at vger.rutgers.edu (a      |
  2381. |    |version of Linux that was never merged with the official 2.0.30). You must also       |
  2382. |    |install LinuxThreads 0.6 or newer.                                                    |
  2383. |    |Thanks to jacques@solucorp.qc.ca for this information.                                |
  2384. |    |4.11.5.5 Linux-Alpha                                                                  |
  2385. |    |The big problem on Linux-Alpha is that there are still some problems with threads in  |
  2386. |    |glibc on this platform. You should start by getting the newest glibc version you can  |
  2387. |    |find.                                                                                 |
  2388. |    |Note that before you run any programs that use threads (like mysqld, thr_alarm or     |
  2389. |    |thr_lock), you should raise the shared memory limit (with ulimit). The MySQL          |
  2390. |    |benchmarks are known to fail if you forget to do this!                                |
  2391. |    |Configure MySQL with the following command:                                           |
  2392. |    |                                                                                      |
  2393. |    |shell> CC=gcc CCFLAGS="-Dalpha_linux_port" \                                          |
  2394. |    |CXX=gcc CXXFLAGS="-O3 -Dalpha_linux_port -felide-constructors -fno-exceptions         |
  2395. |    |-fno-rtti" \                                                                          |
  2396. |    |./configure --prefix=/usr/local/mysql                                                 |
  2397. |    |Try to compile mysys/thr_lock and mysys/thr_alarm. Test that these programs work!     |
  2398. |    |(Invoke each one with no arguments. Each should end with test_succeeded if everything |
  2399. |    |was okay.)                                                                            |
  2400. |    |After installing MySQL, uncomment the ulimit command in safe_mysqld and add options to|
  2401. |    |increase shared memory.                                                               |
  2402. |    |Note that Linux-Alpha is still an alpha-quality platform for MySQL. With the newest   |
  2403. |    |glibc, you have a very good chance of it working.                                     |
  2404. |    |If you have problems with signals (MySQL dies unexpectedly under high load) you may   |
  2405. |    |have found an OS bug with threads and signals. In this case you can tell MySQL not to |
  2406. |    |use signals by configuring with:                                                      |
  2407. |    |                                                                                      |
  2408. |    |shell> CFLAGS=-DDONT_USE_THR_ALARM \                                                  |
  2409. |    |CXXFLAGS=-DDONT_USE_THR_ALARM \                                                       |
  2410. |    |./configure ...                                                                       |
  2411. |    |This doesn't affect the performance of MySQL, but has the side effect that you can't  |
  2412. |    |kill clients that are ``sleeping'' on a connection with mysqladmin kill or mysqladmin |
  2413. |    |shutdown. Instead, the client will die when it issues its next command.               |
  2414. |    |4.11.5.6 MkLinux                                                                      |
  2415. |    |MySQL should work on MkLinux with the newest glibc package (tested with glibc 2.0.7). |
  2416. |    |4.11.5.7 Qube2 Linux                                                                  |
  2417. |    |To get MySQL to work on Qube2, (Linux Mips), you need the newest glibc libraries      |
  2418. |    |(glibc-2.0.7-29C2 is known to work). You must also use the egcs C++ compiler          |
  2419. |    |(egcs-1.0.2-9 or newer).                                                              |
  2420. |    |4.11.6 Alpha-DEC-Unix                                                                 |
  2421. |    |When compiling threaded programs under Digital UNIX, the documentation recommends     |
  2422. |    |using the -pthread option for cc and cxx and the libraries -lmach -lexc (in addition  |
  2423. |    |to -lpthread). You should run configure something like this:                          |
  2424. |    |                                                                                      |
  2425. |    |shell> CC="cc -pthread" CXX="cxx -pthread -O" \                                       |
  2426. |    |./configure --with-named-thread-libs="-lpthread -lmach -lexc -lc"                     |
  2427. |    |When compiling mysqld, you may see a couple of warnings like this:                    |
  2428. |    |                                                                                      |
  2429. |    |mysqld.cc: In function void handle_connections()':                                    |
  2430. |    |mysqld.cc:626: passing long unsigned int *' as argument 3 of                          |
  2431. |    |accept(int,sockadddr *, int *)'                                                       |
  2432. |    |You can safely ignore these warnings. They occur because configure can detect only    |
  2433. |    |errors, not warnings.                                                                 |
  2434. |    |If you start the server directly from the command line, you may have problems with it |
  2435. |    |dying when you log out. (When you log out, your outstanding processes receive a SIGHUP|
  2436. |    |signal.) If so, try starting the server like this:                                    |
  2437. |    |                                                                                      |
  2438. |    |shell> nohup mysqld [options] &                                                       |
  2439. |    |nohup causes the command following it to ignore any SIGHUP signal sent from the       |
  2440. |    |terminal. Alternatively, start the server by running safe_mysqld, which invokes mysqld|
  2441. |    |using nohup for you.                                                                  |
  2442. |    |4.11.7 Alpha-DEC-OSF1                                                                 |
  2443. |    |If you have problems compiling and have DEC CC and gcc installed, try running         |
  2444. |    |configure like this:                                                                  |
  2445. |    |                                                                                      |
  2446. |    |shell> CC=cc CFLAGS=-O CXX=gcc CXXFLAGS=-O3 \                                         |
  2447. |    |./configure --prefix=/usr/local/mysql                                                 |
  2448. |    |If you get problems with the `c_asm.h' file, you can create and use a 'dummy'         |
  2449. |    |`c_asm.h' file with:                                                                  |
  2450. |    |                                                                                      |
  2451. |    |shell> touch include/c_asm.h                                                          |
  2452. |    |shell> CC=gcc CFLAGS=-I./include \                                                    |
  2453. |    |CXX=gcc CXXFLAGS=-O3 \                                                                |
  2454. |    |./configure --prefix=/usr/local/mysql                                                 |
  2455. |    |On OSF1 V4.0D and compiler "DEC C V5.6-071 on Digital UNIX V4.0 (Rev. 878)" the       |
  2456. |    |compiler had some strange behavior (undefined asm symbols). /bin/ld also appears to be|
  2457. |    |broken (problems with _exit undefined errors occuring while linking mysqld). On this  |
  2458. |    |system, we have managed to compile MySQL with the following configure line, after     |
  2459. |    |replacing /bin/ld with the version from OSF 4.0C:                                     |
  2460. |    |                                                                                      |
  2461. |    |shell> CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql              |
  2462. |    |In some versions of OSF1, the alloca() function is broken. Fix this by removing the   |
  2463. |    |line in `config.h' that defines 'HAVE_ALLOCA'.                                        |
  2464. |    |The alloca() function also may have an incorrect prototype in /usr/include/alloca.h.  |
  2465. |    |This warning resulting from this can be ignored.                                      |
  2466. |    |configure will use the following thread libraries automatically:                      |
  2467. |    |--with-named-thread-libs="-lpthread -lmach -lexc -lc".                                |
  2468. |    |When using gcc, you can also try running configure like this:                         |
  2469. |    |                                                                                      |
  2470. |    |shell> CFLAGS=-D_PTHREAD_USE_D4 CXX=gcc CXXFLAGS=-O3 ./configure ....                 |
  2471. |    |If you have problems with signals (MySQL dies unexpectedly under high load) you may   |
  2472. |    |have found an OS bug with threads and signals. In this case you can tell MySQL not to |
  2473. |    |use signals by configuring with:                                                      |
  2474. |    |                                                                                      |
  2475. |    |shell> CFLAGS=-DDONT_USE_THR_ALARM \                                                  |
  2476. |    |CXXFLAGS=-DDONT_USE_THR_ALARM \                                                       |
  2477. |    |./configure ...                                                                       |
  2478. |    |This doesn't affect the performance of MySQL, but has the side effect that you can't  |
  2479. |    |kill clients that are ``sleeping'' on a connection with mysqladmin kill or mysqladmin |
  2480. |    |shutdown. Instead, the client will die when it issues its next command.               |
  2481. |    |4.11.8 SGI-Irix                                                                       |
  2482. |    |You may have to undefine some things in `config.h' after running configure and before |
  2483. |    |compiling.                                                                            |
  2484. |    |In some Irix implementations, the alloca() function is broken. If the mysqld server   |
  2485. |    |dies on some SELECT statements, remove the lines from `config.h' that define          |
  2486. |    |HAVE_ALLOC and HAVE_ALLOCA_H. If mysqladmin create doesn't work, remove the line from |
  2487. |    |`config.h' that defines HAVE_READDIR_R. You may have to remove the HAVE_TERM_H line as|
  2488. |    |well.                                                                                 |
  2489. |    |SGI recommends that you install all of the patches on this page as a set:             |
  2490. |    |http://support.sgi.com/surfzone/patches/patchset/6.2_indigo.rps.html                  |
  2491. |    |At the very minimum, you should install the latest kernel rollup, the latest rld      |
  2492. |    |rollup, and the latest libc rollup.                                                   |
  2493. |    |You definately need all the POSIX patches on this page, for pthreads support:         |
  2494. |    |http://support.sgi.com/surfzone/patches/patchset/6.2_posix.rps.html                   |
  2495. |    |If you get the something like the following error when compiling `mysql.cc':          |
  2496. |    |                                                                                      |
  2497. |    |"/usr/include/curses.h", line 82: error(1084): invalid combination of type            |
  2498. |    |Then type the following in the top-level directory of your MySQL source tree:         |
  2499. |    |                                                                                      |
  2500. |    |shell> extra/replace bool curses_bool < /usr/include/curses.h > include/curses.h      |
  2501. |    |shell> make                                                                           |
  2502. |    |There have also been reports of scheduling problems. If only one thread is running,   |
  2503. |    |things go slow. Avoid this by starting another client. This may lead to a 2-to-10-fold|
  2504. |    |increase in execution speed thereafter for the other thread. This is a                |
  2505. |    |poorly-understood problem with Irix threads; you may have to improvise to find        |
  2506. |    |solutions until this can be fixed.                                                    |
  2507. |    |If you are compiling with gcc, you can use the following configure command:           |
  2508. |    |                                                                                      |
  2509. |    |shell> CC=gcc CXX=gcc CXXFLAGS=-O3 \                                                  |
  2510. |    |./configure --prefix=/usr/local/mysql --with-thread-safe-client \                     |
  2511. |    |--with-named-thread-libs=-lpthread                                                    |
  2512. |    |4.11.9 FreeBSD                                                                        |
  2513. |    |If you notice that configure will use MIT-pthreads, you should read the MIT-pthreads  |
  2514. |    |notes. 4.9 Remarques sur MIT-pthreads.                                                |
  2515. |    |If you get an error from make install that it can't find `/usr/include/pthreads',     |
  2516. |    |configure didn't detect that you need MIT-pthreads. This is fixed by executing these  |
  2517. |    |commands:                                                                             |
  2518. |    |                                                                                      |
  2519. |    |shell> rm config.cache                                                                |
  2520. |    |shell> ./configure --with-mit-threads                                                 |
  2521. |    |The behavior of FreeBSD make is slightly different from that of GNU make. If you have |
  2522. |    |make-related problems, you should install GNU make.                                   |
  2523. |    |If mysql or mysqladmin takes a long time to respond, a user said the following:       |
  2524. |    |Are you running the ppp user process? On one FreeBSD box (2.2.5) MySQL clients takes a|
  2525. |    |couple of seconds to connect to mysqld if the ppp process is running.                 |
  2526. |    |FreeBSD is also known to have a very low default file handle limit. 18.10 File not    |
  2527. |    |found.                                                                                |
  2528. |    |If you have a problem with SELECT NOW() returning values in GMT and not your local    |
  2529. |    |time, you have to set the TZ environment variable to your current timezone. This      |
  2530. |    |should be done for the environment in which the server runs, for example, in          |
  2531. |    |safe_mysqld or mysql.server.                                                          |
  2532. |    |Make sure that the localhost entry in the `/etc/hosts' file is correct (otherwise you |
  2533. |    |will have problems connecting to the database). The `/etc/hosts' file should start    |
  2534. |    |with a line:                                                                          |
  2535. |    |                                                                                      |
  2536. |    |127.0.0.1       localhost localhost.your.domain                                       |
  2537. |    |If you are using FreeBSD 2.2.6, don't forget to apply the ttcp and mmap-22 patches to |
  2538. |    |the OS (for security reasons). Please see http://www.freebsd.org for these CERT       |
  2539. |    |patches.                                                                              |
  2540. |    |If you are using FreeBSD 2.2.7 and you have problems killing the mysqld daemon, you   |
  2541. |    |should get new sources using cvsup and recompile libc_r.                              |
  2542. |    |4.11.9.1 FreeBSD-3.0                                                                  |
  2543. |    |You have to run configure with the --with-named-thread-libs=-lc_r option.             |
  2544. |    |The pthreads library for FreeBSD doesn't contain the sigwait() function and there are |
  2545. |    |some bugs in it. To fix this, get the `FreeBSD-3.0-libc_r-1.0.diff' file from the     |
  2546. |    |FreeBSD area of the MySQL FTP site and apply it in the `/usr/src/lib/libc_r/uthread'  |
  2547. |    |directory. Then follow the instructions that can be found with man pthread about how  |
  2548. |    |to recompile the libc_r library.                                                      |
  2549. |    |You can test if you have a ``modern'' libpthread.a with this command:                 |
  2550. |    |                                                                                      |
  2551. |    |shell> nm /usr/lib/libc_r.a | grep sigwait                                            |
  2552. |    |If the above doesn't find sigwait, you must use the patch above and recompile libc_r. |
  2553. |    |4.11.10 NetBSD                                                                        |
  2554. |    |To compile on NetBSD you need GNU make. Otherwise the compile will crash when make    |
  2555. |    |tries to run lint on C++ files.                                                       |
  2556. |    |4.11.11 BSD/OS                                                                        |
  2557. |    |4.11.11.1 BSD/OS 2.x                                                                  |
  2558. |    |If you get the following error when compiling MySQL, your ulimit value for virtual    |
  2559. |    |memory is too low:                                                                    |
  2560. |    |                                                                                      |
  2561. |    |item_func.h: In m√©thode `Item_func_ge::Item_func_ge(const Item_func_ge &)':           |
  2562. |    |item_func.h:28: virtual memory exhausted                                              |
  2563. |    |make[2]: *** [item_func.o] Error 1                                                    |
  2564. |    |Try using ulimit -v 80000 and run make again. If this doesn't work and you are using  |
  2565. |    |bash, try switching to csh or sh; some BSDI users have reported problems with bash and|
  2566. |    |ulimit.                                                                               |
  2567. |    |If you are using gcc, you may also use have to use the --with-low-memory flag for     |
  2568. |    |configure to be able to compile `sql_yacc.cc'.                                        |
  2569. |    |If you have a problem with SELECT NOW() returning values in GMT and not your local    |
  2570. |    |time, you have to set the TZ environment variable to your current timezone. This      |
  2571. |    |should be done for the environment in which the server runs, for example in           |
  2572. |    |safe_mysqld or mysql.server.                                                          |
  2573. |    |4.11.11.2 BSD/OS 3.x                                                                  |
  2574. |    |Upgrade to BSD/OS 3.1. If that is not possible, install BSDIpatch M300-038.           |
  2575. |    |Use the following command when configuring MySQL:                                     |
  2576. |    |                                                                                      |
  2577. |    |shell> env CXX=shlicc++ CC=shlicc2 \                                                  |
  2578. |    |./configure \                                                                         |
  2579. |    |--prefix=/usr/local/mysql \                                                           |
  2580. |    |--localstatedir=/var/mysql \                                                          |
  2581. |    |--without-perl \                                                                      |
  2582. |    |--with-unix-socket-path=/var/mysql/mysql.sock                                         |
  2583. |    |The following is also known to work:                                                  |
  2584. |    |                                                                                      |
  2585. |    |shell> env CC=gcc CXX=gcc CXXFLAGS=-O3 \                                              |
  2586. |    |./configure \                                                                         |
  2587. |    |--prefix=/usr/local/mysql \                                                           |
  2588. |    |--with-unix-socket-path=/var/mysql/mysql.sock                                         |
  2589. |    |You can change the directory locations if you wish, or just use the defaults by not   |
  2590. |    |specifying any locations.                                                             |
  2591. |    |If you have problems with performance under heavy load, try using the                 |
  2592. |    |--skip-thread-priority option to safe_mysqld! This will run all threads with the same |
  2593. |    |priority; on BSDI 3.1, this gives better performance (at least until BSDI fixes their |
  2594. |    |thread scheduler).                                                                    |
  2595. |    |If you get the error virtual memory exhausted while compiling, you should try using   |
  2596. |    |ulimit -v 80000 and run make again. If this doesn't work and you are using bash, try  |
  2597. |    |switching to csh or sh; some BSDI users have reported problems with bash and ulimit.  |
  2598. |    |4.11.11.3 BSD/OS 4.x                                                                  |
  2599. |    |BSDI 4.x has some thread related bugs. If you want to use MySQL on this, you should   |
  2600. |    |install all thread related patches. At least M400-023 should be installed.            |
  2601. |    |4.11.12 SCO                                                                           |
  2602. |    |The current port is tested only on a ``sco3.2v5.0.4'' and ``sco3.2v5.0.5'' system.    |
  2603. |    |There has also been a lot of progress on a port to ``sco 3.2v4.2''.                   |
  2604. |    |For OpenServer 5.0.X you need to use GDS in Skunkware 95 (95q4c). This is necessary   |
  2605. |    |because GNU gcc 2.7.2 in Skunkware 97 does not have GNU as. You can also use egcs     |
  2606. |    |1.1.2 or newer http://www.egcs.com/. If you are using egcs 1.1.2 you have to execute  |
  2607. |    |the following command:                                                                |
  2608. |    |                                                                                      |
  2609. |    |shell> cp -p /usr/include/pthread/stdtypes.h                                          |
  2610. |    |/usr/local/lib/gcc-lib/i386-pc-sco3.2v5.0.5/egcs-2.91.66/include/pthread/             |
  2611. |    |You need the port of GCC 2.5.? for this product and the Development system. They are  |
  2612. |    |required on this version of SCO UNIX. You cannot just use the GCC Dev system.         |
  2613. |    |You should get the FSU Pthreads package and install it first. This can be found at    |
  2614. |    |http://www.cs.wustl.edu/~schmidt/ACE_wrappers/FSU-threads.tar.gz. You can also get a  |
  2615. |    |precompiled package from                                                              |
  2616. |    |ftp://www.mysql.com/pub/mysql/Downloads/SCO/FSU-threads-3.5c.tar.gz.                  |
  2617. |    |FSU Pthreads can be compiled with SCO UNIX 4.2 with tcpip. Or OpenServer 3.0 or Open  |
  2618. |    |Desktop 3.0 (OS 3.0 ODT 3.0), with the SCO Development System installed using a good  |
  2619. |    |port of GCC 2.5.X ODT or OS 3.0 you will need a good port of GCC 2.5.? There are a lot|
  2620. |    |of problems without a good port. The port for this product requires the SCO UNIX      |
  2621. |    |Development system. Without it, you are missing the libraries and the linker that is  |
  2622. |    |needed.                                                                               |
  2623. |    |To build FSU Pthreads on your system, do the following:                               |
  2624. |    |Run ./configure in the `threads/src' directory and select the SCO OpenServer option.  |
  2625. |    |This command copies `Makefile.SCO5' to `Makefile'.                                    |
  2626. |    |Run make.                                                                             |
  2627. |    |To install in the default `/usr/include' directory, login as root, then cd to the     |
  2628. |    |`thread/src' directory, and run make install.                                         |
  2629. |    |Remember to use GNU make when making MySQL.                                           |
  2630. |    |On OSR 5.0.5, you should use the following configure line:                            |
  2631. |    |                                                                                      |
  2632. |    |shell> CC="gcc -DSCO" CXX="gcc -DSCO" ./configure                                     |
  2633. |    |The -DSCO is needed to help configure detect some thread functions properly. If you   |
  2634. |    |forget -DSCO, you will get the following error message while compiling:               |
  2635. |    |                                                                                      |
  2636. |    |my_pthread.c: In function `my_pthread_mutex_init':                                    |
  2637. |    |my_pthread.c:374: `pthread_mutexattr_default' undeclared (first use this function)    |
  2638. |    |If you don't start safe_mysqld as root, you probably will get only the default 110    |
  2639. |    |open files per process. mysqld will write a note about this in the log file.          |
  2640. |    |With SCO 3.2V5.0.5, you should use a FSU Pthreads version 3.5c or newer. The following|
  2641. |    |configure command should work:                                                        |
  2642. |    |                                                                                      |
  2643. |    |shell> CC="gcc -belf" ./configure --prefix=/usr/local/mysql --disable-shared          |
  2644. |    |With SCO 3.2V4.2, you should use a FSU Pthreads version 3.5c or newer. The following  |
  2645. |    |configure command should work:                                                        |
  2646. |    |                                                                                      |
  2647. |    |shell> CFLAGS="-D_XOPEN_XPG4" CXX=gcc CXXFLAGS="-D_XOPEN_XPG4" \                      |
  2648. |    |./configure \                                                                         |
  2649. |    |--with-debug --prefix=/usr/local/mysql \                                              |
  2650. |    |--with-named-thread-libs="-lgthreads -lsocket -lgen -lgthreads" \                     |
  2651. |    |--with-named-curses-libs="-lcurses"                                                   |
  2652. |    |You may get some problems with some include files. In this case, you can find new     |
  2653. |    |SCO-specific include files at                                                         |
  2654. |    |ftp://www.mysql.com/pub/mysql/Downloads/SCO/SCO-3.2v4.2-includes.tar.gz. You should   |
  2655. |    |unpack this file in the `include' directory of your MySQL source tree.                |
  2656. |    |SCO development notes:                                                                |
  2657. |    |MySQL should automatically detect FSU Pthreads and link mysqld with -lgthreads        |
  2658. |    |-lsocket -lgthreads.                                                                  |
  2659. |    |The SCO development libraries are reentrant in FSU Pthreads. SCO claims that its      |
  2660. |    |libraries' functions are reentrant, so they must be reentrant with FSU Pthreads. FSU  |
  2661. |    |Pthreads on OpenServer tries to use the SCO scheme to make reentrant library.         |
  2662. |    |FSU Pthreads (at least the version at www.mysql.com) comes linked with GNU malloc. If |
  2663. |    |you encounter problems with memory usage, make sure that `gmalloc.o' is included in   |
  2664. |    |`libgthreads.a' and `libgthreads.so'.                                                 |
  2665. |    |In FSU Pthreads, the following system calls are pthreads-aware: read(), write(),      |
  2666. |    |getmsg(), connect(), accept(), select() and wait().                                   |
  2667. |    |If you want to install DBI on SCO, you have to edit the `Makefiles' in DBI-xxx and    |
  2668. |    |each subdirectory:                                                                    |
  2669. |    |                                                                                      |
  2670. |    |OLD:                                  NEW:                                            |
  2671. |    |CC = cc                               CC = gcc -belf                                  |
  2672. |    |CCCDLFLAGS = -KPIC -W1,-Bexport       CCCDLFLAGS = -fpic                              |
  2673. |    |CCDLFLAGS = -wl,-Bexport              CCDLFLAGS =                                     |
  2674. |    |                                                                                      |
  2675. |    |LD = ld                               LD = gcc -belf -G -fpic                         |
  2676. |    |LDDLFLAGS = -G -L/usr/local/lib       LDDLFLAGS = -L/usr/local/lib                    |
  2677. |    |LDFLAGS = -belf -L/usr/local/lib      LDFLAGS = -L/usr/local/lib                      |
  2678. |    |                                                                                      |
  2679. |    |LD = ld                               LD = gcc -belf -G -fpic                         |
  2680. |    |OPTIMISE = -Od                 OPTIMISE = -O1                                         |
  2681. |    |                                                                                      |
  2682. |    |OLD:                                                                                  |
  2683. |    |CCCFLAGS = -belf -dy -w0 -U M_XENIX -DPERL_SCO5 -I/usr/local/include                  |
  2684. |    |                                                                                      |
  2685. |    |NEW:                                                                                  |
  2686. |    |CCFLAGS = -U M_XENIX -DPERL_SCO5 -I/usr/local/include                                 |
  2687. |    |This is because the Perl dynaloader will not load the DBI modules if they were        |
  2688. |    |compiled with icc or cc.                                                              |
  2689. |    |Perl works best when compiled with cc.                                                |
  2690. |    |4.11.13 SCO Unixware 7.0 notes                                                        |
  2691. |    |You must use a version of MySQL at least as recent as 3.22.13, since that version     |
  2692. |    |fixes some portability problems under Unixware.                                       |
  2693. |    |We have been able to compile MySQL with the following configure command on UnixWare   |
  2694. |    |7.0.1:                                                                                |
  2695. |    |                                                                                      |
  2696. |    |shell> CC=cc CXX=CC ./configure --prefix=/usr/local/mysql                             |
  2697. |    |4.11.14 IBM-AIX                                                                       |
  2698. |    |Automatic detection of xlC is missing from Autoconf, so a configure command something |
  2699. |    |like this is needed when using the IBM compiler:                                      |
  2700. |    |                                                                                      |
  2701. |    |shell> CC="xlc_r -ma -O3 -qstrict -DHAVE_INT_8_16_32" \                               |
  2702. |    |CXX="xlC_r -ma -O3 -qstrict -DHAVE_INT_8_16_32" \                                     |
  2703. |    |./configure                                                                           |
  2704. |    |If you are using egcs to compile MySQL, you MUST use the -fno-exceptions flag, as the |
  2705. |    |exception handling in egcs is not thread-safe! (This is tested with egcs 1.1.) We     |
  2706. |    |recommend the following configure line with egcs and gcc on AIX:                      |
  2707. |    |                                                                                      |
  2708. |    |shell> CXX=gcc \                                                                      |
  2709. |    |CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti" \                           |
  2710. |    |./configure --prefix=/home/monty --with-debug --with-low-memory                       |
  2711. |    |If you have problems with signals (MySQL dies unexpectedly under high load) you may   |
  2712. |    |have found an OS bug with threads and signals. In this case you can tell MySQL not to |
  2713. |    |use signals by configuring with:                                                      |
  2714. |    |                                                                                      |
  2715. |    |shell> CFLAGS=-DDONT_USE_THR_ALARM CXX=gcc \                                          |
  2716. |    |CXXFLAGS="-felide-constructors -fno-exceptions -fno-rtti -DDONT_USE_THR_ALARM" \      |
  2717. |    |./configure --prefix=/home/monty --with-debug --with-low-memory                       |
  2718. |    |This doesn't affect the performance of MySQL, but has the side effect that you can't  |
  2719. |    |kill clients that are ``sleeping'' on a connection with mysqladmin kill or mysqladmin |
  2720. |    |shutdown. Instead, the client will die when it issues its next command.               |
  2721. |    |4.11.15 HP-UX                                                                         |
  2722. |    |There are a couple of ``small'' problems when compiling MySQL on HP-UX. We recommend  |
  2723. |    |that you use gcc instead of the HP-UX native compiler, because gcc produces better    |
  2724. |    |code!                                                                                 |
  2725. |    |We recommend one to use gcc 2.95 on HP-UX. Don't use high optimization flags (like    |
  2726. |    |-O6) as this may not be safe on HP-UX.                                                |
  2727. |    |Note that MIT-pthreads can't be compiled with the HP-UX compiler, because it can't    |
  2728. |    |compile .S (assembler) files.                                                         |
  2729. |    |The following configure line should work:                                             |
  2730. |    |                                                                                      |
  2731. |    |CFLAGS="-DHPUX -I/opt/dce/include" CXXFLAGS="-DHPUX -I/opt/dce/include                |
  2732. |    |-felide-constructors -fno-exceptions -fno-rtti" CXX=gcc ./configure --with-pthread    |
  2733. |    |--with-named-thread-libs='-ldce' --prefix=/usr/local/mysql --disable-shared           |
  2734. |    |If you are compiling gcc 2.95 yourself, you should NOT link it with the DCE libraries |
  2735. |    |(libdce.a or libcma.a) if you want to compile MySQL with MIT-pthreads. If you mix the |
  2736. |    |DCE and MIT-pthreads packages you will get a mysqld to which you cannot connect.      |
  2737. |    |Remove the DCE libraries while you compile gcc 2.95!                                  |
  2738. |    |4.12 Remarques pour Win32                                                             |
  2739. |    |This section describes installation and use of MySQL on Win32. This is also described |
  2740. |    |in the `README' file that comes with the MySQL Win32 distribution.                    |
  2741. |    |4.12.1 Installer strong{MySQL} sous Win32                                             |
  2742. |    |If you don't have a registered version of MySQL, you should first download the        |
  2743. |    |shareware version from:                                                               |
  2744. |    |MySQL 3.21.29                                                                         |
  2745. |    |If you plan to connect to MySQL from some other program, you will probably also need  |
  2746. |    |the MyODBC driver. You can find this at the MySQL download page.                      |
  2747. |    |To install either distribution, unzip it in some empty directory and run the Setup.exe|
  2748. |    |program.                                                                              |
  2749. |    |Installation takes place in `C:\mysql'.                                               |
  2750. |    |4.12.2 D√©marrer MySQL sous Win95 / Win98                                              |
  2751. |    |MySQL uses TCP/IP to connect a client to a server. (This will allow any machine on    |
  2752. |    |your network to connect to your MySQL server). Because of this, you must install      |
  2753. |    |TCP/IP on your machine before starting MySQL. You can find TCP/IP on your Windows     |
  2754. |    |CD-ROM.                                                                               |
  2755. |    |Note that if you are using an old Win95 release (for example OSR2), it's likely that  |
  2756. |    |you have an old Winsock package! MySQL requires Winsock 2! You can get the newest     |
  2757. |    |Winsock from Microsoft. Win98 has as default the new Winsock 2 library, so the above  |
  2758. |    |doesn't apply for Win98.                                                              |
  2759. |    |There are 2 different MySQL servers you can use:                                      |
  2760. |    |mysqld                                                                                |
  2761. |    |Compiled with full debugging and automatic memory allocation checking                 |
  2762. |    |                                                                                      |
  2763. |    |mysqld-opt                                                                            |
  2764. |    |Optimized for a Pentium processor.                                                    |
  2765. |    |                                                                                      |
  2766. |    |Both of the above should work on any Intel processor >= i386.                         |
  2767. |    |To start the mysqld server, you should start a MS-DOS window and type:                |
  2768. |    |                                                                                      |
  2769. |    |C:\mysql\bin\mysqld                                                                   |
  2770. |    |This will start mysqld in the background without a window.                            |
  2771. |    |You can kill the MySQL server by executing:                                           |
  2772. |    |                                                                                      |
  2773. |    |C:\mysql\bin\mysqladmin -u root shutdown                                              |
  2774. |    |Note that Win95/Win98 don't support creation of named pipes. On Win95/Win98, you can  |
  2775. |    |only use named pipes to connect to a remote MySQL running on an NT server.            |
  2776. |    |4.12.3 D√©marrer MySQL sous NT                                                         |
  2777. |    |The Win95/Win98 section also applies to MySQL on NT, with the following differences:  |
  2778. |    |To get MySQL to work with TCP/IP, you must install service pack 3 (or newer)!         |
  2779. |    |For NT, the server name is mysqld-nt. Normally you should install MySQL as a service  |
  2780. |    |on NT:                                                                                |
  2781. |    |                                                                                      |
  2782. |    |C:\mysql\bin\mysqld-nt --install                                                      |
  2783. |    |(You could use the mysqld or mysqld-opt servers on NT, but those cannot be started as |
  2784. |    |a service or use named pipes.)                                                        |
  2785. |    |You can start and stop the MySQL service with:                                        |
  2786. |    |                                                                                      |
  2787. |    |NET START mysql                                                                       |
  2788. |    |NET STOP mysql                                                                        |
  2789. |    |Note that in this case you can't use any other options for mysqld-nt!                 |
  2790. |    |You can also run mysqld-nt as a standalone program on NT if you need to start         |
  2791. |    |mysqld-nt with any options! If you start mysqld-nt without options on NT, mysqld-nt   |
  2792. |    |tries to starts itself as a service with the default service options. If you have     |
  2793. |    |stopped mysqld-nt, you have to start it with NET START mysql.                         |
  2794. |    |The service is installed with the name MySql. Once installed, it must be started using|
  2795. |    |Services Control Manager (SCM) Utility (found in Control Panel) or by using the NET   |
  2796. |    |START MySQL command. If any options are desired, they must be specified as "Startup   |
  2797. |    |parameters" in the SCM utility before you start the MySQL service. Once running,      |
  2798. |    |mysqld-nt can be stopped using mysqladmin or from the SCM utility or by using the     |
  2799. |    |command NET STOP MySQL. If you use SCM to stop mysqld-nt, there is a strange message  |
  2800. |    |from SCM about mysqld shutdown normally. When run as a service, mysqld-nt has no      |
  2801. |    |access to a console and so no messages can be seen.                                   |
  2802. |    |On NT you can get the following service error messages:                               |
  2803. |    |Permission Denied                                                                     |
  2804. |    |Means that it cannot find mysqld-nt.exe                                               |
  2805. |    |                                                                                      |
  2806. |    |Cannot Register                                                                       |
  2807. |    |Means that the path is incorrect                                                      |
  2808. |    |                                                                                      |
  2809. |    |If you have problems installing mysqld-nt as a service, try starting it with the full |
  2810. |    |path:                                                                                 |
  2811. |    |                                                                                      |
  2812. |    |C:\mysql\bin\mysqld --install                                                         |
  2813. |    |If this doesn't work, you can get mysqld-nt to start properly by fixing the path in   |
  2814. |    |the registry!                                                                         |
  2815. |    |If you don't want to start mysqld-nt as a service, you can start it as follows:       |
  2816. |    |                                                                                      |
  2817. |    |C:\mysql\bin\mysqld-nt --standalone                                                   |
  2818. |    |or                                                                                    |
  2819. |    |                                                                                      |
  2820. |    |C:\mysql\bin\mysqld-nt --standalone --debug                                           |
  2821. |    |The last version gives you a debug trace in `C:\mysqld.trace'.                        |
  2822. |    |4.12.4 Faire tourner MySQL sous Win32                                                 |
  2823. |    |MySQL supports TCP/IP on all Win32 platforms and named pipes on NT. The default is to |
  2824. |    |use named pipes for local connections on NT and TCP/IP for all other cases if the     |
  2825. |    |client has TCP/IP installed. The host name specifies which protocol is used:          |
  2826. |    |Host name                                                                             |
  2827. |    |protocol                                                                              |
  2828. |    |                                                                                      |
  2829. |    |NULL (none)                                                                           |
  2830. |    |On NT, try named pipes first; if that doesn't work, use TCP/IP. On Win95/Win98, TCP/IP|
  2831. |    |is used.                                                                              |
  2832. |    |                                                                                      |
  2833. |    |.                                                                                     |
  2834. |    |Named pipes                                                                           |
  2835. |    |                                                                                      |
  2836. |    |localhost                                                                             |
  2837. |    |TCP/IP to current host                                                                |
  2838. |    |                                                                                      |
  2839. |    |hostname                                                                              |
  2840. |    |TCP/IP                                                                                |
  2841. |    |                                                                                      |
  2842. |    |You can force a MySQL client to use named pipes by specifying the --pipe option. Use  |
  2843. |    |the --socket option to specify the name of the pipe.                                  |
  2844. |    |You can test whether or not MySQL is working by executing the following commands:     |
  2845. |    |                                                                                      |
  2846. |    |C:\mysql\bin\mysqlshow                                                                |
  2847. |    |C:\mysql\bin\mysqlshow -u root mysql                                                  |
  2848. |    |C:\mysql\bin\mysqladmin version status proc                                           |
  2849. |    |C:\mysql\bin\mysql test                                                               |
  2850. |    |By default, MySQL-Win32 is configured to be installed in `C:\mysql'. If you want to   |
  2851. |    |install MySQL elsewhere, install it in `C:\mysql', then move the installation to where|
  2852. |    |you want it. If you do move MySQL, you must tell mysqld where everything is by        |
  2853. |    |supplying options to mysqld. Use C:\mysql\bin\mysqld --help to display all options!   |
  2854. |    |If, for example, you have moved the MySQL distribution to `D:\programs\mysql', you    |
  2855. |    |must start mysqld with: D:\programs\mysql\bin\mysqld --basedir D:\programs\mysql      |
  2856. |    |With the registered version of MySQL, you can also create a `C:\my.cnf' file that     |
  2857. |    |holds any default options for the MySQL server. Copy the file `\mysql\my-example.cnf' |
  2858. |    |to `C:\my.cnf' and edit this to suit your setup. Note that you should specify all     |
  2859. |    |paths with / instead of \. If you use \, you need to specify this twice, as \ is the  |
  2860. |    |escape character in MySQL. 4.15.4 Fichier d'options.                                  |
  2861. |    |If mysqld is slow to answer to connections on Win95/Win98, there is probably a problem|
  2862. |    |with your DNS. In this case, start mysqld with --skip-name-resolve and use only       |
  2863. |    |localhost and IP numbers in the MySQL grant tables. You can also avoid DNS when       |
  2864. |    |connecting to a mysqld-nt MySQL server running on NT by using the --pipe argument to  |
  2865. |    |specify use of named pipes. This works for most MySQL clients.                        |
  2866. |    |There are two versions of the MySQL command line tool:                                |
  2867. |    |mysql                                                                                 |
  2868. |    |Compiled on native Win32, which offers very limited text editing capabilities.        |
  2869. |    |                                                                                      |
  2870. |    |mysqlc                                                                                |
  2871. |    |Compiled with the Cygnus GNU compiler and libraries, which offers readline editing.   |
  2872. |    |                                                                                      |
  2873. |    |If you want to use mysqlc.exe, you must copy `C:\mysql\lib\cygwinb19.dll' to          |
  2874. |    |`\windows\system' (or similar place).                                                 |
  2875. |    |The default privileges on Win32 give all local users full privileges to all databases.|
  2876. |    |To make MySQL more secure, you should set a password for all users and remove the row |
  2877. |    |in the mysql.user table that has Host='localhost' and User=''.                        |
  2878. |    |You should also add a password for the root user:                                     |
  2879. |    |                                                                                      |
  2880. |    |C:\mysql\bin\mysql mysql                                                              |
  2881. |    |mysql> DELETE FROM user WHERE Host='localhost' AND User='';                           |
  2882. |    |mysql> QUIT                                                                           |
  2883. |    |C:\mysql\bin\mysqladmin reload                                                        |
  2884. |    |C:\mysql\bin\mysqladmin -u root password your_password                                |
  2885. |    |After you've set the password, if you want to take down the mysqld server, you can do |
  2886. |    |so using this command:                                                                |
  2887. |    |                                                                                      |
  2888. |    |mysqladmin --user=root --password=your_password shutdown                              |
  2889. |    |4.12.5 Se connecter √† un serveur lointain MySQL avec Win32 et SSH                     |
  2890. |    |Here is a note about how to connect to get a secure connection to remote MySQL server |
  2891. |    |with SSH (by David Carlson).                                                          |
  2892. |    |Install SSH client on your windows machine - I used a free SSH client from            |
  2893. |    |http://www.doc.ic.ac.uk/~ci2/ssh/. Other useful links:                                |
  2894. |    |http://www.npaci.edu/Security/npaci_security_software.html and                        |
  2895. |    |http://www.npaci.edu/Security/samples/ssh32_windows/index.html.                       |
  2896. |    |Start SSH. Set Host Name = yourmysqlserver name or IP address. Set userid=your userid |
  2897. |    |to log in to your server                                                              |
  2898. |    |Click on "local forwards". Set local port: 3306, host: localhost, remote port: 3306   |
  2899. |    |Save everything, otherwise you'll have to redo it the next time.                      |
  2900. |    |Log in to your server with SSH.                                                       |
  2901. |    |Start some ODBC application (for example Access)                                      |
  2902. |    |Create a new file and link to mySQL using the ODBC driver the same way you normally do|
  2903. |    |except for server, user "localhost".                                                  |
  2904. |    |That's it. It works very well with a direct Internet connection. I'm having problems  |
  2905. |    |with SSH conflicting with my Win95 network and Wingate - but that'll be the topic of a|
  2906. |    |posting on another software company's usegroup!                                       |
  2907. |    |4.12.6 MySQL-Win32 compar√© √† Unix MySQL                                               |
  2908. |    |MySQL-Win32 has by now proven itself to be very stable. This version of MySQL has the |
  2909. |    |same features as the corresponding Unix version with the following exceptions:        |
  2910. |    |Win95 and threads                                                                     |
  2911. |    |Win95 leaks about 200 bytes of main memory for each thread creation. Because of this, |
  2912. |    |you shouldn't run mysqld for an extended time on Win95 if you do many connections,    |
  2913. |    |since each connection in MySQL creates a new thread! WinNT and Win98 don't suffer from|
  2914. |    |this bug.                                                                             |
  2915. |    |Blocking read                                                                         |
  2916. |    |MySQL uses a blocking read for each connection. This means that:                      |
  2917. |    |A connection will not be disconnected automatically after 8 hours, as happens with the|
  2918. |    |Unix version of MySQL.                                                                |
  2919. |    |If a connection ``hangs,'' it's impossible to break it without killing MySQL.         |
  2920. |    |mysqladmin kill will not work on a sleeping connection.                               |
  2921. |    |mysqladmin shutdown can't abort as long as there are sleeping connections.            |
  2922. |    |We plan to fix this in the near future.                                               |
  2923. |    |UDF functions                                                                         |
  2924. |    |For the moment, MySQL-Win32 does not support user definable functions.                |
  2925. |    |DROP DATABASE                                                                         |
  2926. |    |You can't drop a database that is in use by some thread.                              |
  2927. |    |Killing MySQL from the task manager                                                   |
  2928. |    |You can't kill MySQL from the task manager or with the shutdown utility in Windows95. |
  2929. |    |You must take it down with mysqladmin shutdown.                                       |
  2930. |    |Case-insensitive names                                                                |
  2931. |    |Filenames are case insensitive on Win32, so database and table names are also case    |
  2932. |    |insensitive in MySQL for Win32. The only restriction is that database and table names |
  2933. |    |must be given in the same case throughout a given statement. The following query would|
  2934. |    |not work because it refers to a table both as my_table and as MY_TABLE:               |
  2935. |    |                                                                                      |
  2936. |    |SELECT * FROM my_table WHERE MY_TABLE.col=1;                                          |
  2937. |    |The `\' directory character                                                           |
  2938. |    |Pathname components in Win95 are separated by `\' characters, which is also the escape|
  2939. |    |character in MySQL. If you are using LOAD DATA INFILE or SELECT ... INTO OUTFILE, you |
  2940. |    |must double the `\' character or use Unix style filenames `/' characters:             |
  2941. |    |                                                                                      |
  2942. |    |LOAD DATA INFILE "C:\\tmp\\skr.txt" INTO TABLE skr;                                   |
  2943. |    |SELECT * FROM skr INTO OUTFILE 'C:/tmp/skr.txt';                                      |
  2944. |    |Can't open named pipe error                                                           |
  2945. |    |If you use the shareware version of MySQL-Win32 on NT with the newest mysql-clients   |
  2946. |    |you will get the following error:                                                     |
  2947. |    |                                                                                      |
  2948. |    |error 2017: can't open named pipe to host: . pipe...                                  |
  2949. |    |This is because the release version of MySQL uses named pipes on NT by default. You   |
  2950. |    |can avoid this error by using the --host=localhost option to the new MySQL clients or |
  2951. |    |create a file `C:\my.cnf' that contains the following information:                    |
  2952. |    |                                                                                      |
  2953. |    |[client]                                                                              |
  2954. |    |host = localhost                                                                      |
  2955. |    |Access denied for user error                                                          |
  2956. |    |If you get the error Access denied for user: 'some-user@unknown' to database 'mysql'  |
  2957. |    |when accessing a MySQL server on the same machine, this means that MySQL can't resolve|
  2958. |    |your host name properly. To fix this, you should create a file `\windows\hosts' with  |
  2959. |    |the following information:                                                            |
  2960. |    |                                                                                      |
  2961. |    |127.0.0.1       localhost                                                             |
  2962. |    |Here are some open issues for anyone who might want to help us with the Win32 release:|
  2963. |    |                                                                                      |
  2964. |    |Make a single user MYSQL.DLL server. This should include everything in a standard     |
  2965. |    |MySQL server, except thread creation. This will make MySQL much easier to use in      |
  2966. |    |applications that don't need a true client/server and don't need to access the server |
  2967. |    |from other hosts.                                                                     |
  2968. |    |Add some nice ``start'' and ``shutdown'' icons to the MySQL installation.             |
  2969. |    |Create a tool to manage registry entries for the MySQL startup options. The registry  |
  2970. |    |entry reading is already coded into mysqld.cc, but it should be recoded to be more    |
  2971. |    |``parameter'' oriented. The tool should also be able to update the `\my.cnf' file if  |
  2972. |    |the user would prefer to use this instead of the registry.                            |
  2973. |    |When registering mysqld as a service with --install (on NT) it would be nice if you   |
  2974. |    |could also add default options on the command line. For the moment, the workaround is |
  2975. |    |to update the `C:\my.cnf' file instead.                                               |
  2976. |    |When you suspend a laptop running Win95, the mysqld daemon doesn't accept new         |
  2977. |    |connections when the laptop is resumed. We don't know if this is a problem with Win95,|
  2978. |    |TCP/IP or MySQL.                                                                      |
  2979. |    |It would be real nice to be able to kill mysqld from the task manager. For the moment,|
  2980. |    |you must use mysqladmin shutdown.                                                     |
  2981. |    |Port readline to Win32 for use in the mysql command line tool.                        |
  2982. |    |GUI versions of the standard MySQL clients (mysql, mysqlshow, mysqladmin, and         |
  2983. |    |mysqldump) would be nice.                                                             |
  2984. |    |It would be nice if the socket ``read'' and ``write'' functions in `net.c' were       |
  2985. |    |interruptible. This would make it possible to kill open threads with mysqladmin kill  |
  2986. |    |on Win32.                                                                             |
  2987. |    |Documentation of which Windows programs work with MySQL-Win32/MyODBC and what must be |
  2988. |    |done to get them working.                                                             |
  2989. |    |mysqld always starts in the "C" locale and not in the default locale. We would like to|
  2990. |    |have mysqld use the current locale for the sort order.                                |
  2991. |    |Port sqlclient to Win32 (almost done) and add more features to it!                    |
  2992. |    |Add more options to MysqlManager.                                                     |
  2993. |    |Change the communication protocol between the server and client to use Windows        |
  2994. |    |internal communication instead of sockets and TCP/IP.                                 |
  2995. |    |Implement UDF functions with .DLLs.                                                   |
  2996. |    |Add macros to use the faster thread-safe increment/decrement m√©thodes provided by     |
  2997. |    |Win32.                                                                                |
  2998. |    |Other Win32-specific issues are described in the `README' file that comes with the    |
  2999. |    |MySQL-Win32 distribution.                                                             |
  3000. |    |4.13 Remarques pour OS/2                                                              |
  3001. |    |MySQL uses quite a few open files. Because of this, you should add something like the |
  3002. |    |following to your `CONFIG.SYS' file:                                                  |
  3003. |    |                                                                                      |
  3004. |    |SET EMXOPT=-c -n -h1024                                                               |
  3005. |    |If you don't do this, you will probably run into the following error:                 |
  3006. |    |                                                                                      |
  3007. |    |File 'xxxx' not found (Errcode: 24)                                                   |
  3008. |    |When using MySQL with OS/2 Warp 3, FixPack 29 or above is required. With OS/2 Warp 4, |
  3009. |    |FixPack 4 or above is required. This is a requirement of the Pthreads library. MySQL  |
  3010. |    |must be installed in a partition that supports long file names such as HPFS, FAT32,   |
  3011. |    |etc.                                                                                  |
  3012. |    |The `INSTALL.CMD' script must be run from OS/2's own `CMD.EXE' and may not work with  |
  3013. |    |replacement shells such as `4OS2.EXE'.                                                |
  3014. |    |The `scripts/mysql-install-db' script has been renamed: it is now called `install.cmd'|
  3015. |    |and is a REXX script which will set up the default MySQL security settings and create |
  3016. |    |the WorkPlace Shell icons for MySQL.                                                  |
  3017. |    |Dynamic module support is compiled in but not fully tested. Dynamic modules should be |
  3018. |    |compiled using the Pthreads runtime library.                                          |
  3019. |    |                                                                                      |
  3020. |    |gcc -Zdll -Zmt -Zcrtdll=pthrdrtl -I../include -I../regex -I.. \                       |
  3021. |    |-o example udf_example.cc -L../lib -lmysqlclient udf_example.def                      |
  3022. |    |mv example.dll example.udf                                                            |
  3023. |    |Note: Due to limitations in OS/2, UDF module name stems must not exceed 8 characters. |
  3024. |    |Modules are stored in the `/mysql2/udf' directory; the safe-mysqld.cmd script will put|
  3025. |    |this directory in the BEGINLIBPATH environment variable. When using UDF modules,      |
  3026. |    |specified extensions are ignored -- it is assumed to be `.udf'. For example, in Unix, |
  3027. |    |the shared module might be named `example.so' and you would load a function from it   |
  3028. |    |like this:                                                                            |
  3029. |    |                                                                                      |
  3030. |    |CREATE FUNCTION metaphon RETURNS STRING SONAME "example.so";                          |
  3031. |    |Is OS/2, the module would be named `example.udf', but you would not specify the module|
  3032. |    |extension:                                                                            |
  3033. |    |                                                                                      |
  3034. |    |CREATE FUNCTION metaphon RETURNS STRING SONAME "example";                             |
  3035. |    |4.14 TcX                                                                              |
  3036. |    |As a service, TcX provides a set of binary distributions of MySQL that are compiled at|
  3037. |    |TcX or at sites where customers kindly have given us access to their machines.        |
  3038. |    |These distributions are generated with scripts/make_binary_distribution and are       |
  3039. |    |configured with the following compilers and options:                                  |
  3040. |    |SunOS 4.1.4 2 sun4c with gcc 2.7.2.1                                                  |
  3041. |    |CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --disable-shared    |
  3042. |    |SunOS 5.5.1 sun4u with egcs 1.0.3a                                                    |
  3043. |    |CC=gcc CFLAGS="-O6 -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O6 -fomit-frame-pointer   |
  3044. |    |-felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql |
  3045. |    |--with-low-memory                                                                     |
  3046. |    |SunOS 5.6 sun4u with egcs 2.90.27                                                     |
  3047. |    |CC=gcc CFLAGS="-O6 -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O6 -fomit-frame-pointer   |
  3048. |    |-felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql |
  3049. |    |--with-low-memory                                                                     |
  3050. |    |SunOS 5.6 i86pc with gcc 2.8.1                                                        |
  3051. |    |CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql --with-low-memory   |
  3052. |    |Linux 2.0.33 i386 with pgcc 2.90.29 (egcs 1.0.3a)                                     |
  3053. |    |CFLAGS="-O6 -mpentium -mstack-align-double -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O6|
  3054. |    |-mpentium -mstack-align-double -fomit-frame-pointer -felide-constructors              |
  3055. |    |-fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler   |
  3056. |    |--with-mysqld-ldflags=-all-static                                                     |
  3057. |    |SCO 3.2v5.0.4 i386 with gcc 2.7-95q4                                                  |
  3058. |    |CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql                     |
  3059. |    |AIX 2 4 with gcc 2.7.2.2                                                              |
  3060. |    |CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql                     |
  3061. |    |OSF1 V4.0 564 alpha with gcc 2.8.1                                                    |
  3062. |    |CC=gcc CFLAGS=-O CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql           |
  3063. |    |--with-low-memory                                                                     |
  3064. |    |Irix 6.3 IP32 with gcc 2.8.0                                                          |
  3065. |    |CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql                     |
  3066. |    |BSDI BSD/OS 3.1 i386 with gcc 2.7.2.1                                                 |
  3067. |    |CC=gcc CXX=gcc CXXFLAGS=-O ./configure --prefix=/usr/local/mysql                      |
  3068. |    |BSDI BSD/OS 2.1 i386 with gcc 2.7.2                                                   |
  3069. |    |CC=gcc CXX=gcc CXXFLAGS=-O3 ./configure --prefix=/usr/local/mysql                     |
  3070. |    |Anyone who has more optimal options for any of the configurations listed above can    |
  3071. |    |always mail them to the developer's mailing list at                                   |
  3072. |    |RPM distributions prior to MySQL 3.22 are user-contributed. Beginning with 3.22, some |
  3073. |    |RPMs are TcX-generated.                                                               |
  3074. |    |4.15 Param√®trage post-installation et tests                                           |
  3075. |    |Once you've installed MySQL (from either a binary or source distribution), you need to|
  3076. |    |initialize the grant tables, start the server and make sure that the server works     |
  3077. |    |okay. You may also wish to arrange for the server to be started and stopped           |
  3078. |    |automatically when your system starts up and shuts down.                              |
  3079. |    |Normally you install the grant tables and start the server like this:                 |
  3080. |    |                                                                                      |
  3081. |    |shell> cd mysql_installation_directory                                                |
  3082. |    |shell> ./bin/mysql_install_db                                                         |
  3083. |    |shell> ./bin/safe_mysqld &                                                            |
  3084. |    |Testing is most easily done from the top-level directory of the MySQL distribution.   |
  3085. |    |For a binary distribution, this is your installation directory (typically something   |
  3086. |    |like `/usr/local/mysql'). For a source distribution, this is the main directory of    |
  3087. |    |your MySQL source tree.                                                               |
  3088. |    |In the commands shown below in this section and in the following subsections, BINDIR  |
  3089. |    |is the path to the location in which programs like mysqladmin and safe_mysqld are     |
  3090. |    |installed. For a binary distribution, this is the `bin' directory within the          |
  3091. |    |distribution. For a source distribution, BINDIR is probably `/usr/local/bin', unless  |
  3092. |    |you specified an installation directory other than `/usr/local' when you ran          |
  3093. |    |configure. EXECDIR is the location in which the mysqld server is installed. For a     |
  3094. |    |binary distribution, this is the same as BINDIR. For a source distribution, EXECDIR is|
  3095. |    |probably `/usr/local/libexec'.                                                        |
  3096. |    |Testing is described in detail below:                                                 |
  3097. |    |If necessary, start the mysqld server and set up the initial MySQL grant tables       |
  3098. |    |containing the privileges that determine how users are allowed to connect to the      |
  3099. |    |server. This is normally done with the mysql_install_db script:                       |
  3100. |    |                                                                                      |
  3101. |    |shell> scripts/mysql_install_db                                                       |
  3102. |    |Typically, mysql_install_db needs to be run only the first time you install MySQL.    |
  3103. |    |Therefore, if you are upgrading an existing installation, you can skip this step.     |
  3104. |    |(However, mysql_install_db is quite safe to use and will not update any tables that   |
  3105. |    |already exist, so if you are unsure what to do, you can always run mysql_install_db.) |
  3106. |    |mysql_install_db creates six tables (user, db, host, tables_priv, columns_priv and    |
  3107. |    |func) in the mysql database. A description of the initial privileges is given in 6.10 |
  3108. |    |Droits initiaux. Briefly, these privileges allow the MySQL root user to do anything,  |
  3109. |    |and allow anybody to create or use databases with a name of 'test' or starting with   |
  3110. |    |'test_'. If you don't set up the grant tables, the following error will appear in the |
  3111. |    |log file when you start the server:                                                   |
  3112. |    |                                                                                      |
  3113. |    |mysqld: Can't find file: 'host.frm'                                                   |
  3114. |    |The above may also happens with a binary MySQL distribution if you don't start MySQL  |
  3115. |    |by executing exactly ./bin/safe_mysqld! You might need to run mysql_install_db as     |
  3116. |    |root. However, if you prefer, you can run the MySQL server as an unprivileged         |
  3117. |    |(non-root) user, provided that user can read and write files in the database          |
  3118. |    |directory. Instructions for running MySQL as an unprivileged user are given in        |
  3119. |    |Changing MySQL user. If you have problems with mysql_install_db, see mysql_install_db.|
  3120. |    |There are some alternatives to running the mysql_install_db script as it is provided  |
  3121. |    |in the MySQL distribution:                                                            |
  3122. |    |You may want to edit mysql_install_db before running it, to change the initial        |
  3123. |    |privileges that are installed into the grant tables. This is useful if you want to    |
  3124. |    |install MySQL on a lot of machines with the same privileges. In this case you probably|
  3125. |    |should need only to add a few extra INSERT statements to the mysql.user and mysql.db  |
  3126. |    |tables!                                                                               |
  3127. |    |If you want to change things in the grant tables after installing them, you can run   |
  3128. |    |mysql_install_db, then use mysql -u root mysql to connect to the grant tables as the  |
  3129. |    |MySQL root user and issue SQL statements to modify the grant tables directly.         |
  3130. |    |It is possible to recreate the grant tables completely after they have already been   |
  3131. |    |created. You might want to do this if you've already installed the tables but then    |
  3132. |    |want to recreate them after editing mysql_install_db.                                 |
  3133. |    |For more information about these alternatives, see 6.10 Droits initiaux.              |
  3134. |    |Start the MySQL server like this:                                                     |
  3135. |    |                                                                                      |
  3136. |    |shell> cd mysql_installation_directory                                                |
  3137. |    |shell> bin/safe_mysqld &                                                              |
  3138. |    |If you have problems starting the server, see 4.15.2 Probl√®mes avec le serveur MySQL. |
  3139. |    |Use mysqladmin to verify that the server is running. The following commands provide a |
  3140. |    |simple test to check that the server is up and responding to connections:             |
  3141. |    |                                                                                      |
  3142. |    |shell> BINDIR/mysqladmin version                                                      |
  3143. |    |shell> BINDIR/mysqladmin variables                                                    |
  3144. |    |The output from mysqladmin version varies slightly depending on your platform and     |
  3145. |    |version of MySQL, but should be similar to that shown below:                          |
  3146. |    |                                                                                      |
  3147. |    |shell> BINDIR/mysqladmin version                                                      |
  3148. |    |mysqladmin  Ver 6.3 Distrib 3.22.9-beta, for pc-linux-gnu on i686                     |
  3149. |    |TCX Datakonsult AB, by Monty                                                          |
  3150. |    |                                                                                      |
  3151. |    |Server version          3.22.9-beta                                                   |
  3152. |    |Protocol version        10                                                            |
  3153. |    |Connection              Localhost via UNIX socket                                     |
  3154. |    |TCP port                3306                                                          |
  3155. |    |UNIX socket             /tmp/mysql.sock                                               |
  3156. |    |Uptime:                 16 sec                                                        |
  3157. |    |                                                                                      |
  3158. |    |Running threads: 1  Questions: 20  Reloads: 2  Open tables: 3                         |
  3159. |    |To get a feeling for what else you can do with BINDIR/mysqladmin, invoke it with the  |
  3160. |    |--help option.                                                                        |
  3161. |    |Verify that you can shut down the server:                                             |
  3162. |    |                                                                                      |
  3163. |    |shell> BINDIR/mysqladmin -u root shutdown                                             |
  3164. |    |Verify that you can restart the server. Do this using safe_mysqld or by invoking      |
  3165. |    |mysqld directly. For example:                                                         |
  3166. |    |                                                                                      |
  3167. |    |shell> BINDIR/safe_mysqld --log &                                                     |
  3168. |    |If safe_mysqld fails, try running it from the MySQL installation directory (if you are|
  3169. |    |not already there). If that doesn't work, see 4.15.2 Probl√®mes avec le serveur MySQL. |
  3170. |    |Run some simple tests to verify that the server is working. The output should be      |
  3171. |    |similar to what is shown below:                                                       |
  3172. |    |                                                                                      |
  3173. |    |shell> BINDIR/mysqlshow                                                               |
  3174. |    |+-----------+                                                                         |
  3175. |    || Databases |                                                                         |
  3176. |    |+-----------+                                                                         |
  3177. |    || mysql     |                                                                         |
  3178. |    |+-----------+                                                                         |
  3179. |    |                                                                                      |
  3180. |    |shell> BINDIR/mysqlshow mysql                                                         |
  3181. |    |Database: mysql                                                                       |
  3182. |    |+--------------+                                                                      |
  3183. |    ||    Tables    |                                                                      |
  3184. |    |+--------------+                                                                      |
  3185. |    || columns_priv |                                                                      |
  3186. |    || db           |                                                                      |
  3187. |    || func         |                                                                      |
  3188. |    || host         |                                                                      |
  3189. |    || tables_priv  |                                                                      |
  3190. |    || user         |                                                                      |
  3191. |    |+--------------+                                                                      |
  3192. |    |                                                                                      |
  3193. |    |shell> BINDIR/mysql -e "select host,db,user from db" mysql                            |
  3194. |    |+------+--------+------+                                                              |
  3195. |    || host | db     | user |                                                              |
  3196. |    |+------+--------+------+                                                              |
  3197. |    || %    | test   |      |                                                              |
  3198. |    || %    | test_% |      |                                                              |
  3199. |    |+------+--------+------+                                                              |
  3200. |    |There is also a benchmark suite in the `sql-bench' directory (under the MySQL         |
  3201. |    |installation directory) that you can use to compare how MySQL performs on different   |
  3202. |    |platforms. The `sql-bench/Results' directory contains the results from many runs      |
  3203. |    |against different databases and platforms. To run all tests, execute these commands:  |
  3204. |    |                                                                                      |
  3205. |    |shell> cd sql-bench                                                                   |
  3206. |    |shell> run-all-tests                                                                  |
  3207. |    |If you don't have the `sql-bench' directory, you are probably using an RPM for a      |
  3208. |    |binary distribution. (Source distribution RPMs include the benchmark directory.) In   |
  3209. |    |this case, you must first install the benchmark suite before you can use it. Beginning|
  3210. |    |with MySQL 3.22, there are benchmark RPM files named `mysql-bench-VERSION-i386.rpm'   |
  3211. |    |that contain benchmark code and data. If you have a source distribution, you can also |
  3212. |    |run the tests in the `tests' subdirectory. For example, to run `auto_increment.tst',  |
  3213. |    |do this:                                                                              |
  3214. |    |                                                                                      |
  3215. |    |shell> BINDIR/mysql -vvf test < ./tests/auto_increment.tst                            |
  3216. |    |The expected results are shown in the `./tests/auto_increment.res' file.              |
  3217. |    |4.15.1 Probl√®mes avec mysql_install_db                                                |
  3218. |    |This section lists problems you might encounter when you run mysql_install_db:        |
  3219. |    |mysql_install_db doesn't install the grant tables                                     |
  3220. |    |You may find that mysql_install_db fails to install the grant tables and terminates   |
  3221. |    |after displaying the following messages:                                              |
  3222. |    |                                                                                      |
  3223. |    |starting mysqld daemon with databases from XXXXXX                                     |
  3224. |    |mysql daemon ended                                                                    |
  3225. |    |In this case, you should examine the log file very carefully! The log should be       |
  3226. |    |located in the directory `XXXXXX' named by the error message, and should indicate why |
  3227. |    |mysqld didn't start. If you don't understand what happened, include the log when you  |
  3228. |    |post a bug report using mysqlbug! 2.3 Comment rapporter des bugs et des probl√®mes.    |
  3229. |    |There is already a mysqld daemon running                                              |
  3230. |    |In this case, you have probably don't have to run mysql_install_db at all. You have to|
  3231. |    |run mysql_install_db only once, when you install MySQL the first time.                |
  3232. |    |Installing a second mysqld daemon doesn't work when one daemon is running             |
  3233. |    |This can happen when you already have an existing MySQL installation, but want to put |
  3234. |    |a new installation in a different place (e.g., for testing, or perhaps you simply want|
  3235. |    |to run two installations at the same time). Generally the problem that occurs when you|
  3236. |    |try to run the second server is that it tries to use the same socket and port as the  |
  3237. |    |old one. In this case you will get the error message: Can't start server: Bind on     |
  3238. |    |TCP/IP port: Address already in use or Can't start server : Bind on unix socket... You|
  3239. |    |can start the new server with a different socket and port as follows:                 |
  3240. |    |                                                                                      |
  3241. |    |shell> MYSQL_UNIX_PORT=/tmp/mysqld-new.sock                                           |
  3242. |    |shell> MYSQL_TCP_PORT=3307                                                            |
  3243. |    |shell> export MYSQL_UNIX_PORT MYSQL_TCP_PORT                                          |
  3244. |    |shell> scripts/mysql_install_db                                                       |
  3245. |    |shell> bin/safe_mysqld &                                                              |
  3246. |    |After this, you should edit your server boot script to start both daemons with        |
  3247. |    |different sockets and ports. For example, it could invoke safe_mysqld twice, but with |
  3248. |    |different --socket, --port and --basedir options for each invocation.                 |
  3249. |    |You don't have write access to `/tmp'                                                 |
  3250. |    |If you don't have write access to create a socket file at the default place (in       |
  3251. |    |`/tmp') or permission to create temporary files in `/tmp,' you will get an error when |
  3252. |    |running mysql_install_db or when starting or using mysqld. You can specify a different|
  3253. |    |socket and temporary directory as follows:                                            |
  3254. |    |                                                                                      |
  3255. |    |shell> TMPDIR=/some_tmp_dir/                                                          |
  3256. |    |shell> MYSQL_UNIX_PORT=/some_tmp_dir/mysqld.sock                                      |
  3257. |    |shell> export TMPDIR MYSQL_UNIX_PORT                                                  |
  3258. |    |`some_tmp_dir' should be the path to some directory for which you have write          |
  3259. |    |permission. After this you should be able to run mysql_install_db and start the server|
  3260. |    |with these commands:                                                                  |
  3261. |    |                                                                                      |
  3262. |    |shell> scripts/mysql_install_db                                                       |
  3263. |    |shell> BINDIR/safe_mysqld &                                                           |
  3264. |    |mysqld crashes immediately                                                            |
  3265. |    |If you are running RedHat 5.0 with a version of glibc older than 2.0.7-5, you should  |
  3266. |    |make sure you have installed all glibc patches! There is a lot of information about   |
  3267. |    |this in the MySQL mail archives. Links to the mail archives are available at the      |
  3268. |    |online MySQL documentation page. Also, see 4.11.5 Linux (Toutes versions de Linux).   |
  3269. |    |You can also start mysqld manually using the --skip-grant option and add the privilege|
  3270. |    |information yourself using mysql:                                                     |
  3271. |    |                                                                                      |
  3272. |    |shell> BINDIR/safe_mysqld --skip-grant &                                              |
  3273. |    |shell> BINDIR/mysql -u root mysql                                                     |
  3274. |    |From mysql, manually execute the SQL commands in mysql_install_db. Make sure you run  |
  3275. |    |mysqladmin reload afterward to tell the server to reload the grant tables.            |
  3276. |    |4.15.2 Probl√®mes avec le serveur MySQL                                                |
  3277. |    |Generally, you start the mysqld server in one of three ways:                          |
  3278. |    |By invoking mysql.server. This script is used primarily at system startup and         |
  3279. |    |shutdown, and is described more fully in 4.15.3 D√©marrer et arr√™te MySQL              |
  3280. |    |automatiquement.                                                                      |
  3281. |    |By invoking safe_mysqld, which tries to determine the proper options for mysqld and   |
  3282. |    |then runs it with those options.                                                      |
  3283. |    |By invoking mysqld directly.                                                          |
  3284. |    |Whichever m√©thode you use to start the server, if it fails to start up correctly,     |
  3285. |    |check the log file to see if you can find out why. Log files are located in the data  |
  3286. |    |directory (typically `/usr/local/mysql/data' for a binary distribution,               |
  3287. |    |`/usr/local/var' for a source distribution). Look in the data directory for files with|
  3288. |    |names of the form `host_name.err' and `host_name.log' where host_name is the name of  |
  3289. |    |your server host. Then check the last few lines of these files:                       |
  3290. |    |                                                                                      |
  3291. |    |shell> tail host_name.err                                                             |
  3292. |    |shell> tail host_name.log                                                             |
  3293. |    |When the mysqld daemon starts up, it changes directory to the data directory. This is |
  3294. |    |where it expects to write log files and the pid (process ID) file, and where it       |
  3295. |    |expects to find databases.                                                            |
  3296. |    |The data directory location is hardwired in when the distribution is compiled.        |
  3297. |    |However, if mysqld expects to find the data directory somewhere other than where it   |
  3298. |    |really is on your system, it will not work properly. If you have problems with        |
  3299. |    |incorrect paths, you can find out what options mysqld allows and what the default path|
  3300. |    |settings are by invoking mysqld with the --help option. You can override the defaults |
  3301. |    |by specifying the correct pathnames as command-line arguments to mysqld. (These       |
  3302. |    |options can be used with safe_mysqld as well.)                                        |
  3303. |    |Normally you should need to tell mysqld only the base directory under which MySQL is  |
  3304. |    |installed. You can do this with the --basedir option. You can also use --help to check|
  3305. |    |the effect of changing path options (note that --help must be the final option of the |
  3306. |    |mysqld command). For example:                                                         |
  3307. |    |                                                                                      |
  3308. |    |shell> EXECDIR/mysqld --basedir=/usr/local --help                                     |
  3309. |    |Once you determine the path settings you want, start the server without the --help    |
  3310. |    |option.                                                                               |
  3311. |    |If you get the following error, it means that some other program (or another mysqld   |
  3312. |    |server) is already using the TCP/IP port or socket mysqld is trying to use:           |
  3313. |    |                                                                                      |
  3314. |    |Can't start server: Bind on TCP/IP port: Address already in use                       |
  3315. |    |or                                                                                    |
  3316. |    |Can't start server : Bind on unix socket...                                           |
  3317. |    |Use ps to make sure that you don't have another mysqld server running. If you can't   |
  3318. |    |find another server running, you can try to execute the command telnet your-host-name |
  3319. |    |tcp-ip-port-number and press RETURN a couple of times. If you don't get a error       |
  3320. |    |message like telnet: Unable to connect to remote host: Connection refused, something  |
  3321. |    |is using the TCP/IP port mysqld is trying to use. mysql_install_db, and 19.3 Faire    |
  3322. |    |tourner plusieurs serveurs MySQL sur la m√™me machine.                                 |
  3323. |    |The safe_mysqld script is written so that it normally is able to start a server that  |
  3324. |    |was installed from either a source or a binary version of MySQL, even if these install|
  3325. |    |the server in slightly different locations. safe_mysqld expects one of these          |
  3326. |    |conditions to be true:                                                                |
  3327. |    |The server and databases can be found relative to the directory from which safe_mysqld|
  3328. |    |is invoked. safe_mysqld looks under its working directory for `bin' and `data'        |
  3329. |    |directories (for binary distributions) or for `libexec' and `var' directories (for    |
  3330. |    |source distributions). This condition should be met if you execute safe_mysqld from   |
  3331. |    |your MySQL installation directory (for example, `/usr/local/mysql' for a binary       |
  3332. |    |distribution).                                                                        |
  3333. |    |If the server and databases cannot be found relative to its working directory,        |
  3334. |    |safe_mysqld attempts to locate them by absolute pathnames. Typical locations are      |
  3335. |    |`/usr/local/libexec' and `/usr/local/var'. The actual locations are determined when   |
  3336. |    |the distribution was built from which safe_mysqld comes. They should be correct if    |
  3337. |    |MySQL was installed in a standard location.                                           |
  3338. |    |Since safe_mysqld will try to find the server and databases relative to its own       |
  3339. |    |working directory, you can install a binary distribution of MySQL anywhere, as long as|
  3340. |    |you start safe_mysqld from the MySQL installation directory:                          |
  3341. |    |                                                                                      |
  3342. |    |shell> cd mysql_installation_directory                                                |
  3343. |    |shell> bin/safe_mysqld &                                                              |
  3344. |    |If safe_mysqld fails, even when invoked from the MySQL installation directory, you can|
  3345. |    |modify it to use the path to mysqld and the pathname options that are correct for your|
  3346. |    |system. Note that if you upgrade MySQL in the future, your modified version of        |
  3347. |    |safe_mysqld will be overwritten, so you should make a copy of your edited version that|
  3348. |    |you can reinstall.                                                                    |
  3349. |    |If mysqld is currently running, you can find out what path settings it is using by    |
  3350. |    |executing this command:                                                               |
  3351. |    |                                                                                      |
  3352. |    |shell> mysqladmin variables                                                           |
  3353. |    |                                                                                      |
  3354. |    |or                                                                                    |
  3355. |    |                                                                                      |
  3356. |    |shell> mysqladmin -h 'your-host-name' variables                                       |
  3357. |    |If safe_mysqld starts the server but you can't connect to it, you should make sure you|
  3358. |    |have an entry in `/etc/hosts' that looks like this:                                   |
  3359. |    |                                                                                      |
  3360. |    |127.0.0.1       localhost                                                             |
  3361. |    |This problem occurs only on systems that don't have a working thread library and for  |
  3362. |    |which MySQL must be configured to use MIT-pthreads.                                   |
  3363. |    |4.15.3 D√©marrer et arr√™te MySQL automatiquement                                       |
  3364. |    |The mysql.server script can be used to start or stop the server, by invoking it with  |
  3365. |    |start or stop arguments:                                                              |
  3366. |    |                                                                                      |
  3367. |    |shell> mysql.server start                                                             |
  3368. |    |shell> mysql.server stop                                                              |
  3369. |    |mysql.server can be found in the `share/mysql' directory under the MySQL installation |
  3370. |    |directory, or in the `support-files' directory of the MySQL source tree.              |
  3371. |    |Before mysql.server starts the server, it changes directory to the MySQL installation |
  3372. |    |directory, then invokes safe_mysqld. You might need to edit mysql.server if you have a|
  3373. |    |binary distribution that you've installed in a non-standard location. Modify it to cd |
  3374. |    |into the proper directory before it runs safe_mysqld. If you want the server to run as|
  3375. |    |some specific user, you can change the mysql_daemon_user=root line to use another     |
  3376. |    |user. You can also modify mysql.server to pass other options to safe_mysqld.          |
  3377. |    |mysql.server stop brings down server by sending a signal to it. You can take down the |
  3378. |    |server manually by executing mysqladmin shutdown.                                     |
  3379. |    |You might want to add these start and stop commands to the appropriate places in your |
  3380. |    |`/etc/rc*' files when you start using MySQL for production applications. Note that if |
  3381. |    |you modify mysql.server, then if you upgrade MySQL sometime, your modified version    |
  3382. |    |will be overwritten, so you should make a copy of your edited version that you can    |
  3383. |    |reinstall.                                                                            |
  3384. |    |If your system uses `/etc/rc.local' to start external scripts, you should append the  |
  3385. |    |following to it:                                                                      |
  3386. |    |                                                                                      |
  3387. |    |/bin/sh -c 'cd /usr/local/mysql ; ./bin/safe_mysqld &'                                |
  3388. |    |You can also add options or mysql.server in a global `/etc/my.cnf' file. A typical    |
  3389. |    |`/etc/my.cnf' file might look like this:                                              |
  3390. |    |                                                                                      |
  3391. |    |[mysqld]                                                                              |
  3392. |    |datadir=/usr/local/mysql/var                                                          |
  3393. |    |socket=/tmp/mysqld.sock                                                               |
  3394. |    |port=3306                                                                             |
  3395. |    |                                                                                      |
  3396. |    |[mysql.server]                                                                        |
  3397. |    |user=mysql                                                                            |
  3398. |    |basedir=/usr/local/mysql                                                              |
  3399. |    |The mysql.server script uses the following variables: user, datadir, basedir, bindir  |
  3400. |    |and pid-file.                                                                         |
  3401. |    |4.15.4 Fichier d'options.                                                             |
  3402. |    |4.15.4 Fichier d'options                                                              |
  3403. |    |MySQL 3.22 can read default startup options for the server and for clients from option|
  3404. |    |files.                                                                                |
  3405. |    |MySQL reads default options from the following files on Unix:                         |
  3406. |    |Filename                                                                              |
  3407. |    |Purpose                                                                               |
  3408. |    |                                                                                      |
  3409. |    |/etc/my.cnf                                                                           |
  3410. |    |Global options                                                                        |
  3411. |    |                                                                                      |
  3412. |    |DATADIR/my.cnf                                                                        |
  3413. |    |Server-specific options                                                               |
  3414. |    |                                                                                      |
  3415. |    |~/.my.cnf                                                                             |
  3416. |    |User-specific options                                                                 |
  3417. |    |                                                                                      |
  3418. |    |DATADIR is the MySQL data directory (typically `/usr/local/mysql/data' for a binary   |
  3419. |    |installation, or `/usr/local/var' for a source installation). Note that this is the   |
  3420. |    |directory that was specified at configuration time, not the one specified with        |
  3421. |    |--datadir when mysqld starts up! (--datadir has no effect on where the server looks   |
  3422. |    |for option files, because it looks for them before it processes any command-line      |
  3423. |    |arguments.)                                                                           |
  3424. |    |MySQL reads default options from the following files on Win32:                        |
  3425. |    |Filename                                                                              |
  3426. |    |Purpose                                                                               |
  3427. |    |                                                                                      |
  3428. |    |windows-system-directory\my.ini                                                       |
  3429. |    |                                                                                      |
  3430. |    |                                                                                      |
  3431. |    |C:\my.cnf                                                                             |
  3432. |    |Global options                                                                        |
  3433. |    |                                                                                      |
  3434. |    |C:\mysql\data\my.cnf                                                                  |
  3435. |    |Server-specific options                                                               |
  3436. |    |                                                                                      |
  3437. |    |Note that you on Win32 should specify all paths with / instead of \. If you use \, you|
  3438. |    |need to specify this twice, as \ is the escape character in MySQL.                    |
  3439. |    |MySQL tries to read option files in the order listed above. If multiple option files  |
  3440. |    |exist, an option specified in a file read later takes precedence over the same option |
  3441. |    |specified in a file read earlier. Options specified on the command line take          |
  3442. |    |precedence over options specified in any option file. Some options can be specified   |
  3443. |    |using environment variables. Options specified on the command line or in option files |
  3444. |    |take precedence over environment variable values.                                     |
  3445. |    |The following programs support option files: mysql, mysqladmin, mysqld, mysqldump,    |
  3446. |    |mysqlimport, mysql.server, isamchk and pack_isam.                                     |
  3447. |    |You can use option files to specify any long option that a program supports! Run the  |
  3448. |    |program with --help to get a list of available options.                               |
  3449. |    |An option file can contain lines of the following forms:                              |
  3450. |    |#comment                                                                              |
  3451. |    |Comment lines starts with `#' or `;'. Empty lines are ignored.                        |
  3452. |    |[group]                                                                               |
  3453. |    |group is the name of the program or group for which you want to set options. After a  |
  3454. |    |group line, any option or set-variable lines apply to the named group until the end of|
  3455. |    |the option file or another group line is given.                                       |
  3456. |    |option                                                                                |
  3457. |    |This is equivalent to --option on the command line.                                   |
  3458. |    |option=value                                                                          |
  3459. |    |This is equivalent to --option=value on the command line.                             |
  3460. |    |set-variable = variable=value                                                         |
  3461. |    |This is equivalent to --set-variable variable=value on the command line. This syntax  |
  3462. |    |must be used to set a mysqld variable.                                                |
  3463. |    |The client group allows you to specify options that apply to all MySQL clients (not   |
  3464. |    |mysqld). This is the perfect group to use to specify the password you use to connect  |
  3465. |    |to the server. (But make sure the option file is readable and writable only to        |
  3466. |    |yourself.)                                                                            |
  3467. |    |Note that for options and values, all leading and trailing blanks are automatically   |
  3468. |    |deleted. You may use the escape sequences `\b', `\t', `\n', `\r', `\\' and `\s' in    |
  3469. |    |your value string (`\s' == blank).                                                    |
  3470. |    |Here is a typical global option file:                                                 |
  3471. |    |                                                                                      |
  3472. |    |[client]                                                                              |
  3473. |    |port=3306                                                                             |
  3474. |    |socket=/tmp/mysql.sock                                                                |
  3475. |    |                                                                                      |
  3476. |    |[mysqld]                                                                              |
  3477. |    |port=3306                                                                             |
  3478. |    |socket=/tmp/mysql.sock                                                                |
  3479. |    |set-variable = key_buffer=16M                                                         |
  3480. |    |set-variable = max_allowed_packet=1M                                                  |
  3481. |    |                                                                                      |
  3482. |    |[mysqldump]                                                                           |
  3483. |    |quick                                                                                 |
  3484. |    |Here is typical user option file:                                                     |
  3485. |    |                                                                                      |
  3486. |    |[client]                                                                              |
  3487. |    |# The following password will be sent to all standard MySQL clients                   |
  3488. |    |password=my_password                                                                  |
  3489. |    |                                                                                      |
  3490. |    |[mysql]                                                                               |
  3491. |    |no-auto-rehash                                                                        |
  3492. |    |If you have a source distribution, you will find a sample configuration file named    |
  3493. |    |`my-example.cnf' in the `support-files' directory. If you have a binary distribution, |
  3494. |    |look in the `DIR/share/mysql' directory, where DIR is the pathname to the MySQL       |
  3495. |    |installation directory (typically `/usr/local/mysql'). You can copy `my-example.cnf'  |
  3496. |    |to your home directory (rename the copy to `.my.cnf') to experiment with.             |
  3497. |    |To tell a MySQL program not to read any option files, specify --no-defaults as the    |
  3498. |    |first option on the command line. This MUST be the first option or it will have no    |
  3499. |    |effect! If you want to check which options are used, you can give the option          |
  3500. |    |--print-defaults as the first option.                                                 |
  3501. |    |If you want to force the use of a specific config file, you can use the option        |
  3502. |    |--defaults-file=full-path-to-default-file. If you do this, only the specified file    |
  3503. |    |will be read.                                                                         |
  3504. |    |Note for developers: Option file handling is implemented simply by processing all     |
  3505. |    |matching options (i.e., options in the appropriate group) before any command line     |
  3506. |    |arguments. This works nicely for programs that use the last instance of an option that|
  3507. |    |is specified multiple times. If you have an old program that handles                  |
  3508. |    |multiply-specified options this way but doesn't read option files, you need add only  |
  3509. |    |two lines to give it that capability. Check the source code of any of the standard    |
  3510. |    |MySQL clients to see how to do this.                                                  |
  3511. |    |4.16 Y a t il des manipulations particuli√®res lors de la mise √† jour?                 |
  3512. |    |You can always move the MySQL form and data files between different versions on the   |
  3513. |    |same architecture as long as you have the same base version of MySQL. The current base|
  3514. |    |version is 3. If you change the character set by recompiling MySQL (which may also    |
  3515. |    |change the sort order), you must run isamchk -r -q on all tables. Otherwise your      |
  3516. |    |indexes may not be ordered correctly.                                                 |
  3517. |    |If you are paranoid and/or afraid of new versions, you can always rename your old     |
  3518. |    |mysqld to something like mysqld-'old-version-number'. If your new mysqld then does    |
  3519. |    |something unexpected, you can simply shut it down and restart with your old mysqld!   |
  3520. |    |When you do an upgrade you should also backup your old databases, of course. Sometimes|
  3521. |    |it's good to be a little paranoid!                                                    |
  3522. |    |After an upgrade, if you experience problems with recompiled client programs, like    |
  3523. |    |Commands out of sync or unexpected core dumps, you probably have used an old header or|
  3524. |    |library file when compiling your programs. In this case you should check the date for |
  3525. |    |your `mysql.h' file and `libmysqlclient.a' library to verify that they are from the   |
  3526. |    |new MySQL distribution. If not, please recompile your programs!                       |
  3527. |    |If you get some problems that the new mysqld server doesn't want to start or that you |
  3528. |    |can't connect without a password, check that you don't have some old `my.cnf' file    |
  3529. |    |from your old installation! You can check this with: program-name --print-defaults. If|
  3530. |    |this outputs anything other than the program name, you have a active my.cnf file that |
  3531. |    |will may affect things!                                                               |
  3532. |    |It is a good idea to rebuild and reinstall the Msql-Mysql-modules distribution        |
  3533. |    |whenever you install a new release of MySQL, particularly if you notice symptoms such |
  3534. |    |as all your DBI scripts dumping core after you upgrade MySQL.                         |
  3535. |    |4.16.1 Mise √† jour de a 3.22 vers 3.23                                                |
  3536. |    |MySQL 3.23 supports tables of the new MyISAM type and the old NISAM type. You don't   |
  3537. |    |have to convert your old tables to use these with 3.23. By default, all new tables    |
  3538. |    |will be created with type MyISAM (unless you start mysqld with the                    |
  3539. |    |--default-table-type=isam option. You can change an ISAM table to a MyISAM table with |
  3540. |    |ALTER TABLE or the Perl script mysql_convert_table_format.                            |
  3541. |    |3.22 and 3.21 clients will work without any problems with a 3.23 server.              |
  3542. |    |The following lists what you have to watch out for when upgrading to 3.23:            |
  3543. |    |INNER and DELAYED are now reserved words.                                             |
  3544. |    |FLOAT(4) and FLOAT(8) are now true floating point types.                              |
  3545. |    |When declaring DECIMAL(length,dec) the length argument no longer includes a place for |
  3546. |    |the sign or the decimal point.                                                        |
  3547. |    |A TIME string must now be of one of the following formats: [[[DAYS]                   |
  3548. |    |[H]H:]MM:]SS[.fraction] or [[[[[H]H]H]H]MM]SS[.fraction]                              |
  3549. |    |LIKE now compares strings using the same character comparison rules as '='. If you    |
  3550. |    |require the old behavior, you can compile MySQL with the CXXFLAGS=-DLIKE_CMP_TOUPPER  |
  3551. |    |flag.                                                                                 |
  3552. |    |When you check/repair tables you should use myisamchk for MyISAM tables (.MYI) and    |
  3553. |    |isamchk for ISAM (.ISM) tables.                                                       |
  3554. |    |If you want your mysqldumps to be compatible between MySQL 3.22 and 3.23, you should  |
  3555. |    |not use the --opt or --full option to mysqldump.                                      |
  3556. |    |Check all your calls to DATE_FORMAT() to make sure there is a `%' before each format  |
  3557. |    |character.                                                                            |
  3558. |    |mysql_fetch_fields_direct is now a function (it was a macro) and it returns a pointer |
  3559. |    |to a MYSQL_FIELD instead of a MYSQL_FIELD.                                            |
  3560. |    |mysql_num_fields() can no longer be used on a MYSQL* object (it's now a function that |
  3561. |    |takes MYSQL_RES* as an argument. You should now use mysql_field_count() instead.      |
  3562. |    |In MySQL 3.22, the output of SELECT DISTINCT ... was almost always sorted. In 3.23,   |
  3563. |    |you must use GROUP BY or ORDER BY to obtain sorted output.                            |
  3564. |    |SUM() now returns NULL, instead of 0, if there is no matching rows. This is according |
  3565. |    |to ANSI SQL.                                                                          |
  3566. |    |New restricted words: CASE, THEN, WHEN, ELSE and END                                  |
  3567. |    |4.16.2 Mise √† jour de a 3.21 vers 3.22                                                |
  3568. |    |Nothing that affects compatibility has changed between 3.21 and 3.22. The only pitfall|
  3569. |    |is that new tables that are created with DATE type columns will use the new way to    |
  3570. |    |store the date. You can't access these new fields from an old version of mysqld.      |
  3571. |    |After installing MySQL 3.22, you should start the new server and then run the         |
  3572. |    |mysql_fix_privilege_tables script. This will add the new privileges that you need to  |
  3573. |    |use the GRANT command. If you forget this, you will get Access denied when you try to |
  3574. |    |use ALTER TABLE, CREATE INDEX or DROP INDEX. If your MySQL root user requires a       |
  3575. |    |password, you should give this as an argument to mysql_fix_privilege_tables.          |
  3576. |    |The C API interface to mysql_real_connect() has changed. If you have an old client    |
  3577. |    |program that calls this function, you must place a 0 for the new db argument (or      |
  3578. |    |recode the client to send the db element for faster connections). You must also call  |
  3579. |    |mysql_init() before calling mysql_real_connect()! This change was done to allow the   |
  3580. |    |new mysql_options() function to save options in the MYSQL handler structure.          |
  3581. |    |4.16.3 Mise √† jour de a 3.20 vers 3.21                                                |
  3582. |    |If you are running a version older than 3.20.28 and want to switch to 3.21.x, you need|
  3583. |    |to do the following:                                                                  |
  3584. |    |You can start the mysqld 3.21 server with safe_mysqld --old-protocol to use it with   |
  3585. |    |clients from the 3.20 distribution. In this case, the new client function             |
  3586. |    |mysql_errno() will not return any server error, only CR_UNKNOWN_ERROR, (but it works  |
  3587. |    |for client errors) and the server uses the old password() checking rather than the new|
  3588. |    |one.                                                                                  |
  3589. |    |If you are NOT using the --old-protocol option to mysqld, you will need to make the   |
  3590. |    |following changes:                                                                    |
  3591. |    |All client code must be recompiled. If you are using ODBC, you must get the new MyODBC|
  3592. |    |2.x driver.                                                                           |
  3593. |    |The script scripts/add_long_password must be run to convert the Password field in the |
  3594. |    |mysql.user table to CHAR(16).                                                         |
  3595. |    |All passwords must be reassigned in the mysql.user table (to get 62-bit rather than   |
  3596. |    |31-bit passwords).                                                                    |
  3597. |    |The table format hasn't changed, so you don't have to convert any tables.             |
  3598. |    |MySQL 3.20.28 and above can handle the new user table format without affecting        |
  3599. |    |clients. If you have a MySQL version earlier than 3.20.28, passwords will no longer   |
  3600. |    |work with it if you convert the user table. So to be safe, you should first upgrade to|
  3601. |    |at least 3.20.28 and then upgrade to 3.21.x.                                          |
  3602. |    |The new client code works with a 3.20.x mysqld server, so if you experience problems  |
  3603. |    |with 3.21.x, you can use the old 3.20.x server without having to recompile the clients|
  3604. |    |again.                                                                                |
  3605. |    |If you are not using the --old-protocol option to mysqld, old clients will issue the  |
  3606. |    |error message:                                                                        |
  3607. |    |                                                                                      |
  3608. |    |ERROR: Protocol mismatch. Server Version = 10 Client Version = 9                      |
  3609. |    |The new Perl DBI/DBD interface also supports the old mysqlperl interface. The only    |
  3610. |    |change you have to make if you use mysqlperl is to change the arguments to the        |
  3611. |    |connect() function. The new arguments are: host, database, user, password (the user   |
  3612. |    |and password arguments have changed places). Perl DBI Class.                          |
  3613. |    |The following changes may affect requ√™tesin old applications:                         |
  3614. |    |HAVING must now be specified before any ORDER BY clause.                              |
  3615. |    |The parameters to LOCATE() have been swapped.                                         |
  3616. |    |There are some new reserved words. The most notable are DATE, TIME and TIMESTAMP.     |
  3617. |    |4.16.4 Mise √† jour vers une autre architecture                                        |
  3618. |    |If you are using MySQL 3.23, you can copy the .frm, the .MYI and the .MYD files       |
  3619. |    |between different architectures that support the same floating point format. (MySQL   |
  3620. |    |takes care of any byte swapping issues).                                              |
  3621. |    |The MySQL data `*.ISD' and the index files `*.ISM' files) are architecture-dependent  |
  3622. |    |and in some case OS-dependent. If you want to move your applications to another       |
  3623. |    |machine that has a different architecture or OS than your current machine, you should |
  3624. |    |not try to move a database by simply copying the files to the other machine. Use      |
  3625. |    |mysqldump instead.                                                                    |
  3626. |    |By default, mysqldump will create a file full of SQL statements. You can then transfer|
  3627. |    |the file to the other machine and feed it as input to the mysql client.               |
  3628. |    |Try mysqldump --help to see what options are available. If you are moving the data to |
  3629. |    |a newer version of MySQL, you should use mysqldump --opt with the newer version to get|
  3630. |    |a fast, compact dump.                                                                 |
  3631. |    |The easiest (although not the fastest) way to move a database between two machines is |
  3632. |    |to run the following commands on the machine on which the database is located:        |
  3633. |    |                                                                                      |
  3634. |    |shell> mysqladmin -h 'other hostname' create nom_base_de_donnees                      |
  3635. |    |shell> mysqldump --opt nom_base_de_donnees \                                          |
  3636. |    || mysql -h 'other hostname' nom_base_de_donnees                                       |
  3637. |    |If you want to copy a database from a remote machine over a slow network, you can use:|
  3638. |    |                                                                                      |
  3639. |    |                                                                                      |
  3640. |    |shell> mysqladmin create nom_base_de_donnees                                          |
  3641. |    |shell> mysqldump -h 'other hostname' --opt --compress nom_base_de_donnees \           |
  3642. |    || mysql nom_base_de_donnees                                                           |
  3643. |    |You can also store the result in a file, then transfer the file to the target machine |
  3644. |    |and load the file into the database there. For example, you can dump a database to a  |
  3645. |    |file on the source machine like this:                                                 |
  3646. |    |                                                                                      |
  3647. |    |shell> mysqldump --quick nom_base_de_donnees | gzip > nom_base_de_donnees.contents.gz |
  3648. |    |(The file created in this example is compressed.) Transfer the file containing the    |
  3649. |    |database contents to the target machine and run these commands there:                 |
  3650. |    |                                                                                      |
  3651. |    |shell> mysqladmin create nom_base_de_donnees                                          |
  3652. |    |shell> gunzip < nom_base_de_donnees.contents.gz | mysql nom_base_de_donnees           |
  3653. |    |You can also use mysqldump and mysqlimport to accomplish the database transfer. For   |
  3654. |    |big tables, this is much faster than simply using mysqldump. In the commands shown    |
  3655. |    |below, DUMPDIR represents the full pathname of the directory you use to store the     |
  3656. |    |output from mysqldump.                                                                |
  3657. |    |First, create the directory for the output files and dump the database:               |
  3658. |    |                                                                                      |
  3659. |    |shell> mkdir DUMPDIR                                                                  |
  3660. |    |shell> mysqldump --tab=DUMPDIR nom_base_de_donnees                                    |
  3661. |    |Then transfer the files in the DUMPDIR directory to some corresponding directory on   |
  3662. |    |the target machine and load the files into MySQL there:                               |
  3663. |    |                                                                                      |
  3664. |    |shell> mysqladmin create nom_base_de_donnees           # create database              |
  3665. |    |shell> cat DUMPDIR/*.sql | mysql nom_base_de_donnees   # create tables in database    |
  3666. |    |shell> mysqlimport nom_base_de_donnees DUMPDIR/*.txt   # load data into tables        |
  3667. |    |Also, don't forget to copy the mysql database, since that's where the grant tables    |
  3668. |    |(user, db, host) are stored. You may have to run commands as the MySQL root user on   |
  3669. |    |the new machine until you have the mysql database in place.                           |
  3670. |    |After you import the mysql database on the new machine, execute mysqladmin            |
  3671. |    |flush-privileges so that the server reloads the grant table information.              |
  3672. |    |5 Compatibilit√© avec les standards                                                    |
  3673. |    |5.1 Extensions au langage ANSI SQL92                                                  |
  3674. |    |MySQL apporte quelques extensions √† la norme ANSI SQL 92 que vous ne trouverez        |
  3675. |    |probablement dans aucune autre base de donn√©es. Soyez conscient que si vous utilisez  |
  3676. |    |ces extensions, votre code ne sera pas portable sur une autre base SQL. Dans certains |
  3677. |    |cas, vous pouvez √©crire du code qui utilise ces extensions MySQL, mais qui est        |
  3678. |    |portable, en utilisant les commentaires de la forme /*! ... */. Dans ce cas, MySQL va |
  3679. |    |analyser puis ex√©cuter le code de ce commentaire comme n'importe quelle commande      |
  3680. |    |MySQL, mais les autres serveur SQL les ignoreront. Par exemple :                      |
  3681. |    |                                                                                      |
  3682. |    |SELECT /*! STRAIGHT_JOIN */ nom_colonne FROM table1,table2 WHERE ...                  |
  3683. |    |Voici la liste des extensions MySQL:                                                  |
  3684. |    |Les types de colonnes MEDIUMINT, SET, ENUM et tous les types BLOB et TEXT.            |
  3685. |    |Les attributs de champs AUTO_INCREMENT, BINARY, UNSIGNED et ZEROFILL.                 |
  3686. |    |Toutes les comparaisons de cha√Ænes sont insensibles √† la casse par d√©faut, et le      |
  3687. |    |classement des cha√Ænes est bas√© sur la table de caract√®re courante (par d√©faut,       |
  3688. |    |ISO-8859-1 Latin1). Si vous souhaitez que ces op√©rations soient sensible √† la casse,  |
  3689. |    |ajoutez l'attribut BINARY aux colonnes concern√©s, ou bien utiliser l'op√©rateur de     |
  3690. |    |transptypage BINARY lors des comparaisons pour qu'elles prennent en compte l'ordre    |
  3691. |    |ASCII en cours sur l'h√¥te MySQL.                                                      |
  3692. |    |MySQL fait correspondre √† chaque base de donn√©es un dossier dans le dossier de donn√©es|
  3693. |    |MySQL, et les tables de cette base seront repr√©sent√©es par des fichiers. Cela a deux  |
  3694. |    |cons√©quences :                                                                        |
  3695. |    |Les noms de bases de donn√©s et de tables sont d√©pendants du syst√®me d'exploitation sur|
  3696. |    |lequel MySQL tourne, notamment concertant la casse des noms. Si vous avez des         |
  3697. |    |difficult√©s √† vous souvenir des noms de tables, utilisez une convention coh√©rente,    |
  3698. |    |comme par exemple celle de mettre tous les noms en minuscules.                        |
  3699. |    |Les noms de bases, de table, d'index, de colonne ou d' alias peuvent commencer par un |
  3700. |    |chiffre (mais de doivent pas √™tre consistitu√©s seulement de chiffres).                |
  3701. |    |Vous pouvez utiliser les commandes du syst√®me pour sauvegarder, renommer, d√©placer,   |
  3702. |    |effacer et copier des tables. Par exemple, vous pouvez copier le ``.ISD'', ``.ISM'' et|
  3703. |    |``.frm'' pour cr√©er une nouvelle table.                                               |
  3704. |    |En SQL pur, vous pouvez acc√©der √† une table d'une autre base de donn√©es avec la       |
  3705. |    |syntaxe : nom_base_de_donnees.nom_table. Certains serveurs SQL propose la m√™me        |
  3706. |    |fonctionnalit√©, mais l'appelle User space. MySQL n'accepte pas les espaces de tables  |
  3707. |    |comme dans : create table ralph.my_table...IN my_tablespace.                          |
  3708. |    |LIKE est utilisable avec les colonnes de type num√©rique                               |
  3709. |    |Possibilit√© d'utilisation de INTO OUTFILE et STRAIGHT_JOIN dans les commandes SELECT. |
  3710. |    |SELECT.                                                                               |
  3711. |    |L'option SQL_SMALL_RESULT dans une commande SELECT.                                   |
  3712. |    |EXPLAIN SELECT permet de voir de quelle mani√®re les tables ont √©t√© regroup√©es.        |
  3713. |    |L'utilisation des index de noms, ou des index sur le pr√©fixe d'un champs et           |
  3714. |    |l'utilisation de INDEX ou KEY dans une commande CREATE TABLE. CREATE TABLE            |
  3715. |    |Attribut TEMPORARY et IF NOT EXISTS dans la commande CREATE TABLE.                    |
  3716. |    |Utilisation de COUNT(DISTINCT liste) lorsque 'liste' contient plus d'un √©l√©ment.      |
  3717. |    |Utilisation de CHANGE nom_colonne, DROP nom_colonne ou DROP INDEX dans les commandes  |
  3718. |    |ALTER TABLE. ALTER TABLE.                                                             |
  3719. |    |Utilisation de IGNORE dans les commandes ALTER TABLE.                                 |
  3720. |    |Utilisation de multiples ADD, ALTER, DROP ou CHANGE dans les commandes ALTER TABLE.   |
  3721. |    |Utilisation de DROP TABLE avec les mots cl√©s IF EXISTS.                               |
  3722. |    |Vous pouvez supprimer plusieurs tables avec une seule commande DROP TABLE.            |
  3723. |    |Clause LIMIT dans les commandes DELETE.                                               |
  3724. |    |L'option DELAYED dans les commandes INSERT et REPLACE.                                |
  3725. |    |L'option LOW_PRIORITY dans les commandes INSERT, REPLACE, DELETE et UPDATE.           |
  3726. |    |Utilisation de LOAD DATA INFILE. Dans certains cas, cette syntaxe est compatibles avec|
  3727. |    |la fonction LOAD DATA INFILE d'Oracle. LOAD DATA.                                     |
  3728. |    |La commande OPTIMIZE TABLE. OPTIMIZE TABLE.                                           |
  3729. |    |La commande SHOW. SHOW.                                                               |
  3730. |    |Les cha√Ænes de caract√®res peuvent √™tre d√©finies avec ``"'' ou ``''', et pas seulement |
  3731. |    |avec ``'''.                                                                           |
  3732. |    |Utilisation du caract√®re d'√©chappement ``\''.                                         |
  3733. |    |La commande SET OPTION. SET OPTION.                                                   |
  3734. |    |Vous n'avez pas √† nommer express√©ment toutes les colonnes dans une clause GROUP BY.   |
  3735. |    |Mais cela peut permettre d'acc√©l√©rer quelques requ√™tes tr√®s sp√©cifiques. 7.3.13       |
  3736. |    |Fonctions √† utiliser dans les clauses GROUP BY.                                       |
  3737. |    |Pour aider les utilisateurs d'autres environnements SQL, MySQL dispose d'aliases pour |
  3738. |    |de nombreuses fonctions. Par exemple, toutes les fonctions sur les cha√Ænes de         |
  3739. |    |caract√®re supporte la syntaxe ANSI SQL et ODBC.                                       |
  3740. |    |MySQL accepte les op√©rateurs logiques || et && (OR et AND, comme en langage C). Sous  |
  3741. |    |MySQL, || et OR sont synonymes, tout comme le sont && et AND. A cause de ce double    |
  3742. |    |emploi, MySQL n'accepte pas les opérateurs ANSI SQL || comme additionneur de   |
  3743. |    |cha√Ænes; (utilisez √† la place CONCAT() ).. Etant donn√© que CONCAT() prend un nombre   |
  3744. |    |arbitraire d'arguments, il est facile de remplacer ||.                                |
  3745. |    |CREATE DATABASE ou DROP DATABASE. CREATE DATABASE                                     |
  3746. |    |L'op√©rateur % est synonyme de MOD(). C'est √† dire que, N % M est √©quivalent √†         |
  3747. |    |MOD(N,M). % est h√©rit√© du langage C, et permet la compatibilit√© avec PostgreSQL.      |
  3748. |    |Les op√©rateurs =, <>, <= ,<, >=,>, <<, >>, <=>, AND, OR ou LIKE peuvent √™tre utilis√©s |
  3749. |    |dans les comparaisons de colonnes avec la clause FROM dans les commandes SELECT. Par  |
  3750. |    |exemple :                                                                             |
  3751. |    |                                                                                      |
  3752. |    |mysql> SELECT col1=1 AND col2=2 FROM nom_table;                                       |
  3753. |    |La fonction LAST_INSERT_ID(). mysql_insert_id.                                        |
  3754. |    |Les op√©rateurs d'expressions r√©guli√®res REGEXP et NOT REGEXP.                         |
  3755. |    |CONCAT() ou CHAR() avec plus d'un one argument. (Avec MySQL, ces fonctions peuvent    |
  3756. |    |prendre un nombre arbitraire d'arguments).                                            |
  3757. |    |Les fonctions suppl√©mentaires BIT_COUNT(), ELT(), FROM_DAYS(), FORMAT(), IF(),        |
  3758. |    |PASSWORD(), ENCRYPT(), md5(), ENCODE(), DECODE(), PERIOD_ADD(), PERIOD_DIFF(),        |
  3759. |    |TO_DAYS(), ou WEEKDAY().                                                              |
  3760. |    |Utilisation de TRIM() pour supprimer les espaces de d√©but et fin de cha√Æne. ANSI SQL  |
  3761. |    |ne supporte que la suppression de caract√®res uniques.                                 |
  3762. |    |Les fonctions de GROUP BY : STD(), BIT_OR() et BIT_AND().                             |
  3763. |    |Utilisation de REPLACE √† la place de DELETE + INSERT. REPLACE.                        |
  3764. |    |La commande FLUSH flush_option.                                                       |
  3765. |    |5.2 Diff√©rences entre MySQL et ANSI SQL92                                             |
  3766. |    |Nous t?chons de mettre MySQL aux normes ANSI SQL et ODBC SQL, mais dans certains cas, |
  3767. |    |MySQL g√®re les choses de mani√®re diff√©rente.                                          |
  3768. |    |-- n'est pas un commentaire. 5.3.7 `--' comme d√©but de commentaire.                   |
  3769. |    |Pour les colonnes de type VARCHAR, les espaces de fin de cha√Ænes sont supprim√©s √†     |
  3770. |    |l'enregistrement. Bugs.                                                               |
  3771. |    |Dans certains cas, les colonnes de type CHAR sont spontan√©ment chang√©es en colonne de |
  3772. |    |type VARCHAR. 7.6.1 Modifications automatiques de type de colonne.                    |
  3773. |    |Les droits d'une table ne sont pas supprim√©s lorsque vous supprimez une table. Vous   |
  3774. |    |devez explicitement appeler la commande REVOKE pour supprimer les droits de la table. |
  3775. |    |GRANT.                                                                                |
  3776. |    |5.3 Functionalit√©s manquantes                                                         |
  3777. |    |Les fonctionnalit√©s suivantes manquent dans la version courante de MySQL. La liste des|
  3778. |    |fonctionnalit√©s class√©es par ordre de priorit√© est disponible en ligne √† : F Liste de |
  3779. |    |voeux pour les versions futures de MySQL (la TODO).                                   |
  3780. |    |5.3.1 Sub-select                                                                      |
  3781. |    |La requ√™te suivante ne fonctionne par encore sous MySQL:                              |
  3782. |    |                                                                                      |
  3783. |    |SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);                             |
  3784. |    |SELECT * FROM table1 WHERE id NOT IN (SELECT id FROM table2);                         |
  3785. |    |Cependant, il est souvent possible de se passer d'une sous s√©lection :                |
  3786. |    |                                                                                      |
  3787. |    |SELECT table1.* FROM table1,table2 WHERE table1.id=table2.id;                         |
  3788. |    |SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id where table2.id IS|
  3789. |    |NULL                                                                                  |
  3790. |    |Pour les sous requ√™tes compliqu√©es, vous pouvez toujours cr√©er une table temporaire,  |
  3791. |    |et y appliquer votre requ√™te.                                                         |
  3792. |    |MySQL ne supporte que INSERT ... SELECT ... et REPLACE ... SELECT ... Les sous        |
  3793. |    |s√©lections ind√©pendantes ne seront disponibles qu'√† partir de la version 3.24.0.      |
  3794. |    |Actuellement, vous pouvez toujours utiliser la fonction IN() dans d'autres contextes. |
  3795. |    |5.3.2 SELECT INTO TABLE                                                               |
  3796. |    |MySQL ne supporte pas encore cette extension du SQL Orable.: SELECT ... INTO TABLE    |
  3797. |    |.... A la place, MySQL supporte la syntaxe de la norme ANSI SQL INSERT INTO ... SELECT|
  3798. |    |..., ce qui est pratiquement la m√™me chose.                                           |
  3799. |    |Alternativement, vous pouvez utiliser SELECT INTO OUTFILE... ou CREATE TABLE ...      |
  3800. |    |SELECT pour r√©soudre votre probl√®me.                                                  |
  3801. |    |5.3.3 Transactions                                                                    |
  3802. |    |Les transactions ne sont pas encore support√©es par MySQL. Le serveur va bient√¥t       |
  3803. |    |accepter des op√©rations atomiques, ce qui permettra des transactions, mais sans le    |
  3804. |    |rollback. Avec les op√©rations atomiques, vous pourrez ex√©cuter des groupes de         |
  3805. |    |commandes INSERT/SELECT/ avec n'importe quelle commande, et √™tre sur qu'il n'y aura   |
  3806. |    |aucune interf√©rence avec un autre thread. Dans ce contexte, vous n'aurez alors pas    |
  3807. |    |besoin de rollback. Actuellement, vous pouvez emp√™cher les autres threads d'interf√©rer|
  3808. |    |en utilisant les fonctions LOCK TABLES et UNLOCK TABLES. LOCK TABLES.                 |
  3809. |    |5.3.4 Proc√©dures stock√©es et triggers                                                 |
  3810. |    |Une fonctions enregistr√©e est un ensemble de commandes SQL qui peut √™tre compil√© et   |
  3811. |    |enregistr√© sur le serveur. Une fois fait, les clients peuvent se r√©f√©rer √† cette      |
  3812. |    |fonction pour ex√©cuter l'ensemble des commandes. Cela acc√©l√®re le traitement des      |
  3813. |    |requ√™tes, car elles n'ont pas a √™tre analys√©es, et moins d'information circule entre  |
  3814. |    |le client et le serveur. Il est aussi possible d'√©lever le niveau de conception, en   |
  3815. |    |b?tissant des biblioth√®ques.                                                          |
  3816. |    |Un trigger est une fonction enregistr√©e qui est invoqu√©es √† chaque fois qu'un         |
  3817. |    |√©v√©nement particulier survient. Par exemple, vous pourriez installer une fonction qui |
  3818. |    |sera lanc√©e √† chaque fois qu'un enregistrement sera effac√© dans une table de          |
  3819. |    |transaction, pour effacer automatiquement les informations correspondantes dans les   |
  3820. |    |tables de clients.                                                                    |
  3821. |    |Lors de modifications ult√©rieures, MySQL sera capable de g√©rer les fonctions          |
  3822. |    |enregistr√©es, mais pas les triggers. En g√©n√©ral, les triggers ralentissent le serveur,|
  3823. |    |m√™me pour des requ√™tes pour lesquelles ils ne sont pas appel√©s.                       |
  3824. |    |Pour savoir quand MySQL disposera des proc√©dures enregistr√©es, sinon, F Liste de voeux|
  3825. |    |pour les versions futures de MySQL (la TODO).                                         |
  3826. |    |5.3.5 Cl√©s √©trang√®res                                                                 |
  3827. |    |Remarque : les cl√©s externes en SQL ne sont pas utilis√©es pour effectuer des          |
  3828. |    |regroupements de table, mais pour assurer l'int√©grit√© r√©f√©rentielle. Si vous voulez   |
  3829. |    |lire des informations depuis plusieurs tables avec une commande SELECT, c'est un      |
  3830. |    |regroupement !                                                                        |
  3831. |    |                                                                                      |
  3832. |    |SELECT * from table1,table2 where table1.id = table2.id;                              |
  3833. |    |JOIN. 8.3.5 Utiliser des cl√©s √©trang√®res                                              |
  3834. |    |La syntaxe FOREIGN KEY de MySQL n'existe que pour la compatibilit√© avec les commandes |
  3835. |    |CREATE TABLE des autres bases SQL : elle n'a aucun effet. La syntaxe FOREIGN KEY sans |
  3836. |    |la partie ON DELETE ... n'est utilis√©e que pour des raisons de documentation.         |
  3837. |    |Certaines applications ODBC l'utilise pour g√©n√©rer des clauses WHERE automatiques,    |
  3838. |    |mais il est g√©n√©ralement simple √† remplacer. FOREIGN KEY est parfois utilis√© comme    |
  3839. |    |contrainte, mais ce genre de v√©rification n'est pas n√©cessaire si les lignes ont √©t√©  |
  3840. |    |ins√©r√©es dans l'ordre. MySQL ne supporte que ces clauses, car certaines applications  |
  3841. |    |en ont besoin (qu'elle fonctionne ou pas).                                            |
  3842. |    |Avec MySQL, vous pouvez contourner le probl√®me sans la clause ON DELETE ... en        |
  3843. |    |ajoutant une commande DELETE ad√©quate lors de l'effacement d'un enregsitrement d'une  |
  3844. |    |table qui a une cl√© externe. En pratique, c'est aussi rapide (voire plus), et beaucoup|
  3845. |    |plus portable que les cl√©s externes.                                                  |
  3846. |    |Dans un futur proche, nous allons impl√©menter FOREIGN KEY de mani√®re √† sauver les     |
  3847. |    |informations dans la table de sp√©cification, pour qu'elles soient accessibles par     |
  3848. |    |mysqldump et ODBC.                                                                    |
  3849. |    |5.3.5.1 De bonnes raisons de ne pas utiliser les cl√©s √©trang√®res                      |
  3850. |    |Il y a tant de probl√®mes avec FOREIGN KEYs qu'on ne sait m√™me pas par ou commencer :  |
  3851. |    |Les cl√©s externes compliquent la vie, car les d√©finitions des cl√©s externes doivent   |
  3852. |    |√™tre enregistr√©es dans une base de donn√©es, et les impl√©menter nous forcera √†         |
  3853. |    |abandonner la gestion actuelle des tables (une table √©gale un fichier, qui peut √™tre  |
  3854. |    |sauv√© ou copi√©).                                                                      |
  3855. |    |L'impact sur la vitesse d'ex√©cution de INSERT et UPDATE, et dans ce cas, presque      |
  3856. |    |toutes les v√©rifications dues √† FOREIGN KEY ne servent √† rien, car vous ins√©rez les   |
  3857. |    |informations dans le bon ordre, naturellement.                                        |
  3858. |    |Les cl√©s externes imposent l'utilisation de verrous sur de nombreuses tables, et cela |
  3859. |    |peut conduire, par effet de domino, √† geler toute la base. Il est beaucoup plus rapide|
  3860. |    |d'effacer un enregistrement d'une table, puis de s'occuper des autres tables √† la     |
  3861. |    |suite.                                                                                |
  3862. |    |Avec les cl√©s externes, il n'est plus possible de reconstituer une table par un       |
  3863. |    |effacement complet, suivi d'un chargement de tous les enregistrements (depuis une     |
  3864. |    |nouvelle source, ou une sauvegarde).                                                  |
  3865. |    |Avec les cl√©s externes, il est impossible faire un dump d'une table, puis de la       |
  3866. |    |recharger, √† moins de le faire dans un ordre tr√®s sp√©cifique.                         |
  3867. |    |Il est tr√®s facile de cr√©er des r√©f√©rences circulaires, qui sont autoris√©es, mais     |
  3868. |    |rendent impossible la recr√©ation de la table √† partir d'un enregistrement unique, m√™me|
  3869. |    |si la d√©finition de la table fonctionne et est utilisable.                            |
  3870. |    |Le seul aspect int√©ressant de FOREIGN KEY est de donner aux clients ODBC et quelques  |
  3871. |    |autres la possibilit√© de voir comment une table est connect√©e, et de l'utiliser pour  |
  3872. |    |cr√©er un diagramme de connexion lors de la cr√©ation d'applications.                   |
  3873. |    |MySQL g√©rera prochainement les d√©finitions des FOREIGN KEY, ce qui permettra aux      |
  3874. |    |clients de r√©clamer la structure de la connexion originale. La version courantes des  |
  3875. |    |fichiers ``.frm'' ne le permet pas.                                                   |
  3876. |    |5.3.6 Vues                                                                            |
  3877. |    |MySQL ne supporte pas les vues, mais c'est sur la liste des fonctionnalit√©s futures.  |
  3878. |    |5.3.7 `--' comme d√©but de commentaire                                                 |
  3879. |    |Sur d'autres bases SQL les commentaires commencent par ``--''. MySQL utilise ``#''    |
  3880. |    |pour d√©buter un commentaire, m√™me si mysql supprime aussi les lignes qui commencent   |
  3881. |    |par ``--''. Vous pouvez aussi utiliser le style de commentaires C /* Ceci est un      |
  3882. |    |commentaire */ avec MySQL. Comments.                                                  |
  3883. |    |MySQL n'accepte pas les commentaires commencant par ``--''; car ce style de           |
  3884. |    |commentaire obsol√®te a d√©j√† caus√© de nombreux probl√®mes avec les requ√™tes g√©n√©r√©es    |
  3885. |    |automatiquement, lorsque la base utilise un code comme celui ci : la valeur de        |
  3886. |    |paiement va √™tre plac√©e √† la place de !paiement!:                                     |
  3887. |    |                                                                                      |
  3888. |    |UPDATE nom_table SET credit=credit-!paiement!                                         |
  3889. |    |Mais que ce passe t il si la valeur de paiement est n√©gative?                         |
  3890. |    |Etant donn√© que 1--1 valide en SQL, nous pensons que les commentaires commenc√© par    |
  3891. |    |``--'' sont une tr√®s mauvaise id√©e.                                                   |
  3892. |    |Si vous avez un programme SQL qui contient des commentaires avec le format ``--'' vous|
  3893. |    |devriez utiliser:                                                                     |
  3894. |    |                                                                                      |
  3895. |    |shell> replace " --" " #" < Fichier-texte-avec-des-commentaires-zarbi | mysql database|
  3896. |    |A la place de l'habituel :                                                            |
  3897. |    |                                                                                      |
  3898. |    |shell> mysql database < text-file-with-funny-comments.sql                             |
  3899. |    |Vous pouvez aussi utiliser la commande fichier ``in place'' pour remplacer les        |
  3900. |    |commentaires ``--'' par ``#'':                                                        |
  3901. |    |                                                                                      |
  3902. |    |shell> replace " --" " #" -- text-file-with-funny-comments.sql                        |
  3903. |    |Retrouvez vos situation initiale avec :                                               |
  3904. |    |                                                                                      |
  3905. |    |shell> replace " #" " --" -- text-file-with-funny-comments.sql                        |
  3906. |    |5.4 Quels sont les standards que respecte MySQL?                                      |
  3907. |    |SQL92. ODBC level 0-2.                                                                |
  3908. |    |5.5 Comment se d√©brouiller sans COMMIT/ROLLBACK                                       |
  3909. |    |MySQL ne supporte pas COMMIT-ROLLBACK. Le probl√®me tient √† ce que COMMIT-ROLLBACK     |
  3910. |    |requiert une structure de table completement diff√©rente ce celle qui est utilis√©e     |
  3911. |    |actuellement. MySQL aurait besoin d'autres threads pour nettoyer automatiquement les  |
  3912. |    |tables et l'utilisation du disque serait augment√©e d'autant. Ce qui ralentirait MySQL |
  3913. |    |d'un facteur de 2 √† 4. MySQL est beaucoup plus rapide que bien d'autres bases SQL (en |
  3914. |    |g√©n√©ral, de 2 √† 3 fois plus rapide.). Une des raisons de cette v√©locit√© est l'absence |
  3915. |    |de COMMIT-ROLLBACK.                                                                   |
  3916. |    |Pour le moment, nous sont concentr√©s sur l'impl√©mentation du langage de serveur SQL   |
  3917. |    |(comme par exemple, les fonctions enregistr√©es). Avec ces fonctions, vous ne devriez  |
  3918. |    |faire appel au COMMIT-ROLLBACK que de mani√®re exceptionnelle.                         |
  3919. |    |Les boucles que n√©cessite les transactions peuvent √™tre remplac√©es avantageusement par|
  3920. |    |les LOCK TABLES, et vous n'aurez pas besoin de curseurs si vous pouvez modifier des   |
  3921. |    |enregistrements √† la vol√©e.                                                           |
  3922. |    |Les transactions et les curseurs sont sur la liste de voeux, mais elles ne sont pas   |
  3923. |    |prioritaires. Si nous les impl√©mentons, ce sera sous la forme d'une option de CREATE  |
  3924. |    |TABLE. Cela signifie que COMMIT-ROLLBACK ne fonctionnera qu'avec ces tables, ce qui ne|
  3925. |    |p√©nalisera que les tables qui auront cette option, et non plus la base toute enti√®re. |
  3926. |    |Ici, √† TcX, nous avons un plus grand besoin d'une base de donn√©es rapide que d'une    |
  3927. |    |base de donn√©es g√©n√©raliste. Si nous trouvons un moyen d'ajouter ces fonctionnalit√©s  |
  3928. |    |sans perte de vitesse, nous le ferons s√ªrement. Pour le moment, nous avons d'autres   |
  3929. |    |choses plus importantes. Reportez tous √† la liste des voeux pour savoir quelles sont  |
  3930. |    |les priorit√©s (les clients de haut niveau de support peuvent cependant faire bouger   |
  3931. |    |les choses).                                                                          |
  3932. |    |Le probl√®me actuel est au niveau de ROLLBACK. Sans le ROLLBACK, vous pouvez effectuer |
  3933. |    |des commandes de type COMMIT en utilisant la commande LOCK TABLES. Pour permettre le  |
  3934. |    |support du ROLLBACK, MySQL devra enregistrer tous les vieux enregistrements qui sont  |
  3935. |    |modifi√©s ou effac√©, pour pouvoir les restituer si un ROLLBACK intervient. Pour les cas|
  3936. |    |simples, ce n'est pas compliqu√© √† mettre en place (l'utilitaire actuel isamlog peut   |
  3937. |    |servir √† ce propos), mais cela peut se r√©v√©ler plus compliqu√© pour les commandes      |
  3938. |    |ALTER/DROP/CREATE TABLE.                                                              |
  3939. |    |Pour √©viter d'utiliser le ROLLBACK, vous pouvez suivre la strat√©gie suivante :        |
  3940. |    |Utilisez LOCK TABLES ... pour verrouiller les tables auxquelles vous acc√©dez          |
  3941. |    |Testez les conditions d'utilisation.                                                  |
  3942. |    |Modifiez si tout est OK.                                                              |
  3943. |    |Utilisez UNLOCK TABLES pour lib√©rer la table.                                         |
  3944. |    |G√©n√©ralement, cette m√©thode est beaucoup plus rapide que les transactions, et le      |
  3945. |    |ROLLBACK est souvent possible, mais pas toujours. Le seul point critique est que si le|
  3946. |    |threads est tu√© au milieu de la modification, les verrous seront lib√©r√©s, mais une    |
  3947. |    |partie des modifications ne sera pas faites.                                          |
  3948. |    |Vous pouvez aussi utiliser les fonctions qui modifient un seul enregistrement √† la    |
  3949. |    |fois. Vous pouvez cr√©er des applications tr√®s efficaces avec la technique suivante :  |
  3950. |    |Modifier un champs par rapport √† sa valeur actuelle                                   |
  3951. |    |Modifier seulement les champs qui ont chang√©s                                         |
  3952. |    |Par exemple, lors vous modifiez les informations concernant un client, ne modifiez que|
  3953. |    |les informations qui ont chang√©es, et non pas celle qui sont rest√©es constantes. La   |
  3954. |    |recherche des valeurs est faites avec la clause WHERE de la commande UPDATE. Si       |
  3955. |    |l'enregistrement a chang√©, on peut retourner au client une message du type : "Les     |
  3956. |    |informations n'ont pas √©t√© modifi√©es, car un autre utilisateur est en train de        |
  3957. |    |modifier les valeurs ". Alors, on affiche l'ancienne valeur et la nouvelle, ce qui    |
  3958. |    |permet √† l'utilisateur de d√©cider quelle version utiliser.                            |
  3959. |    |Cela fournit un m√©canisme du genre ``verrouillage de colonne'' mais c'est en fait un  |
  3960. |    |peut mieux, car seule les colonnes qui en on besoin sont utilis√©es. Une commande      |
  3961. |    |UPDATE ressemblera alors √† ceci :                                                     |
  3962. |    |                                                                                      |
  3963. |    |UPDATE tablename SET pay_back=pay_back+'diff√©rence de valeur';                        |
  3964. |    |UPDATE customer                                                                       |
  3965. |    |SET                                                                                   |
  3966. |    |customer_date='date actuellee',                                                       |
  3967. |    |address='nouvelle adresse',                                                           |
  3968. |    |phone='nouveau numero de telephone',                                                  |
  3969. |    |d√©bit =d√©bit + 'autre_d√©bit'                                                          |
  3970. |    |WHERE                                                                                 |
  3971. |    |customer_id=id AND address='vieille addresse' AND phone='vieux numero de telephone';  |
  3972. |    |Comme vous pouvez le voir, c'est une m√©thode tr√®s efficace, et qui fonctionne m√™me si |
  3973. |    |un autre client a chang√© la valeur entre temps.                                       |
  3974. |    |Dans certains cas, l'utilisateur ont demand√© le ROLLBACK et/ou LOCK TABLES dans le but|
  3975. |    |de g√©rer des identifiants uniques dans des tables . Il vaut mieux utiliser le type de |
  3976. |    |colonne AUTO_INCREMENT et la fonction SQL LAST_INSERT_ID() ou l' API C :              |
  3977. |    |mysql_insert_id(). mysql_insert_id().                                                 |
  3978. |    |A TcX, nous n'avons jamais eu besoin d'un verrouillage de ligne, car nous avons       |
  3979. |    |toujours r√©ussit √† contourner le probl√®me. Dans certains cas, le verrouillage de ligne|
  3980. |    |√©tait n√©cessaire, mais c'est tr√®s rarement le cas. Si vous voulez le verrouillage de  |
  3981. |    |ligne, utiliser un flag sur une colonne dans la table comme ci :                      |
  3982. |    |                                                                                      |
  3983. |    |UPDATE nom_table SET row_flag=1 WHERE id=ID;                                          |
  3984. |    |MySQL retourne 1, ce qui correspond au nombre de ligne affect√©es par la commande, si  |
  3985. |    |la ligne a √©t√© trouv√©e, et que le flag row_flag n'√©tait pas d√©j√† √† 1.                 |
  3986. |    |Vous pouvez consid√©rer que MySQL traite la requ√™te ci dessus de la mani√®re suivante : |
  3987. |    |                                                                                      |
  3988. |    |UPDATE nom_table SET row_flag=1 WHERE id=ID and row_flag <> 1;                        |
  3989. |    |6 Syst√®mes de droits MySQL                                                            |
  3990. |    |MySQL dispose d'un syst√®me moderne mais original de droits d'acc√®s. Cette section le  |
  3991. |    |d√©crit.                                                                               |
  3992. |    |6.1 A quoi sert le syst√®me de droits                                                  |
  3993. |    |La fonction primaire du syst√®me de droits de MySQL est d'authentifier un utilisateur  |
  3994. |    |se connectant, et l'associer avec les droits d'utilisation des commandes select,      |
  3995. |    |insert, update et delete sur cette base.                                              |
  3996. |    |Les fonctions secondaires inclus la possibilit√© d'accueillir un utilisateur anonyme,  |
  3997. |    |et de donner des droits particuliers √† des fonctions sp√©cifiques √† MySQL LOAD DATA    |
  3998. |    |INFILE et les op√©rations.                                                             |
  3999. |    |6.2 Noms et mot de passe des d'utilisateurs MySQL                                     |
  4000. |    |Il y a de grandes diff√©rences entre la gestion des noms d'utilisateur et mots de passe|
  4001. |    |de MySQL, et celle de Unix ou de Windows.                                             |
  4002. |    |Les noms d'utilisateurs, utilis√© par MySQL pour l'authentification, n'ont rien √† voir |
  4003. |    |avec les nom d'utilisateur de Unix (Nom de login) ou de Windows. La plus part des     |
  4004. |    |clients MySQL essaie de se connecter √† la base avec le nom d'utilisateur Unix courant,|
  4005. |    |mais cela est uniquement par commodit√©. Les programmes clients permettent de se       |
  4006. |    |connecter sous un autre nom, sp√©cifi√© avec l'option -u ou --user. Cela signifie que   |
  4007. |    |vous ne pouvez s√©curiser un serveur MySQL qu'en ayant un mot de passe pour chacun des |
  4008. |    |utilisateurs. Sinon, n'importe quelle personne qui se connecte en utilisant n'importe |
  4009. |    |quel nom, r√©ussira √† se connecter, si ce nom d'utilisateur n'a pas de mot de passe.   |
  4010. |    |Les noms d'utilisateurs MySQL peuvent avoir jusqu'√† 16 caract√®res de long.            |
  4011. |    |G√©n√©ralement, les noms d'utilisateur Unix sont limit√©s √† 8 caract√®res.                |
  4012. |    |Les mots de passe MySQL n'ont rien √† voir non plus avec le mot de passe Unix ou       |
  4013. |    |Windows. Il n'y a pas de connexion entre les deux, mais ils peuvent √™tre identiques.  |
  4014. |    |Les mots de passe MySQL sont crypt√©s avec un cryptage diff√©rents de celui d'Unix.     |
  4015. |    |Reportez vous √† la description de la commande PASSWORD()et ENCRYPT() dans la section  |
  4016. |    |7.3.12 Fonctions diverses.                                                            |
  4017. |    |6.3 Connection au serveur MySQL                                                       |
  4018. |    |Les clients MySQL ont besoin d'un certains nombre de param√®tres pour se connecter √† un|
  4019. |    |serveur MySQL : l'h√¥te qui abrite le serveur, le nom d'utilisateur et le mot de passe.|
  4020. |    |Par exemple, le client mysql peut √™tre lanc√© avec la ligne suivante : (les arguments  |
  4021. |    |optionnels sont mis entre crochets ``['' et ``]''):                                   |
  4022. |    |                                                                                      |
  4023. |    |shell> mysql [-h host_name] [-u user_name] [-pyour_pass]                              |
  4024. |    |Il est aussi possible de remplacer respectivement les options -h, -u et -p            |
  4025. |    |par--host=host_name, --user=user_name et --password=your_pass. Notez bien qu'il n'y as|
  4026. |    |pas d'espace entre -p ou --password= et le mot de passe qui le suit.                  |
  4027. |    |Note: Transmettre un mot de passe dans la ligne de commande n'est pas s√©curis√© !      |
  4028. |    |N'importe quel utilisateur du syst√®me peut d√©couvrir le mot de passe en tapant : ps   |
  4029. |    |auxww. 4.15.4 Fichier d'options.                                                      |
  4030. |    |Par d√©faut, mysql utilise les valeurs suivantes :                                     |
  4031. |    |Le nom d'h√¥te par d√©faut est localhost, c'est √† dire la machine locale.               |
  4032. |    |Le nom d'utilisateur par d√©faut est le nom de login Unix.                             |
  4033. |    |Aucun mot de passe n'est envoy√© si -p n'est pas pr√©cis√©.                              |
  4034. |    |Ainsi, pour un utilisateur Unix joe, les commandes suivantes sont √©quivalentes :      |
  4035. |    |                                                                                      |
  4036. |    |shell> mysql -h localhost -u joe                                                      |
  4037. |    |shell> mysql -h localhost                                                             |
  4038. |    |shell> mysql -u joe                                                                   |
  4039. |    |shell> mysql                                                                          |
  4040. |    |D'autres clients MySQL se comportent de mani√®re similaire :                           |
  4041. |    |Sous Unix, vous pouvez sp√©cifier d'autres valeurs par d√©faut, lors de la connexion, ce|
  4042. |    |qui vous √©vitera d'entrer les param√®tres √† chaque connexion. Cela peut √™tre fait de   |
  4043. |    |diverses fa√ßons :                                                                     |
  4044. |    |Vous pouvez sp√©cifier les param√®tres de connexion dans la section [client] du fichier |
  4045. |    |de configuration ``.my.cnf'' de votre dossier personnel. Les informations doivent √™tre|
  4046. |    |pr√©sent√©es comme suit :                                                               |
  4047. |    |                                                                                      |
  4048. |    |[client]                                                                              |
  4049. |    |host=host_name                                                                        |
  4050. |    |user=user_name                                                                        |
  4051. |    |password=your_pass                                                                    |
  4052. |    |4.15.4 Fichier d'options                                                              |
  4053. |    |Vous pouvez sp√©cifier les param√®tres de connexion en utilisant les variables          |
  4054. |    |d'environnement. L'h√¥te sera sp√©cifi√© avec la variable MYSQL_HOST. Le nom             |
  4055. |    |d'utilisateur MySQL peut √™tre sp√©cifi√© avec les variables USER, LOGNAME ou LOGIN (bien|
  4056. |    |que ces variables peuvent avoir d√©j√† √©t√© r√©serv√© pour votre login de connexion, et ce |
  4057. |    |ne serait pas conseill√© de les changer). Le mot de passe sera sp√©cifi√© dans la        |
  4058. |    |variable MYSQL_PWD ( mais ce n'est pas tr√®s sur, comme vous le verrez √† la prochaine  |
  4059. |    |section).                                                                             |
  4060. |    |Si les param√®tres de connexion sont sp√©cifiables de nombreuses mani√®res, les valeurs  |
  4061. |    |sp√©cifi√©es sur la ligne de commande ont priorit√© sur les valeurs enregistr√©es dans le |
  4062. |    |fichier de configuration, et ces derni√®res ont priorit√© sur les variables             |
  4063. |    |d'environnement.                                                                      |
  4064. |    |‚Ä¢  6.4 Un mot de passe s√ªr                                                            |
  4065. |    |Il n'est pas conseill√© d'exposer son mot de passe, ou de le stocker dans des endroits |
  4066. |    |qui faciliterait sa connaissances par d'autres utilisateurs. Les m√©thodes de          |
  4067. |    |sp√©cifications du mot de passe lors du lancement du programme client sont pr√©sent√©es  |
  4068. |    |ci-dessous, avec √† chaque fois, les risques de la m√©thode :                           |
  4069. |    |Utiliser la ligne de commande avec l'option -pyour_pass ou --password=your_pass. C'est|
  4070. |    |tr√®s pratique, mais tr√®s dangereux, ca le mot de passe devient visible pour les       |
  4071. |    |commandes de statut du syst√®me (comme par exemple ps) qui peut √™tre invoqu√© pas       |
  4072. |    |d'autres utilisateurs. Les clients MySQL remplace le mot de passe par une ligne de    |
  4073. |    |z√©ro lors de la s√©quence d'initialisation, mais il y a quand m√™me un temps tr√®s bref, |
  4074. |    |o√π la valeur est √©crite en clair).                                                    |
  4075. |    |Utiliser la ligne de commande avec l'option -p ou --password (sans valeur sp√©cifi√©e). |
  4076. |    |Dans ce cas, le programme client va solliciter le mot de passe depuis la console :    |
  4077. |    |                                                                                      |
  4078. |    |shell> mysql -u user_name -p                                                          |
  4079. |    |Enter password: ********                                                              |
  4080. |    |Le client renvoie les caract√®res``*'' √† la console, au fur et √† mesure que vous entrez|
  4081. |    |votre mot de passe, ce qui fait que quelqu'un derri√®re votre √©paule ne pourra pas le  |
  4082. |    |voir. La s√©curit√© est donc renforc√©e par rapport √† la m√©thode pr√©c√©dente, mais cela   |
  4083. |    |oblige √† utiliser le client en mode interactif. Vous ne pourrez pas lancer le         |
  4084. |    |programme depuis un script.                                                           |
  4085. |    |Enregistrez votre mot de passe dans un fichier de configuration. Par exemple, vous    |
  4086. |    |pouvez mettre votre mot de passe dans la section [client] du fichier de configuration |
  4087. |    |``.my.cnf'' de votre dossier home.                                                    |
  4088. |    |                                                                                      |
  4089. |    |[client]                                                                              |
  4090. |    |password=your_pass                                                                    |
  4091. |    |Si vous stockez votre mot de passe dans le fichier ``.my.cnf'', ce fichier ne doit pas|
  4092. |    |√™tre accessible en lecture ou en √©criture ni au groupe, ni au monde. Assurez vous que |
  4093. |    |le mode d'acc√®s du fichier est 400 ou 600. 4.15.4 Fichier d'options.                  |
  4094. |    |Vous pouvez enregistrer votre mot de passe dans la variable d'environnement MYSQL_PWD,|
  4095. |    |mais cette m√©thode doit √™tre consid√©r√© comme extr√™mement dangereuse. Certaines options|
  4096. |    |de ps permettent d'avoir acc√®s aux variables d'environnement des processus en cours,  |
  4097. |    |ce qui fait que votre mot de passe peut √™tre parfaitement lisible. M√™me sur des       |
  4098. |    |syst√®mes qui n'ont pas cette version de ps, il est fortement d√©conseill√© de supposer  |
  4099. |    |qu'il n'y a pas d'autres m√©thode d'observation des processus.                         |
  4100. |    |L'un dans l'autre, la m√©thode la plus s√ªre est de fournir le mot de passe √† la        |
  4101. |    |console, ou de sp√©cifier le mot de passe dans le fichier ``.my.cnf'', correctement    |
  4102. |    |prot√©g√©.                                                                              |
  4103. |    |6.5 Droits sous MySQL                                                                 |
  4104. |    |Les droits sont conserv√©s dans les tables user, db, host, tables_priv et columns_priv |
  4105. |    |de la base de donn√©es. Le serveur MySQL lis le contenu de ces tables au d√©marrage, et |
  4106. |    |√† chaque fois que c'est n√©cessaire, comme d√©crit dans la section 6.9 Prise en compte  |
  4107. |    |des modifications de droits.                                                          |
  4108. |    |Les noms utilis√©s dans ce manuel pour se r√©f√©rer aux droits de MySQL sont list√©s      |
  4109. |    |ci-dessous, avec le nom de la colonne associ√© √† chaque droit dans la table de droits, |
  4110. |    |et le contexte d'application du droit.                                                |
  4111. |    |Les droits select, insert, update et delete permettent d'ex√©cuter des op√©rations sur  |
  4112. |    |les lignes dans les tables existantes d'une base. Vous pouvez m√™me ex√©cuter certaines |
  4113. |    |commandes SELECT sans avoir acc√®s √† aucune base sur le serveur. Par exemple, vous     |
  4114. |    |pouvez utiliser mysql comme une simple calculatrice :                                 |
  4115. |    |                                                                                      |
  4116. |    |mysql> SELECT 1+1;                                                                    |
  4117. |    |mysql> SELECT PI()*2;                                                                 |
  4118. |    |Le droit index vous permet de cr√©er ou de d√©truire des index.                         |
  4119. |    |Le droit alter vous permet d'utiliser la commande ALTER TABLE.                        |
  4120. |    |Les droits create et drop vous permet de cr√©er et d√©truire de nouvelles tables et     |
  4121. |    |bases.                                                                                |
  4122. |    |Il faut bien remarquer que si vous donnez le droit de drop pour la base mysql , un    |
  4123. |    |utilisateur pourra effacer la table des droits MySQL!                                 |
  4124. |    |Le droit grant vous permet de donner des droits que vous poss√©dez √† un autre          |
  4125. |    |utilisateur.                                                                          |
  4126. |    |Le droit file vous permet de lire et √©crire des fichiers sur le serveur, en utilisant |
  4127. |    |les commandes LOAD DATA INFILE et SELECT ... INTO OUTFILE. Tout utilisateur qui       |
  4128. |    |dispose de ce droit peut √©crire ou lire des fichiers que MySQL peut √©crire ou lire.   |
  4129. |    |Les autres droits sont utilis√©s pour les op√©rations administratives, qui sont         |
  4130. |    |disponibles avec mysqladmin. La table ci-dessous montre quelle droit donne acc√®s √†    |
  4131. |    |quelle commande mysqladmi:                                                            |
  4132. |    |La commande reload force le serveur √† relire les tables de droits. La commande refresh|
  4133. |    |vide toutes les tables de la m√©moire, et ouvre puis ferme les fichiers d'historique.  |
  4134. |    |flush-privileges est un synonyme de reload. Les autres commandes flush-* ex√©cutent des|
  4135. |    |fonctions similaires √† refresh mais ne sont pas aussi limit√©es, et parfois m√™me, elles|
  4136. |    |sont pr√©f√©rables. Par exemple, si vous souhaitez uniquement enregistrer les fichiers  |
  4137. |    |d'historique, flush-logs est mieux que refresh.                                       |
  4138. |    |La commande shutdown √©teint le serveur.                                               |
  4139. |    |La commande processlist affiche la liste des threads courant du serveur. La commande  |
  4140. |    |kill arr√™te les threads du serveur. Vous pouvez toujours afficher et d√©truire les     |
  4141. |    |threads que vous poss√©dez, mais vous devez avoir les droits de process pour afficher  |
  4142. |    |ou terminer les threads d'un autre utilisateur.                                       |
  4143. |    |La meilleure strat√©gie est de ne donner des droits qu'√† ceux qui en ont besoin, mais  |
  4144. |    |il faut √™tre particuli√®rement prudents avec certains droits :                         |
  4145. |    |Le droit de grant permet √† utilisateur de donner ses propres droits √† un autre. Deux  |
  4146. |    |utilisateurs pourront alors s'√©changer les droits, et ainsi, obtenir des droits       |
  4147. |    |suppl√©mentaires.                                                                      |
  4148. |    |Les droits de alter peuvent √™tre utilis√©s pour renommer des tables syst√®mes           |
  4149. |    |Les droits de file peuvent √™tre d√©tourn√© : en lisant n'importe quel fichier (sensible |
  4150. |    |de pr√©f√©rence) sur le serveur pour le monter dans une base de donn√©es, il est alors   |
  4151. |    |possible d'acc√©der au contenu en utilisant la commande SELECT.                        |
  4152. |    |Les droits de shutdown peuvent √™tre utilis√© pour emp√™cher l'acc√®s au serveur, en      |
  4153. |    |l'√©teignant.                                                                          |
  4154. |    |Les droits de process permettent √† un utilisateur de voir les commandes des autres    |
  4155. |    |utilisateurs, sans cryptage, notamment les commandes de changement de mot de passe.   |
  4156. |    |Les droits sur la base mysql peuvent √™tre utilis√©s pour changer des mots de passe, ou |
  4157. |    |tout autre droit d'acc√®s. (Les mots de passes sont crypt√©s avant d'√™tre enregistr√©s,  |
  4158. |    |ce qui emp√™che leur relecture. Mais avec les droits ad√©quats, un utilisateur peu      |
  4159. |    |scrupuleux peu les remplacer par d'autre mot de passe, et emp√™cher l'acc√®s).          |
  4160. |    |Il y a des limitations avec les droits MySQL:                                         |
  4161. |    |Vous ne pouvez pas refuser des droits √† un utilisateur. Vous ne pouvez pas sp√©cifier  |
  4162. |    |un utilisateur, et lui refuser sp√©cialement les droits de connexion.                  |
  4163. |    |Vous ne pouvez pas s√©parer les droits de cr√©ation et d'effacement des tables et de la |
  4164. |    |bases de donn√©es qui les contient. L'utilisateur pourra cr√©er et effacer les tables ET|
  4165. |    |la base.                                                                              |
  4166. |    |6.6 Fonctionnement du syst√®me de droits                                               |
  4167. |    |MySQL s'assure que tous les utilisateurs peuvent faire ce qu'ils ont le droit de      |
  4168. |    |faire. Lorsque vous vous connectez √† un serveur MySQL, le serveur d√©termine votre     |
  4169. |    |identit√© gr?ce √† l'h√¥te depuis lequel vous vous connectez, et le nom d'utilisateur que|
  4170. |    |vous sp√©cifiez.. Le syst√®me vous alloue alors les droits ad√©quats.                    |
  4171. |    |MySQL consid√®re que le nom de l'h√¥te et le nom d'utilisateur sont suffisants pour vous|
  4172. |    |identifier sans ambigu√Øt√©, car il y a peu de chance qu'un nom d'utilisateur soit      |
  4173. |    |utilis√© par la m√™me personne, depuis tous les h√¥tes sur Internet ! Par exemple,       |
  4174. |    |l'utilisateur bill qui se connecte depuis whitehouse.gov ne sera probablement pas la  |
  4175. |    |m√™me personne que l'utilisateur bill qui se connecte depuis microsoft.com. MySQL vous |
  4176. |    |permet de distinguer les deux utilisateurs, et de donner des droits diff√©rents pour le|
  4177. |    |m√™me nom d'utilisateur, mais pour des h√¥tes diff√©rents.                               |
  4178. |    |MySQL contr√¥le l'acc√®s en deux temps :                                                |
  4179. |    |Etape 1: le serveur v√©rifie que vous √™tes autoris√©s √† vous connecter.                 |
  4180. |    |Etape 2: Si vous pouvez vous connecter, le serveur v√©rifie chaque requ√™te que vous    |
  4181. |    |√©mettez pour voir sir vous avez des droits suffisants. Par exemple, pour s√©lectionner |
  4182. |    |des lignes dans une table, ou effacer une table dans une base, le serveur s'assure que|
  4183. |    |vous avez les droits de select ou de drop pour la base de donn√©es courante.           |
  4184. |    |Le serveur utilise les tables user, db et host de la base mysql pour conserver les    |
  4185. |    |informations de connexion et les droits. Les champs de ces tables sont les suivants : |
  4186. |    |Pour la deuxi√®me √©tape d'acc√®s, le serveur peut consulter √©ventuellement (si la       |
  4187. |    |requ√™te implique des tables)les tables tables_priv et columns_priv. Les champs de ces |
  4188. |    |tables sont les suivants :                                                            |
  4189. |    |Chaque table de droits contient les champs d'identification et de droits.             |
  4190. |    |Les champs d'identification d√©termine le contexte d'application des droits. Par       |
  4191. |    |exemple, la table user avec une ligne dont les champs Host, User ont les valeurs de   |
  4192. |    |'thomas.loc.gov' et 'bob' seront utilis√©s pour identifier les connexions de bob depuis|
  4193. |    |thomas.loc.gov. De la m√™me fa√ßon, la table db avec une ligne dont les champs Host,    |
  4194. |    |User et Db sont respectivement 'thomas.loc.gov', 'bob' et 'reports' seront utilis√©s   |
  4195. |    |lors que bob se connecte depuis host thomas.loc.gov pour acc√©der √† la base reports.   |
  4196. |    |Les tables tables_priv et columns_priv contiennent les noms des tables et des tables /|
  4197. |    |colonnes pour qui s'appliquent les droits.                                            |
  4198. |    |Pour des raisons de v√©rifications d'acc√®s, les comparaisons effectu√©es sur les        |
  4199. |    |colonnes Host sont insensibles √† la casse.. User, Password, Db et Table_name sont     |
  4200. |    |sensibles √† la casse.. Column_name est insensible √† la casse depuis MySQL 3.22.12.    |
  4201. |    |Les champs de droits indiques quels droits sont donn√©s, quelles commandes sont        |
  4202. |    |autoris√©es. Le serveur combine les informations des diff√©rentes tables pour construire|
  4203. |    |une fiche compl√®te de description des droits du serveur. Les r√®gles utilis√©es pour    |
  4204. |    |cela sont d√©crites dans la section 6.8 Contr√¥le d'acc√®s, √©tape 2 : v√©rification des   |
  4205. |    |requ√™tes.                                                                             |
  4206. |    |Les champs d'identification sont des cha√Ænes, d√©clar√©es comme ci-dessous. La valeur   |
  4207. |    |par d√©faut de chaque champs est la cha√Æne vide.                                       |
  4208. |    |Dans les tables user, db et host, tous les champs de droits sont d√©clar√©s comme des   |
  4209. |    |ENUM('N','Y') - chaque champs peut prendre la valeur 'N' ou 'Y', et la valeur par     |
  4210. |    |d√©faut est 'N'.                                                                       |
  4211. |    |Dans les tables tables_priv et columns_priv, Les champs de droits sont d√©clar√©s comme |
  4212. |    |des SET:                                                                              |
  4213. |    |Pr√©sent√© rapidement, le serveur utilises les tables de droits comme ceci :            |
  4214. |    |La table user d√©termine le droit de connexion. Pour les connexions autoris√©es, les    |
  4215. |    |droits globaux de l'utilisateurs sont pr√©cis√©s.                                       |
  4216. |    |Les tables db et host sont utilis√©es ensembles :                                      |
  4217. |    |La table db d√©termine quelles bases sont accessibles √† quels utilisateurs. Les champs |
  4218. |    |de droits d√©terminent quels sont les droits autoris√©s.                                |
  4219. |    |La table host est utilis√©e comme une extension de db lorsque vous voulez qu'une ligne |
  4220. |    |de db s'applique √† plusieurs h√¥tes. Par exemple, si vous voulez qu'un utilisateur soit|
  4221. |    |capable d'acc√©der √† la base depuis plusieurs h√¥tes diff√©rents, laissez le champs Host |
  4222. |    |de la table db vide, puis ajoutez un enregistrement dans la table host pour chaque    |
  4223. |    |h√¥te √† autoriser. Ce m√©canisme est d√©crit en d√©tails dans la section 6.8 Contr√¥le     |
  4224. |    |d'acc√®s, √©tape 2 : v√©rification des requ√™tes.                                         |
  4225. |    |Les tables tables_priv et columns_priv sont similaires √† la table db, mais            |
  4226. |    |s'appliquent au niveau table et colonne, plut√¥t qu'au niveau base.                    |
  4227. |    |Notez bien que les droits administratifs (tels reload, shutdown, etc.) ne sont        |
  4228. |    |sp√©cifi√©s que dans la tables user. En effet, les op√©rations administratives sont des  |
  4229. |    |op√©rations sur le serveur lui-m√™me, et ne sont pas sp√©cifiques √† une base de donn√©es :|
  4230. |    |il n'y a pas de raison d'avoir ces privil√®ges dans d'autres tables. En fait, seule la |
  4231. |    |table user est consult√©e pour d√©terminer les droits administratifs.                   |
  4232. |    |Le droit file est sp√©cifi√© seulement dans la table user. Ce n'est pas un droit        |
  4233. |    |administratif, mais il n'est pas d√©pendant de la table, ou de la base en cours.       |
  4234. |    |Le serveur mysqld lit le contenu des tables de droits au d√©marrage. Les modifications |
  4235. |    |des tables de droits ne prennent effets qu'√† des moments pr√©cis, comme pr√©cis√© dans la|
  4236. |    |6.9 Prise en compte des modifications de droits.                                      |
  4237. |    |Lorsque vous modifiez le contenu des tables de droits, il es important de s'assurer   |
  4238. |    |que les modifications de droits produiront bien l'effet d√©sir√©. Il existe une aide    |
  4239. |    |pour comprendre ces erreurs, reportez vous √† la section Security.                     |
  4240. |    |Un outil d'analyse pratique est le script mysqlaccess, qui est fournit gracieusement  |
  4241. |    |par Yves Carlier dans la distribution de MySQL. Lancez mysqlaccess avec l'option      |
  4242. |    |--help pour comprendre comment il fonctionne. Notez que mysqlaccess utilise les droits|
  4243. |    |des tables user, db et host. Il ne prend pas en compte les droits sur les tables ou   |
  4244. |    |les colonnes.                                                                         |
  4245. |    |6.7 Contr√¥le d'acc√®s, √©tape 1 : v√©rification de la connexion                          |
  4246. |    |Lorsque vous tentez de vous connecte √† un serveur MySQL, le serveur accepte ou rejete |
  4247. |    |votre tentative en fonction de votre identit√©, et de votre capacit√© √† fournir le mot  |
  4248. |    |de passe correct. Dans le cas contraire, le serveur refuse compl√®tement l'acc√®s.      |
  4249. |    |Sinon, le serveur accepte la connexion, et passe en niveau 2, pour attendre les       |
  4250. |    |requ√™tes.                                                                             |
  4251. |    |L'identit√© lors de la connexion est bas√© sur deux √©l√©ments :                          |
  4252. |    |L'h√¥te depuis lequel vous vous connectez                                              |
  4253. |    |Votre nom d'utilisateur MySQL                                                         |
  4254. |    |La v√©rification de l'identit√© est faite en utilisant les trois champs d'identit√© de la|
  4255. |    |table user (Host, User et Password). Le serveur n'acceptera une connexion que si il   |
  4256. |    |existe un enregistrement qui contienne votre h√¥te, votre nom d'utilisateur et votre   |
  4257. |    |mot de passe.                                                                         |
  4258. |    |Les valeurs de la table user peuvent √™tre fournies avec les propri√©t√©s suivante :     |
  4259. |    |Host peut √™tre un nom d'h√¥te, ou une adresse IP ou 'localhost' pour indiquer la       |
  4260. |    |machine locale.                                                                       |
  4261. |    |Vous pouvez utilisez les caract√®res sp√©ciaux ``%'' et ``_'' dans le champs Host.      |
  4262. |    |Host qui vaut '%' accepte tous les h√¥tes. Host vide est √©quivalent √† to '%'. Notez que|
  4263. |    |ces valeurs accepte n'importe quel h√¥te qui peut cr√©er une connexion avec votre       |
  4264. |    |serveur !                                                                             |
  4265. |    |Les caract√®res sp√©ciaux ne sont pas autoris√©s dans le champs User, mais vous pouvez le|
  4266. |    |laisser vide, ce qui √©quivaudra √† '%'. Si un enregistrement de la table user a un     |
  4267. |    |champs User vide, cet utilisateur sera consid√©r√© comme anonyme (utilisateur sans nom) |
  4268. |    |plut√¥t qu'√©tant l'utilisateur avec le nom sp√©cifi√© par le client. Cela signifie que   |
  4269. |    |l'utilisateur vide sera utilis√© ult√©rieurement pour toutes les v√©rifications de       |
  4270. |    |droits, durant toute la connexion.                                                    |
  4271. |    |Le champs Password peut √™tre laiss√© vide. Cela ne signifie pas que n'importe quel mot |
  4272. |    |de passe sera accept√©, mais que l'utilisateur doit se connecter SANS mot de passe.    |
  4273. |    |Les valeurs de Password qui ne sont pas vides repr√©sentent des mots de passe crypt√©s. |
  4274. |    |MySQL ne conserve pas les mots de passe en clair, qui risqueraient ainsi d'√™tre vu par|
  4275. |    |n'importe qui. Lors de la connexion, le mot de passe fourni est crypt√© de la m√™me     |
  4276. |    |mani√®re que le mot de passe enregistr√©, et les deux valeurs sont compar√©es. Si les    |
  4277. |    |deux correspondent, le mot de passe fourni est le bon.                                |
  4278. |    |Les exemples suivants montrent diff√©rentes combinaisons des colonnes Host et User de  |
  4279. |    |la table user :                                                                       |
  4280. |    |Etant donn√© que l'on peut utiliser des jokers dans le champs Host (i.e.,              |
  4281. |    |'144.155.166.%' pour accepter tout un sous domaine), il est possible que quelqu'un    |
  4282. |    |essaie d'exploiter ceci en prenant comme nom 144.155.166.petaouschnock.com. Pour      |
  4283. |    |contrer ce genre de tentatives, MySQL n'accepte pas les noms d'h√¥tes qui commencent   |
  4284. |    |par des chiffres suivis d'un point. Ainsi, un hote du genre 1.2.foo.com ne pourra     |
  4285. |    |jamais √™tre accept√©. Seule les IP num√©riques peuvent utiliser un joker.               |
  4286. |    |Une connexion entrante peut disposer de plusieurs entr√©es dans la table user. Par     |
  4287. |    |exemple, la connexion thomas.loc.gov de fred pouurait √™tre accept√©e plusieurs fois    |
  4288. |    |dans les exemples ci-dessus. Comment le serveur fait il pour choisir une entr√©e ou une|
  4289. |    |autre ? Il r√©soud la question en triant les utilisateurs au moment du d√©marrage, et en|
  4290. |    |lisant les entr√©es dans cet ordre tri√©. La premi√®re ligne qu'il trouve est alors la   |
  4291. |    |bonne.                                                                                |
  4292. |    |La table user fonctionne comme ceci. Supposons qu'elle ressemble √† ceci :             |
  4293. |    |                                                                                      |
  4294. |    |+-----------+----------+-                                                             |
  4295. |    || Host      | User     | ...                                                          |
  4296. |    |+-----------+----------+-                                                             |
  4297. |    || %         | root     | ...                                                          |
  4298. |    || %         | jeffrey  | ...                                                          |
  4299. |    || localhost | root     | ...                                                          |
  4300. |    || localhost |          | ...                                                          |
  4301. |    |+-----------+----------+-                                                             |
  4302. |    |Lorsque le serveur lit la table, il classe les lignes en commencant par les h√¥tes les |
  4303. |    |moins g√©n√©raux ('%' dans la colonne Host signifie ``tous les h√¥tes'' et c'est le cas  |
  4304. |    |le plus g√©n√©ral). Les lignes avec le m√™me h√¥te sont class√© en commencant par les      |
  4305. |    |utilisateurs les moins g√©n√©raux (un utilisateur en blanc signifie ``tous les          |
  4306. |    |utilisateurs'' et c'est le cas le plus g√©n√©ral. Une fois tri√©e, la table ressemble √†  |
  4307. |    |ceci :                                                                                |
  4308. |    |                                                                                      |
  4309. |    |+-----------+----------+-                                                             |
  4310. |    || Host      | User     | ...                                                          |
  4311. |    |+-----------+----------+-                                                             |
  4312. |    || localhost | root     | ...                                                          |
  4313. |    || localhost |          | ...                                                          |
  4314. |    || %         | jeffrey  | ...                                                          |
  4315. |    || %         | root     | ...                                                          |
  4316. |    |+-----------+----------+-                                                             |
  4317. |    |Lors d'une connexion, le serveur recherche parmi les lignes class√©es, et utilise la   |
  4318. |    |premi√®re ligne qui aille et l'utilise. Si la connexion entrante vient de l'h√¥te       |
  4319. |    |localhost et de l'utilisateur jeffrey, les premi√®res lignes, avec 'localhost' sont    |
  4320. |    |trouv√©es. Parmi celles-ci, la ligne avec le champs utilisateur vide correspond √† la   |
  4321. |    |connexion. (la linge avec '%'/'jeffrey' √©tait aussi correcte mais elle appara√Æt plus  |
  4322. |    |tard dans la table).                                                                  |
  4323. |    |Voici un autre exemple :. fonctionne comme ceci. Supposons que la table user ressemble|
  4324. |    |√† ceci :                                                                              |
  4325. |    |                                                                                      |
  4326. |    |                                                                                      |
  4327. |    |+----------------+----------+-                                                        |
  4328. |    || Host           | User     | ...                                                     |
  4329. |    |+----------------+----------+-                                                        |
  4330. |    || %              | jeffrey  | ...                                                     |
  4331. |    || thomas.loc.gov |          | ...                                                     |
  4332. |    |+----------------+----------+-                                                        |
  4333. |    |Une fois tri√©e, la table ressemble √† ceci :                                           |
  4334. |    |                                                                                      |
  4335. |    |                                                                                      |
  4336. |    |+----------------+----------+-                                                        |
  4337. |    || Host           | User     | ...                                                     |
  4338. |    |+----------------+----------+-                                                        |
  4339. |    || thomas.loc.gov |          | ...                                                     |
  4340. |    || %              | jeffrey  | ...                                                     |
  4341. |    |+----------------+----------+-                                                        |
  4342. |    |Une connexion par l'h√¥te thomas.loc.gov et l'utilisateur jeffrey utilisera la premi√®re|
  4343. |    |ligne, et la m√™me connexion depuis whitehouse.gov utilisera la seconde.               |
  4344. |    |Une erreur commune est de penser que pour un nom d'utilisateur donn√©, toutes les      |
  4345. |    |lignes qui nomme explicitement cet utilisateur seront utilis√©es en premier par le     |
  4346. |    |serveur pour accepter la connexion. Ceci est tout simplement faux. L'exemple pr√©c√©dent|
  4347. |    |l'illustre bien : la connexion depuis thomas.loc.gov par jeffrey n'utilise par la     |
  4348. |    |ligne contenant l'utilisateur 'jeffrey' mais la ligne sans nom d'utilisateur.         |
  4349. |    |Si vous avez des probl√®mes √† vous connecte au serveur, afficher la table user et trier|
  4350. |    |la √† la main, pour savoir quelle ligne est la premi√®re a accepter votre connexion.    |
  4351. |    |6.8 Contr√¥le d'acc√®s, √©tape 2 : v√©rification des requ√™tes                             |
  4352. |    |Une fois que la connexion est √©tablie, le serveur passe en niveau 2. Pour chaque      |
  4353. |    |requ√™te entrante, le serveur va v√©rifier que les droits sont suffisants pour effectuer|
  4354. |    |la requ√™te, en fonction du type d'op√©ration. C'est ici qu'interviennent les champs de |
  4355. |    |droits des tables de droits. Ces droits peuvent √™tre stock√©s dans les tables user, db,|
  4356. |    |host, tables_priv ou columns_priv tables. Ces tables sont g√©r√©es gr?ce aux commandes  |
  4357. |    |GRANT et REVOKE. Reportez vous √† la section Privileges, dans laquelle les champs de   |
  4358. |    |ces tables sont pr√©sent√©s).                                                           |
  4359. |    |Les droits pris en charge par la table user sont assign√©s globalement, et s'appliquent|
  4360. |    |quelque soit la base de donn√©es courante. Par exemple, si la table user donne les     |
  4361. |    |droits de delete, vous pouvez efface n'importe quelle base de donn√©e sur le serveur ! |
  4362. |    |! En d'autres termes, la table user fourni les droits de super utilisateur, et il est |
  4363. |    |avis√© de ne donner ces droits qu'aux administrateurs du serveur. Pour les autres      |
  4364. |    |utilisateurs, il vaut mieux laisser les droits √† 'N' et donner des droits sp√©cifiques |
  4365. |    |sur les bases de donn√©es, avec les tables db et host.                                 |
  4366. |    |Les tables db et host donnent des droits sp√©cifiques aux bases de donn√©es. Les valeurs|
  4367. |    |accept√©es dans les champs sont les suivantes :                                        |
  4368. |    |Les caract√®res sp√©ciaux ``%'' et ``_'' peuvent √™tre utilis√©s dans les champs Host et  |
  4369. |    |Db de deux tables.                                                                    |
  4370. |    |Un '%' dans le champs Host de la table db signifie ``tous les h√¥tes.'' Une valeur vide|
  4371. |    |pour Host dans la table db signifie ``consulte la table host pour plus de d√©tails.''  |
  4372. |    |Un '%' ou une cha√Æne vide dans le champs Host de la table host signifie `` tous les   |
  4373. |    |h√¥tes.''                                                                              |
  4374. |    |Un '%' ou une cha√Æne vide dans le champs Db dans l'une des tables signifie ``toutes   |
  4375. |    |les bases de donn√©es.''                                                               |
  4376. |    |une cha√Æne vide dans le champs User dans l'une des tables corresponde √† l'utilisateur |
  4377. |    |anonyme.                                                                              |
  4378. |    |Les tables db et host sont lues et tri√©es au d√©marrage du serveur (en m√™me temps que  |
  4379. |    |la table user). La table db est tri√©e en fonction des champs Host, Db et User, et la  |
  4380. |    |table host table est tri√©e en fonction des champs Host Db. Tout comme pour la table   |
  4381. |    |user, le trie met les valeurs les plus pr√©cises en premier, puis le plus larges. Lors |
  4382. |    |de l'utilisation de la table, la premi√®re valeur qui correspond √† l'utilisateur est   |
  4383. |    |utilis√©e.                                                                             |
  4384. |    |Les tables de droits tables_priv et columns_priv contiennent les droits sp√©cifiques   |
  4385. |    |aux droits par table et par colonne. Les valeurs des champs peuvent √™tre les suivantes|
  4386. |    |:                                                                                     |
  4387. |    |Les caract√®res sp√©ciaux ``%'' et ``_'' peuvent √™tre utilis√©s dans les champs Host et  |
  4388. |    |Db de deux tables.                                                                    |
  4389. |    |Un '%' ou une cha√Æne vide dans le Host de la table db signifie ``tous les h√¥tes.''    |
  4390. |    |Les champs Db, Table_name et Column_name ne peuvent pas contenir de champs vide, ou de|
  4391. |    |caract√®res sp√©ciaux.                                                                  |
  4392. |    |Les tables tables_priv et columns_priv sont tri√©es en fonction des champs Host, Db et |
  4393. |    |User. Le tri est identique √† celui de la table db, mais √©tant donn√© que le champs Host|
  4394. |    |ne contient pas de caract√®re sp√©ciaux, le tri est nettement plus simple.              |
  4395. |    |Le processus de v√©rification de requ√™te est d√©crit ci-dessous. (Si vous √™tes familier |
  4396. |    |avec la programmation de contr√¥le d'acc√®s, vous remarquerez que la description qui    |
  4397. |    |suit est un peu simplifi√©e, par rapport aux algorithmes utilis√©s. En fait, la         |
  4398. |    |description est √©quivalente au code, et la diff√©rence sert simplement √† rendre la     |
  4399. |    |description plus accessible).                                                         |
  4400. |    |Pour les requ√™tes administratives telles que shutdown, reload, etc..., le serveur ne  |
  4401. |    |v√©rifie les droits que dans la table user, √©tant donn√© que c'est la seule qui sp√©cifie|
  4402. |    |les droits administratifs. La commande est ex√©cut√©e si les droits sont disponibles, et|
  4403. |    |sinon, la requ√™te n'est pas autoris√©e. Par exemple, si vous voulez ex√©cuter mysqladmin|
  4404. |    |shutdown mais que votre compte utilisateur dans la table user n'a pas les droits de   |
  4405. |    |shutdown, l'autorisation n'est aps donn√©e, sans m√™me v√©rifier les tables db ou host.  |
  4406. |    |(Etant donn√© que ces tables ne contiennent pas de colonne Shutdown_priv, il n'y a pas |
  4407. |    |besoin de passer en revue ces tables.)                                                |
  4408. |    |Pour les requ√™tes li√©es aux bases de donn√©es, telles que insert, update, etc., le     |
  4409. |    |serveur commence par v√©rifier les droits globaux (droits de super utilisateur) en     |
  4410. |    |recherchant dans la table user. Si il trouve des droits, l'ex√©cution de la requ√™te est|
  4411. |    |autoris√©. Si les droits globaux sont insuffisants, le serveur d√©termine les droits    |
  4412. |    |sp√©cifiques √† cette base en v√©rifiant les tables db et host:                          |
  4413. |    |Le serveur dans la table db une ligne qui corresponde √† Host, Db et User de           |
  4414. |    |l'utilisateur. Host et User ont √©t√© d√©fini lors de la connexion au serveur. Le champs |
  4415. |    |Db prendre le nom de la base de donn√©es qui va √™tre modifi√©e. Si il n'y a aucune      |
  4416. |    |entr√©e, l'autorisation n'est pas donn√©e.                                              |
  4417. |    |Si il y a une ligne, et que le champs Host n'est pas laiss√© vide, cette ligne d√©finit |
  4418. |    |les droits de l'utilisateur, sp√©cifiques √† cette base.                                |
  4419. |    |Si le champs Host a √©t√© laiss√© vide, cela signifie que la table host contient la liste|
  4420. |    |des h√¥tes qui ont l'autorisation d'acc√©der √† cette base. Dans ce cas, une nouvelle    |
  4421. |    |recherche est effectu√©e dans la table host pour rechercher une ligne qui correspondent|
  4422. |    |√† Host et Db. Si aucune ligne n'est trouv√©e, alors l'acc√®s n'est pas autoris√©. Si une |
  4423. |    |ligne est trouv√©e, les droits d'acc√®s de cet utilisateur sont repr√©sent√©s par         |
  4424. |    |l'intersection des droits issus de la table db et de la table host, i.e., c'est √† dire|
  4425. |    |les droits qui sont √† 'Y' dans les deux lignes trouv√©es. (De cette mani√®re, vous      |
  4426. |    |pouvez donner des droits g√©n√©raux, et restreindre s√©lectivement en fonction des h√¥tes,|
  4427. |    |gr?ce √† la table host.)                                                               |
  4428. |    |Apr√®s avoir d√©termin√© les droits sp√©cifiques √† la base de donn√©es, avec les tables db |
  4429. |    |et host, le serveur les ajoutent aux droits globaux donn√©s par la table user. Si le   |
  4430. |    |r√©sultat de cette union autorise l'op√©ration, la requ√™te est ex√©cut√©e. Sinon, le      |
  4431. |    |serveur v√©rifie les droits sur les tables et les colonnes dans les tables tables_priv |
  4432. |    |et columns_priv et les ajoutent aux droits de l'utilisateur. l'acc√®s est alors donn√©  |
  4433. |    |ou retir√© en fonction du r√©sultat.                                                    |
  4434. |    |Exprim√© par une formule bool√©enne, la description pr√©c√©dente du calcul des droits est |
  4435. |    |la suivante :                                                                         |
  4436. |    |                                                                                      |
  4437. |    |global privileges                                                                     |
  4438. |    |OR (database privileges AND host privileges)                                          |
  4439. |    |OR table privileges                                                                   |
  4440. |    |OR column privileges                                                                  |
  4441. |    |Il n'est pas √©vident que si les droits globaux user sont insuffisants pour l'op√©ration|
  4442. |    |demand√©e, le serveur va les ajouter dans les diff√©rentes tables qui conservent les    |
  4443. |    |droits. La raison est qu'une requ√™te peut n√©cessiter plusieurs droits diff√©rents. Par |
  4444. |    |exemple, la commande INSERT ... SELECT requiert les droits d'insertion (insert) et de |
  4445. |    |selection (select). Il se peut alors que les droits d'insertion soient disponible au  |
  4446. |    |niveau de la table, et que les droits de selection soient au niveau de la colonne.    |
  4447. |    |Dans ce cas, les droits de deux niveaux doivent √™tre combin√©s pour autoriser la       |
  4448. |    |commande. D'o√π cette propagation de droits.                                           |
  4449. |    |La table host est utilis√©e pour avoir une liste de serveurs ``s√©curis√©s''. A TcX, la  |
  4450. |    |table host contenait la liste de toutes les machines du r√©seau local. Toutes ces      |
  4451. |    |machines avaient des autorisations d'acc√®s sur le serveur.                            |
  4452. |    |Vous pouvez aussi utiliser cette table pour lister les serveurs qui ne sont pas s√ªrs. |
  4453. |    |Par exemple, supposons que la machine public.votre.domaine soit situ√©e dans une zone  |
  4454. |    |publique qui ne soient pas s√ªre. Vous pouvez alors accepter tous les h√¥tes du r√©seau, |
  4455. |    |et exclure cette machine, comme ceci :                                                |
  4456. |    |                                                                                      |
  4457. |    |+----------------------+----+-                                                        |
  4458. |    || Host                 | Db | ...                                                     |
  4459. |    |+----------------------+----+-                                                        |
  4460. |    || public.votre.domaine | %  | ... (tous les droits √† 'N')                             |
  4461. |    || %.your.domain        | %  | ... (tous les droits √† 'Y')                             |
  4462. |    |+-------------------**-+----+-                                                        |
  4463. |    |Bien entendu, il est plus sage de tester toutes les lignes des tables de droits (e.g.,|
  4464. |    |en utilisant mysqlaccess) pour s'assurer que les droits sont bien donn√©s comme vous le|
  4465. |    |souhaitez.                                                                            |
  4466. |    |6.9 Prise en compte des modifications de droits                                       |
  4467. |    |Lorsque mysqld d√©marre, les tables de droits sont lu, et charg√©s en m√©moire : ils sont|
  4468. |    |alors effectifs.                                                                      |
  4469. |    |Les modifications des tables de droits qui se font avec les requ√™tes GRANT, REVOKE, ou|
  4470. |    |SET PASSWORD sont imm√©diatement prises en compte.                                     |
  4471. |    |Si vous modifiez les tables de droits manuellement (INSERT, UPDATE, etc.), vous devrez|
  4472. |    |ex√©cuter la commande FLUSH PRIVILEGES ou lancer mysqladmin flush-privileges pour      |
  4473. |    |indiquer au serveur qu'il faut qu'il relise les tables de droits. Sinon, les          |
  4474. |    |changements ne seront pas effectifs avant le prochain rechargement.                   |
  4475. |    |Lorsque le serveur remarque que les tables de droits ont √©t√© chang√©es, les connexions |
  4476. |    |courantes sont trait√©es comme suit :                                                  |
  4477. |    |Les droits de table et de colonnes sont pris en compte √† la prochaine requ√™te.        |
  4478. |    |Les droits de base sont pris en compte √† la prochaine utilisation de la requ√™te USE   |
  4479. |    |nom_base_de_donnees.                                                                  |
  4480. |    |Les droits globaux et les mots de passes ne changent qu'√† la prochaine connexion.     |
  4481. |    |6.10 Droits initiaux                                                                  |
  4482. |    |Apr√®s avoir install√© MySQL, vous allez installer les premiers droits en ex√©cutant     |
  4483. |    |l'utilitaire scripts/mysql_install_db. 4.7.1 Introduction √† l'installation rapide. Le |
  4484. |    |script scripts/mysql_install_db d√©marre le serveur mysqld, puis initialise les tables |
  4485. |    |de droits, qui contiendront alors les droits suivants :                               |
  4486. |    |L'utilisateur MySQL root est cr√©√©, c'est le super utilisateur, investi de tous les    |
  4487. |    |droits. Les connexions au serveur MySQL doivent √™tre faites depuis l'h√¥te local. NB:  |
  4488. |    |Le super utilisateur initial a un mot de passe vide ce qui fait que n'importe qui peut|
  4489. |    |se connecter sans mot de passe, et disposer de tous les droits.                       |
  4490. |    |Un utilisateur anonyme est aussi cr√©√©, qui peut travailler librement dans les bases de|
  4491. |    |donn√©es dont le nom commence par 'test_' et aussi 'test' . Les connections doivent    |
  4492. |    |√™tre faites depuis l'h√¥te local. Cela signifie que quiconque se connecte depuis cet   |
  4493. |    |h√¥te peut √™tre trait√© comme un utilisateur anonyme.                                   |
  4494. |    |Aucun autre droit n'est attribu√©. Par exemple, les utilisateurs normaux ne peuvent pas|
  4495. |    |utiliser mysqladmin shutdown ou mysqladmin processlist.                               |
  4496. |    |NB: Les droits par d√©faut sont diff√©rents sous Windows. 4.12.4 Faire tourner MySQL    |
  4497. |    |sous Win32.                                                                           |
  4498. |    |Etant donn√© que votre installation initialle est tr√®s ouverte, la premi√®re chose √†    |
  4499. |    |faire est d'attribuer un mot de passe au root. Vous pouvez le faire simplement avec la|
  4500. |    |commande suivante :                                                                   |
  4501. |    |                                                                                      |
  4502. |    |shell> mysql -u root mysql                                                            |
  4503. |    |mysql> UPDATE user SET Password=PASSWORD(nouveau_mot_de_passe)                        |
  4504. |    |WHERE user='root';                                                                    |
  4505. |    |mysql> FLUSH PRIVILEGES;                                                              |
  4506. |    |Vous pouvez aussi utiliser la commande SET PASSWORD:                                  |
  4507. |    |                                                                                      |
  4508. |    |shell> mysql -u root mysql                                                            |
  4509. |    |mysql> SET PASSWORD FOR root=PASSWORD(nouveau_mot_de_passe);                          |
  4510. |    |Un autre moyen d'attribuer le mot de passe est de passer la commande mysqladmin:      |
  4511. |    |                                                                                      |
  4512. |    |shell> mysqladmin -u root password nouveau_mot_de_passe                               |
  4513. |    |Notez bien que si vous modifiez un mot de passe dans la table user directement avec la|
  4514. |    |premi√®re m√©thode, vous devez faire relire les tables par le serveur avec la commande  |
  4515. |    |FLUSH PRIVILEGES : dans le cas contraire, les modifications ne seront pas prises en   |
  4516. |    |compte.                                                                               |
  4517. |    |Une fois que le mot de passe du root a √©t√© affect√©, vous devrez le fournir pour       |
  4518. |    |pouvoir vous connecter comme root.                                                    |
  4519. |    |Vous pouvez aussi laisser le mot de passe du root blanc, ce qui vous √©vitera d'avoir √†|
  4520. |    |le sp√©cifier lors de la connexion, surtout si vous faites d'autres tests              |
  4521. |    |d'installation. Sinon, n'oubliez pas d'en assigner un lors du passege en production,  |
  4522. |    |pour ne pas cr√©er des trous de s√©curit√©.                                              |
  4523. |    |Reportez vous au script scripts/mysql_install_db pour voir fonctionner les privil√®ges |
  4524. |    |par d√©faut. Vous pouvez utiliser ce script comme base, pour ajouter de nouveaux       |
  4525. |    |utilisateurs.                                                                         |
  4526. |    |Si vous voulez que les privil√®ges par d√©faut soient diff√©rents de ceux pr√©sent√©s      |
  4527. |    |jusqu'√† pr√©sent, modifiez le script mysql_install_db avant de l'ex√©cuter.             |
  4528. |    |Pour recr√©er les tables de droits, effacez les fichiers ``*.frm'', ``*.ISM'' et       |
  4529. |    |``*.ISD'' dans le dossier contenant le serveur mysql. (ce dossier est nomm√© ``mysql'' |
  4530. |    |dans le dossier du serveur. Ce dernier est affich√© si avec la commande mysqld -help.  |
  4531. |    |Alors, ex√©cutez le script mysql_install_db, √©ventuellement apr√®s avoir l'avoir √©dit√©. |
  4532. |    |NOTE IMPORTANTE : pour les versions de MySQL ant√©rieures √† 3.22.10, vous ne DEVEZ PAS |
  4533. |    |effacer les fichiers ``*.frm''. Si vous l'avez fait par accident, vous devez remettre |
  4534. |    |une copie (tir√©e de la distribution MySQL) avant d'ex√©cuter mysql_install_db.         |
  4535. |    |6.11 Ajout d'un nouvel utilisateur MySQL                                              |
  4536. |    |Vous pouvez ajouter des utilisateurs de deux mani√®res diff√©rentes : en utilisant la   |
  4537. |    |commande GRANT ou en manipulant directement les tables de droits MySQL. La meilleure  |
  4538. |    |m√©thode est l'utilisation de la commande GRANT, car elle est plus concise et est la   |
  4539. |    |source de moins d'erreur. Les exemples ci dessous montrent comment utiliser le client |
  4540. |    |mysql client pour ajouter un nouvel utilisateur. Ces exemples supposent que les droits|
  4541. |    |ont √©t√© cr√©√© comme d√©crit dans la section pr√©c√©dente. Cela signifie notamment que pour|
  4542. |    |faire des modifications, il vous faut √™tre sur la machine qui fait tourner le serveur,|
  4543. |    |vous devez vous connecter en tant que root, et le root doit avoir les droits          |
  4544. |    |d'insertion et de rechargement (insert et reload ). De plus, si vous avez chang√© le   |
  4545. |    |mot de passe du root, vous devrez le sp√©cifier pour pouvoir ex√©cuter les commandes    |
  4546. |    |suivantes                                                                             |
  4547. |    |Ajout d'un nouvel utilisateur                                                         |
  4548. |    |                                                                                      |
  4549. |    |shell> mysql --user=root mysql                                                        |
  4550. |    |mysql> GRANT ALL PRIVILEGES ON *.* TO monty@localhost                                 |
  4551. |    |IDENTIFIED BY 'quelquechose' WITH GRANT OPTION;                                       |
  4552. |    |mysql> GRANT ALL PRIVILEGES ON *.* TO monty@"%"                                       |
  4553. |    |IDENTIFIED BY 'something' WITH GRANT OPTION;                                          |
  4554. |    |mysql> GRANT RELOAD,PROCESS ON *.* TO admin@localhost;                                |
  4555. |    |mysql> GRANT USAGE ON *.* TO dummy@localhost;                                         |
  4556. |    |Ces commandes ajoutent 3 nouveaux utilisateurs                                        |
  4557. |    |‚Ä¢  monty Un super-utilisateur avec les pleins pouvoirs, qui peut se connecter depuis  |
  4558. |    |n'importe quelle machine (m√™me distante) mais qui doit utiliser le mot de passe       |
  4559. |    |'quelquechose' pour ce faire. Notez l'utilisation de la commande GRANT pour les deux  |
  4560. |    |formes monty@localhost et monty@"%". Si la ligne avec localhost n'est pas ajout√©e     |
  4561. |    |l'utilisateur anonyme qui a √©t√© cr√©√© par le script mysql_install_db aura priorit√© lors|
  4562. |    |de la connexion, car il sera plus sp√©cifique. Il faut donc l'ajouter nomm√©ment pour   |
  4563. |    |pouvoir donner les bons droits √† monty.                                               |
  4564. |    |‚Ä¢  admin Un utilisateur qui peut se connecter depuis localhost sans mot de passe, et  |
  4565. |    |qui a les droits administratifs de reload et process. Cela va lui permettre d'ex√©cuter|
  4566. |    |les utilitaires mysqladmin reload, mysqladmin refresh et mysqladmin flush-*, ainsi que|
  4567. |    |mysqladmin processlist . Aucun droit li√© aux bases de donn√©es ne sont donn√©s. Ils     |
  4568. |    |pourront √™tre donn√©s plus tard, avec des commandes GRANT.                             |
  4569. |    |‚Ä¢  dummy Un utilisateur qui peut se connecter sans mot de passe, mais uniquement      |
  4570. |    |depuis localhost . Les privil√®ges globaux sont tous √† 'N' - le type sp√©cial USAGE vous|
  4571. |    |permet de cr√©er rapidement un utilisateur sans droits, et lui occtroyer plus tard.    |
  4572. |    |Vous pouvez aussi ajouter ces informations avec des commandes INSERT et en forcant le |
  4573. |    |serveur √† recharger ces tables.                                                       |
  4574. |    |                                                                                      |
  4575. |    |shell> mysql --user=root mysql                                                        |
  4576. |    |mysql> INSERT INTO user VALUES('localhost','monty',PASSWORD('something'),             |
  4577. |    |'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y')                              |
  4578. |    |mysql> INSERT INTO user VALUES('%','monty',PASSWORD('something'),                     |
  4579. |    |'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y')                              |
  4580. |    |mysql> INSERT INTO user SET Host='localhost',User='admin',                            |
  4581. |    |Reload_priv='Y', Process_priv='Y';                                                    |
  4582. |    |mysql> INSERT INTO user (Host,User,Password)                                          |
  4583. |    |VALUES('localhost','dummy','');                                                       |
  4584. |    |mysql> FLUSH PRIVILEGES;                                                              |
  4585. |    |Suivant la version de MySQL, vous pouvez avoir un nombre diff√©rent de 'Y' dans les    |
  4586. |    |lignes ci-dessus (Les versions ant√©rieures √† 3.22.11 avaient moins de colonnes de     |
  4587. |    |droits.). Pour l'utilisateur admin, la version plus pratique de la commande INSERT est|
  4588. |    |disponible √† partir de la version 3.22.11.                                            |
  4589. |    |Notez que pour cr√©er un super utilisateur, il vous suffit de cr√©er une ligne dans la  |
  4590. |    |table user avec tous les privil√®ges mis √† 'Y' : aucune ligne n'est requise dans les   |
  4591. |    |tables db ou host.                                                                    |
  4592. |    |La colonne de droit dans la table user n'ont pas √©t√© explicitement fix√©e dans la      |
  4593. |    |derni√®re commande INSERT (pour l'utilisateur dummy), ce qui fait que ces colonnes ont |
  4594. |    |une valeur par d√©faut de 'N'. C'est le m√™me comportement que pour la commande GRANT   |
  4595. |    |USAGE.                                                                                |
  4596. |    |L'exemple suivant ajoute un utilisateur custom qui peut se connecter depuis les h√¥tes |
  4597. |    |localhost, server.domain et whitehouse.gov. Il veut pouvoir acc√©der √† la base de      |
  4598. |    |donn√©es bankaccount, mais uniquement depuis localhost, √† la base expenses mais        |
  4599. |    |uniquement depuis whitehouse.gov et √† la base customer depuis tous les h√¥tes Il veut  |
  4600. |    |avoir le m√™me mot de passe pour toutes les connexions.                                |
  4601. |    |Pour donner ces droits √† cet utilisateur, utilisez les commandes GRANT suivantes :    |
  4602. |    |                                                                                      |
  4603. |    |shell> mysql --user=root mysql                                                        |
  4604. |    |mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP                                  |
  4605. |    |ON bankaccount.*                                                                      |
  4606. |    |TO custom@localhost                                                                   |
  4607. |    |IDENTIFIED BY 'stupid';                                                               |
  4608. |    |mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP                                  |
  4609. |    |ON expenses.*                                                                         |
  4610. |    |TO custom@whitehouse.gov                                                              |
  4611. |    |IDENTIFIED BY 'stupid';                                                               |
  4612. |    |mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP                                  |
  4613. |    |ON customer.*                                                                         |
  4614. |    |TO custom'%'                                                                          |
  4615. |    |IDENTIFIED BY 'stupid';                                                               |
  4616. |    |Pour donner ces droits √† cet utilisateur en acc√©dant directement aux tables de droits,|
  4617. |    |utilisez les commandes suivantes :                                                    |
  4618. |    |                                                                                      |
  4619. |    |shell> mysql --user=root mysql                                                        |
  4620. |    |mysql> INSERT INTO user (Host,User,Password)                                          |
  4621. |    |VALUES('localhost','custom',PASSWORD('stupid'));                                      |
  4622. |    |mysql> INSERT INTO user (Host,User,Password)                                          |
  4623. |    |VALUES('server.domain','custom',PASSWORD('stupid'));                                  |
  4624. |    |mysql> INSERT INTO user (Host,User,Password)                                          |
  4625. |    |VALUES('whitehouse.gov','custom',PASSWORD('stupid'));                                 |
  4626. |    |mysql> INSERT INTO db                                                                 |
  4627. |    |(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,                        |
  4628. |    |Create_priv,Drop_priv)                                                                |
  4629. |    |VALUES                                                                                |
  4630. |    |('localhost','bankaccount','custom','Y','Y','Y','Y','Y','Y');                         |
  4631. |    |mysql> INSERT INTO db                                                                 |
  4632. |    |(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,                        |
  4633. |    |Create_priv,Drop_priv)                                                                |
  4634. |    |VALUES                                                                                |
  4635. |    |('whitehouse.gov','expenses','custom','Y','Y','Y','Y','Y','Y');                       |
  4636. |    |mysql> INSERT INTO db                                                                 |
  4637. |    |(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,                        |
  4638. |    |Create_priv,Drop_priv)                                                                |
  4639. |    |VALUES('%','customer','custom','Y','Y','Y','Y','Y','Y');                              |
  4640. |    |mysql> FLUSH PRIVILEGES;                                                              |
  4641. |    |Les trois premi√®res insertions ajoutent des lignes dans la table user pour autoriser  |
  4642. |    |la connexion de custom depuis les divers sites qu'il d√©sire, mais ne lui donne aucune |
  4643. |    |permission. (tous ses droits sont √† 'N'). Les trois insertions suivantes ajoutent des |
  4644. |    |lignes dans la table db pour donner des droits sur les bases bankaccount, expenses et |
  4645. |    |customer, mais uniquement pour des connexions avec des h√¥tes autoris√©s. Et, comme     |
  4646. |    |toujours lorsqu'on touche aux tables de droits, le serveur doit les recharger (avec   |
  4647. |    |FLUSH PRIVILEGES) pour les prendre en compte.                                         |
  4648. |    |Si vous d√©sirez donner un droit sp√©cifique √† un utilisateur donn√©e, mais depuis       |
  4649. |    |n'importe quel h√¥te, utilisez la commande GRANT suivante :                            |
  4650. |    |                                                                                      |
  4651. |    |mysql> GRANT ...                                                                      |
  4652. |    |ON *.*                                                                                |
  4653. |    |TO myusername@"%.mydomainname.com"                                                    |
  4654. |    |IDENTIFIED BY 'mypassword';                                                           |
  4655. |    |Pour faire la m√™me chose avec une attaque directe des tables, faites ceci :           |
  4656. |    |                                                                                      |
  4657. |    |mysql> INSERT INTO user VALUES ('%.mydomainname.com', 'myusername',                   |
  4658. |    |PASSWORD('mypassword'),...);                                                          |
  4659. |    |mysql> FLUSH PRIVILEGES;                                                              |
  4660. |    |Vous pouvez aussi utiliser xmysqladmin, mysql_webadmin et even xmysql pour ins√©rer,   |
  4661. |    |modifier des valeurs dans les tables de droits. Vous pouvez trouvez ces utilitaires √† |
  4662. |    |http://www.mysql.com/Contrib/.                                                        |
  4663. |    |6.12 Comment affecter les mots de passe                                               |
  4664. |    |Les exemples des sections pr√©c√©dentes illustre un principe important : lorsque vous   |
  4665. |    |enregistrez des mots de passe non vide avec les commandes INSERT ou UPDATE, vous devez|
  4666. |    |utiliser la fonction PASSWORD() pour l'encrypter. En effet, la table user conserve les|
  4667. |    |mots de passe sous forme crypt√©e, et non pas en clair. Si vous oubliez ceci, vous     |
  4668. |    |pouvez vous retrouver avec des mots de passes tels que :                              |
  4669. |    |                                                                                      |
  4670. |    |shell> mysql -u root mysql                                                            |
  4671. |    |mysql> INSERT INTO user (Host,User,Password)                                          |
  4672. |    |VALUES('%','jeffrey','biscuit');                                                      |
  4673. |    |mysql> FLUSH PRIVILEGES;                                                              |
  4674. |    |Le r√©sultat est que la valeur en clair 'biscuit' est enregistr√©e dans la table user.  |
  4675. |    |Lorsque l'utilisateur jeffrey va tenter de se connecter au serveur, le client mysql va|
  4676. |    |crypter le mot de passe qui lui est fourni avec PASSWORD(), et l'envoyer au serveur.  |
  4677. |    |Le serveur compare alors la valeur qui est stock√©es (qui est en clair 'biscuit') avec |
  4678. |    |la m√™me valeur, mais encrypt√©e (qui ne sera pas 'biscuit'). La comparaison √©choue, et |
  4679. |    |le serveur rejette al connexion.                                                      |
  4680. |    |                                                                                      |
  4681. |    |shell> mysql -u jeffrey -pbiscuit test                                                |
  4682. |    |Access denied                                                                         |
  4683. |    |Etant donn√© que les mots de passe doivent √™tre crypt√© lorsqu'ils sont ins√©r√© dans la  |
  4684. |    |table user, la commande INSERT doit √™tre sp√©cifi√© comme suit :                        |
  4685. |    |                                                                                      |
  4686. |    |mysql> INSERT INTO user (Host,User,Password)                                          |
  4687. |    |VALUES('%','jeffrey',PASSWORD('biscuit'));                                            |
  4688. |    |Vous devez utiliser la fonction PASSWORD() lorsque vous utilisez la clause SET        |
  4689. |    |PASSWORD:                                                                             |
  4690. |    |                                                                                      |
  4691. |    |mysql> SET PASSWORD FOR jeffrey@"%" = PASSWORD('biscuit');                            |
  4692. |    |Si vous ajoutez un mot de passe avec la commande GRANT ... IDENTIFIED BY ou avec la   |
  4693. |    |commande mysqladmin password, la fonction PASSWORD() n'est pas n√©cessaire. Ces deux   |
  4694. |    |m√©thodes crypte le mot de passe pour vous :                                           |
  4695. |    |                                                                                      |
  4696. |    |mysql> GRANT USAGE ON *.* TO jeffrey@"%" IDENTIFIED BY 'biscuit';                     |
  4697. |    |or                                                                                    |
  4698. |    |                                                                                      |
  4699. |    |shell> mysqladmin -u jeffrey password biscuit                                         |
  4700. |    |Note: PASSWORD() dispose d'une encryption qui n'est pas la m√™me que sous Unix. Il ne  |
  4701. |    |faut pas supposer que le mot de passe Unix et MySQL sont les m√™mes, m√™me si PASSWORD()|
  4702. |    |retourne la m√™me valeur que celle qui est stock√©e dans le fichier de mot de passe de  |
  4703. |    |Unix. 6.2 Noms et mot de passe des d'utilisateurs MySQL.                              |
  4704. |    |6.13 Causes des erreurs "Access denied"                                               |
  4705. |    |L'erreur " Access denied " (acc√®s refus√©) peut survenir lors d'une tentative de       |
  4706. |    |connexion √† MySQL. Voici une liste de probl√®me type qui peuvent √™tre la cause d'un tel|
  4707. |    |comportement, et leur solution :                                                      |
  4708. |    |Avez vous ex√©cut√© le script mysql_install_db apr√®s avoir install√© MySQL, pour cr√©er   |
  4709. |    |les premi√®res lignes dans les tables de droits ? Si non, faites le. 6.10 Droits       |
  4710. |    |initiaux. Testez les droits initaux en ex√©cutant la commande suivante :               |
  4711. |    |                                                                                      |
  4712. |    |shell> mysql -u root test                                                             |
  4713. |    |Le serveur doit vous autoriser la connexion sans erreur. Assurez vous aussi que vous  |
  4714. |    |avez un fichier appel√© ``user.ISD'' dans le dossier de MySQL. G√©n√©ralement, il se     |
  4715. |    |trouve l√† : ``PATH/var/mysql/user.ISD'', Avec PATH qui repr√©sente le chemin jusqu'√† la|
  4716. |    |racine de l'installation de MySQL.                                                    |
  4717. |    |Apr√®s une installation, il vaut mieux vous connecter au serveur, et mettre en place   |
  4718. |    |des utilisateurs et leur permissions.                                                 |
  4719. |    |                                                                                      |
  4720. |    |shell> mysql -u root mysql                                                            |
  4721. |    |Le serveur autorisera la connexion car l'utilisateur MySQL root n'a pas de mot de     |
  4722. |    |passe √† l'origine. Etant donn√© que cela cr√©e un gros risque au niveau de la s√©curit√©  |
  4723. |    |de la base, affecter un mot de passe √† l'utilisateur root doit √™tre une priorit√©      |
  4724. |    |lorsque vous cr√©ez les utilisateurs de votre serveur. Si, lors de la connexion en tant|
  4725. |    |que root , vous obtenez l'erreur suivante :                                           |
  4726. |    |                                                                                      |
  4727. |    |Access denied for user: '@unknown' to database mysql                                  |
  4728. |    |Cela signifie que vous n'avez pas de ligne dans la table user avec la valeur 'root'   |
  4729. |    |dans la colonne User et que mysqld n'a pas pu trouver votre h√¥te dans cette table.    |
  4730. |    |Dans ce cas, vous devez red√©marrer le serveur avec l'option --skip-grant-tables et    |
  4731. |    |√©diter les fichiers ``/etc/hosts'' ou ``\windows\hosts'' pour ajouter une ligne pour  |
  4732. |    |votre h√¥te.                                                                           |
  4733. |    |Si vous avez fait la mise √† jour depuis une version ant√©rieure √† 3.22.11 vers une     |
  4734. |    |version 3.22.11 ou plus r√©cente, avez vous ex√©cut√© le script                          |
  4735. |    |mysql_fix_privilege_tables? Si non, faites le. La structure des tables de droits a    |
  4736. |    |√©vol√© avec la version 3.22.11 lorsque la commande GRANT a √©t√© ajout√©e.                |
  4737. |    |Si vous avez modifi√© directement la table de droit (avec les commandes INSERT ou      |
  4738. |    |UPDATE) et que vos modifications n'ont pas √©t√© prise en compte, n'oubliez pas qu'il   |
  4739. |    |faut ex√©cuter une commande FLUSH PRIVILEGES ou mysqladmin flush-privileges pour forcer|
  4740. |    |le serveur √† recharger les nouvelles valeurs. Sinon, vos modifications n'auront pas   |
  4741. |    |d'effet jusqu'au prochain red√©marrage du serveur. N'oubliez pas qu'apr√®s avoir modifi√©|
  4742. |    |votre mot de passe root, vous n'avez pas √† le re entrer jusqu'√† ce que vous ex√©cutiez |
  4743. |    |la commande FLUSH PRIVILEGES car le serveur n'a pas encore not√© que vous l'aviez      |
  4744. |    |modifi√© !                                                                             |
  4745. |    |Si les droits semblent changer durant une session, c'est peut √™tre qu'un super        |
  4746. |    |utilisateur les a chang√©. Recharger les droits affecte non seulement les nouvelles    |
  4747. |    |connexions, mais aussi les connexions en cours, comme pr√©cis√© dans section 6.9 Prise  |
  4748. |    |en compte des modifications de droits.                                                |
  4749. |    |A fin de tests, d√©marrez le serveur mysqld avec l'option --skip-grant-tables. Ensuite,|
  4750. |    |vous pouvez changer les tables de droits MySQL et utiliser le script mysqlaccess pour |
  4751. |    |v√©rifier si les modifications ont bien l'effet d√©sir√©. Lorsque vous avez fini, lancez |
  4752. |    |la commande flush-privileges pour forcer l'utilisation des nouvelles tables de droits.|
  4753. |    |Note: Recharger les tables annule l'option --skip-grant-tables. Cela vous permet de   |
  4754. |    |dire au serveur quand commencer √† utiliser les droits, sans le red√©marrer.            |
  4755. |    |Si vous avez des probl√®mes d'acc√®s avec un programme Perl, Python ou ODBC, essayez de |
  4756. |    |vous connecter au serveur avec mysql -u user_name nom_base_de_donnees ou mysql -u     |
  4757. |    |user_name -pyour_pass nom_base_de_donnees. Si vous etes capable de vous connecter avec|
  4758. |    |le client mysql, c'est qu'il y a un probl√®me avec votre programme, et non pas dans les|
  4759. |    |droits d'acc√®s.. (Notez aussi qu'il n'y a pas d'espace entre l'option -p et le mot de |
  4760. |    |passe. Alternativement, vous pouvez utiliser --password=your_pass pour sp√©cifier votre|
  4761. |    |mot de passe.)                                                                        |
  4762. |    |Si vous √™tes bloqu√© par votre mot de passe, pensez √† utiliser la fonction PASSWORD()  |
  4763. |    |pour changer de mot de passe avec les commandes INSERT, UPDATE ou SET PASSWORD. Cette |
  4764. |    |fonction n'est pas n√©cessaire avec la commande GRANT ... INDENTIFIED BY ou avec la    |
  4765. |    |syntaxe mysqladmin password. Reportez vous √† la section Passwords                     |
  4766. |    |localhost est un synonyme qui d√©signe votre machine locale, ou l'h√¥te de connexion par|
  4767. |    |d√©faut. Cependant, les connexions √† localhost ne sont pas valables si vous utilisez   |
  4768. |    |MIT-pthreads (Les connexions localhost utilisent les sockets Unix, qui ne sont pas    |
  4769. |    |support√©es par MIT-pthreads). Pour contourner le probl√®me sur ces syst√®mes, il        |
  4770. |    |pr√©f√©rable d'utiliser l'option --host pour sp√©cifier explicitement le nom de l'h√¥te.  |
  4771. |    |Cela va forcer le type de la connexion √† TCP/IP. Dans ce cas, vous devez utiliser le  |
  4772. |    |vrai nom d'h√¥te de votre machine, et l'inscrire dans la table user (Cela reste vrai   |
  4773. |    |m√™me si vous ex√©cutez un programme client sur la m√™me machine que le serveur).        |
  4774. |    |Si vous avez l'erreur Access denied lors d'une connexion au serveur avec l'option -u  |
  4775. |    |user_name nom_base_de_donnees, vous pouvez avoir un probl√®me avec la talbe user.      |
  4776. |    |V√©rifiez ceci en ex√©cutant la commande mysql -u root mysql puis la commande sui vante |
  4777. |    |:                                                                                     |
  4778. |    |                                                                                      |
  4779. |    |mysql> SELECT * FROM user;                                                            |
  4780. |    |Le r√©sultat devrait contenir une ligne dont les colonnes Host et User correspondent au|
  4781. |    |nom d'h√¥te de votre ordinateur et au nom d'utilisateur MySQL.                         |
  4782. |    |Le message Access denied appara√Ætra si vous essayez de vous connecter, le message     |
  4783. |    |d'erreur affichera l'adresse de l'h√¥te de connexion, le nom d'utilisateur et si vous  |
  4784. |    |utilisez un mot de passe. Normalement, il ne devrait y avoir qu'une ligne de la user  |
  4785. |    |qui corresponde exactement au nom d'h√¥te de votre ordinateur et au nom d'utilisateur  |
  4786. |    |Si vous obtenez l'erreur ci dessous lors de la connexion au serveur depuis une autre  |
  4787. |    |machine que celle qui heberge le serveur MySQL, c'est qu'il manque une ligne dans la  |
  4788. |    |table user pour d√©crire votre machine h√¥te :                                          |
  4789. |    |                                                                                      |
  4790. |    |Host ... is not allowed to connect to this MySQL server                               |
  4791. |    |Vous pouvez r√©gler ce probl√®me en utilisant l'utilitaire mysql (sur la machine server |
  4792. |    |! !) pour ajouter une ligne dans la table user pour le nom d'h√¥te de votre ordinateur |
  4793. |    |et le nom d'utilisateur. Si vous ne fonctionnez pas sous MySQL 3.22 et que vous ne    |
  4794. |    |savez pas quelle adresse IP ou quel nom d'h√¥te est celui de votre machine, il vaut    |
  4795. |    |mieux ajouter une ligne avec '%' dans la colonne Host et red√©marrer le serveur avec   |
  4796. |    |l'option --log option. Apr√®s avoir tent√© de vous connecter depuis la machine client,  |
  4797. |    |l'historique vous indiquera qui s'est r√©ellement connect√©. Vous pouvez alors remplacer|
  4798. |    |la ligne avec '%' de la table user par une ligne plus sp√©cifique. Sinon, cela peut    |
  4799. |    |cr√©er un trou de s√©curit√©.                                                            |
  4800. |    |Si le test avec mysql -u root test fonctionne mais que mysql -h your_hostname -u root |
  4801. |    |test retourne une erreur Access denied, alors c'est que vous n'avez pas entrer le nom |
  4802. |    |de votre h√¥te dans la table user. Un probl√®me r√©curent est que la colonne Host de la  |
  4803. |    |table user contient un nom d'h√¥te g√©n√©ral, mais la r√©solution de nom retourne un nom  |
  4804. |    |de domaine complet, et vice-versa. Par exemple, si vous avec une ligne qui contient   |
  4805. |    |'tcx' dans la table user, mais que votre DNS dit √† MySQL que votre nom d'h√¥te est     |
  4806. |    |'tcx.subnet.se', la ligne ne correspondra pas. Essayez d'ajouter une ligne dans la    |
  4807. |    |table user qui contienne l'adresse IP num√©rique de votre h√¥te, dans la colonne Host.  |
  4808. |    |(Alternativement vous pouvez aussi ajouter une ligne dans la table user avec une      |
  4809. |    |valeur dans la colonne Host qui contienne un caract√®re joker (par exemple, 'tcx.%').  |
  4810. |    |Cependant, c'est une pratique non s√©curis√©e, qui peut provoquer des probl√®mes de      |
  4811. |    |s√©curit√©.                                                                             |
  4812. |    |Si mysql -u user_name test fonctionne mais mysql -u user_name                         |
  4813. |    |other_nom_base_de_donnees ne fonctionne pas, c'est que vous n'avez pas d'entr√©e pour  |
  4814. |    |la colonne other_nom_base_de_donnees de la table db.                                  |
  4815. |    |Si mysql -u user_name nom_base_de_donnees fonctionne lorsqui'il est ex√©cut√© sur la    |
  4816. |    |machine server, mais que mysql -u host_name -u user_name nom_base_de_donnees ne       |
  4817. |    |fonctionne pas lorsqu'il est utilis√© sur une machine client, c'est que la machine     |
  4818. |    |client n'est pas list√©e dans la table user ou la table db.                            |
  4819. |    |Si vous n'arrivez pas √† vous defaire de l'erreur Access denied, effacez toutes les    |
  4820. |    |lignes de la table user qui poss√®de un joker (``%'' ou ``_')'dans la colonne Host. Une|
  4821. |    |erreur r√©currente est d'ins√©rer une ligne du type Host='%' et User='quidam', en       |
  4822. |    |pensant que cela va vous permettre de vous connecter depuis la machine localhost. La  |
  4823. |    |raison qui fait que ceci ne fonctionne pas est que les droits par d√©faut contiennent  |
  4824. |    |une ligne qui est Host='localhost' et User=''. Or, la ligne qui a Host ='localhost'   |
  4825. |    |est plus sp√©cifique que '%', et donc, sera utilis√©e de pr√©f√©rence √† celle utilis√©e    |
  4826. |    |lors de la connexion de depuis localhost! La procedure correcte est d'ins√©rer un      |
  4827. |    |deuxi√®me ligne avec Host='localhost' et User='some_user', ou d'effacer les lignes avec|
  4828. |    |Host='localhost' et User=''.                                                          |
  4829. |    |Si vous avez l'erreur suivante, c'est que vous avez un probl√®me avec la table db ou   |
  4830. |    |host:                                                                                 |
  4831. |    |                                                                                      |
  4832. |    |Access to database denied                                                             |
  4833. |    |Si l'entr√©e s√©lectionn√©e dans la table db a une colonne Host vide, assurezvous qu'il y|
  4834. |    |a au moins une entr√©e correspondante dans la table host qyu sp√©cifie √† quel h√¥te      |
  4835. |    |s'applique ces droits. Si vous avez une erreur en utilisant la commande SELECT ...    |
  4836. |    |INTO OUTFILE or LOAD DATA INFILE, c'est que vous n'avez peut √™tre pas les droits file.|
  4837. |    |                                                                                      |
  4838. |    |Rappelez vous que les programmes clients utilisent des param√®tres par d√©faut qui sont |
  4839. |    |stock√©s dans des fichiers de configuration ou des variables d'environnement. Si un    |
  4840. |    |client semble ne pas envoyer les bons param√®tres lorsque vous ne les sp√©cifiez pas,   |
  4841. |    |allez v√©rifier les informations stock√©es dans le fichier ``.my.cnf'' de votre dossier |
  4842. |    |racine, ou les variables d'environnment. Vous pouvez aussi v√©rifier les param√®tres    |
  4843. |    |dans les fichiers de configuration de MySQL, mais il est tr√®s improbable que des      |
  4844. |    |param√®tres de connexion soient enregistr√©s l√†. 4.15.4 Fichier d'options.              |
  4845. |    |Si tout ce qui pr√©c√®de a √©chou√©, lancez le d√©mon mysqld avec les options de debugging |
  4846. |    |(par exemple, --debug=d,general,query). Cette option affichera les h√¥tes et nom       |
  4847. |    |d'utilisateur des connexions, ainsi que des informations concernant les commandes     |
  4848. |    |ex√©cut√©es. Reportez vous √† la section G.1 Debugguer un serveur MySQL.                 |
  4849. |    |Si vous avez vraiment tout tent√©, et que vous pensez qu'il vous faut le rapporter √† la|
  4850. |    |liste de diffusion (en anglais), n'oubliez jamais de fournir un dump des tables de    |
  4851. |    |droits de MySQL. Vous pouvez cr√©er ce dump avec l'utilitaire mysqldump mysql. Comme   |
  4852. |    |toujours, pensez √† poster votre probl√®me avec l'utilitaire mysqlbug. Dans certains    |
  4853. |    |cas, vous devrez red√©marrer mysqld avec l'option --skip-grant-tables pour pouvoir     |
  4854. |    |faire le dump.                                                                        |
  4855. |    |6.14 Comment prot√©ger MySQL contre les hackers                                        |
  4856. |    |Lorsque vous vous connectez √† un serveur MySQL, vous utiliserez en r√®gle g√©n√©rale un  |
  4857. |    |mot de passe. Le mot de passe sera transmis crypt√© lors de la connexion, et non pas en|
  4858. |    |clair.                                                                                |
  4859. |    |Toutes les informations suivantes seront transmises en clair, ce qui fait que         |
  4860. |    |quiconque observe la connexion peut lire les informations. Si vous √™tes concern√© par  |
  4861. |    |les probl√®mes de s√©curit√©, vous pouvez utiliser le protocole compress√© (√† partir de   |
  4862. |    |MySQL 3.22) pour rendre les choses plus difficile. Pour complexifier encore la        |
  4863. |    |lecture, vous pouvez installer ssh (http://www.cs.hut.fi/ssh). Ce protocol fourni un  |
  4864. |    |cryptage de la connexion TCP/IP entre le client MySQL et me serveur MySQL.            |
  4865. |    |Pour s√©curiser un syst√®me MySQL, il est fortement recommand√© de suivre les            |
  4866. |    |recommandations suivantes :                                                           |
  4867. |    |Utilisez des mots de passe pour TOUT les utilisateurs MySQL. N'oubliez pas qu'il est  |
  4868. |    |tr√®s facile de se connecter √† la place d'un autre avec la commande mysql -u other_user|
  4869. |    |nom_base_de_donnees si other_user n'a pas de mot de passe. C'est une strat√©gie        |
  4870. |    |standard dans les applications clients/serveur. Vous pouvez changer les mots de passe |
  4871. |    |de tous les utilisateurs en √©ditant le script mysql_install_db puis en l'ex√©cutant, ou|
  4872. |    |bien avec la commande root suivante :                                                 |
  4873. |    |                                                                                      |
  4874. |    |shell> mysql -u root mysql                                                            |
  4875. |    |mysql> UPDATE user SET Password=PASSWORD('new_password')                              |
  4876. |    |WHERE user='root';                                                                    |
  4877. |    |mysql> FLUSH PRIVILEGES;                                                              |
  4878. |    |N'utilisez pas MySQL comme un d√©mon du root Unix. mysqld peut √™tre ex√©cut√© par        |
  4879. |    |n'importe quel utilisateur. Vous pouvez aussi cr√©er un nouvel utilisateur mysql       |
  4880. |    |augmenter la s√©curit√©. Si vous utilisez mysqld √† partir d'un compte Unix autre que le |
  4881. |    |root, vous n'avez pas √† changer l'utilisateur the root dans la table user, car les    |
  4882. |    |noms d'utilisateur MySQL n'ont rien √† voir avec ceux d'Unix. Vous pouvez √©diter le    |
  4883. |    |script mysql.server pour lancer mysqld avec un autre utilisateur. G√©n√©ralement, on le |
  4884. |    |fait avec la commande su. Pour plus de d√©tails, @pref{Changing MySQL user}.           |
  4885. |    |Si vous avez mis le mot de passe du root Unix dans le script mysql.server, assurez    |
  4886. |    |vous que ce fichier n'est lisible que par le root.                                    |
  4887. |    |V√©rifiez que l'utilisateur Unix qui ex√©cute mysqld est le seul √† avoir les droits     |
  4888. |    |d'√©criture / lecture dans le dossier des bases de donn√©es.                            |
  4889. |    |Ne donnez le droit de process que tr√®s parcimonieusement. L'affichage de la fonction  |
  4890. |    |mysqladmin processlist d√©voile le texte de toutes les commandes en cours d'ex√©cution, |
  4891. |    |ce qui fait que tout ceux qui ont ce droit, ont vue sur les commandes du type UPDATE  |
  4892. |    |user SET password=PASSWORD('not_secure'). mysqld garde toujours une connexion de libre|
  4893. |    |pour les utilisateurs qui ont le droit de process, afin que le root MySQL puisse      |
  4894. |    |toujours se connecter et s'assurer du bon fonctionnement des connexions en cours.     |
  4895. |    |Ne donnez le droit de file que tr√®s parcimonieusement donnez. Quiconque a un tel droit|
  4896. |    |peut √©crire un fichier n'importe ou dans le syst√®me de fichier, et notamment dans les |
  4897. |    |tables de droits de mysqld! Pour s√©curiser un peu ceci, tous les fichiers g√©n√©r√© par  |
  4898. |    |SELECT ... INTO OUTFILE ne sont lisibles par tous, mais non modifiables. Le droit de  |
  4899. |    |file peut aussi √™tre utilis√© pour lire un fichier quelconque sur le serveur. Cela     |
  4900. |    |permet notamment de lire le fichier ``/etc/passwd'' dans une table, et de le lire avec|
  4901. |    |SELECT.                                                                               |
  4902. |    |Si vous n'avez pas confiance dans votre serveur DNS, il vaut mieux utiliser les       |
  4903. |    |adresse IP num√©riques, √† la place des noms d'h√¥tes. En principe, l'option --secure de |
  4904. |    |mysqld devrait √™tre suffisante pour s√©curiser les noms d'h√¥tes. Dans toues les cas,   |
  4905. |    |m√©fiez vous des jokers dans les noms d'h√¥tes.                                         |
  4906. |    |Les options suivantes affectent la s√©curit√© :                                         |
  4907. |    |‚Ä¢  --secure Les adresse IP retourn√©es par l'appel syst√®me gethostbyname() sont        |
  4908. |    |v√©rifi√©es pour s'assurer qu'elle correspondent bien √† l'h√¥te original. Cela rend plus |
  4909. |    |difficile de simuler un h√¥te. Cette option effectue aussi un nettoyage hygi√©nique des |
  4910. |    |h√¥tes. Cette option a √©t√© enlev√©e par d√©faut dans la version MySQL 3.21 car elle peut |
  4911. |    |ralentir le serveur, √† cause du temps de r√©solution. MySQL 3.22 conserve les noms     |
  4912. |    |d'h√¥tes qu'il a d√©j√† r√©solu dans un cache.                                            |
  4913. |    |‚Ä¢  --skip-grant-tables Cette option indique au serveur qu'il ne doit pas utiliser les |
  4914. |    |droits enregistr√©s. Cela donne √† tous un acc√®s complet √† toutes les bases. (Vous      |
  4915. |    |pouvez aussi charger les tables d'un serveur en fonctionnement avec la commande       |
  4916. |    |mysqladmin reload.)                                                                   |
  4917. |    |‚Ä¢  --skip-name-resolve Les noms d'h√¥tes ne sont pas r√©solus. Toutes les lignes de la  |
  4918. |    |table Host doivent contenir des valeurs nu√©mriques, ou bien localhost.                |
  4919. |    |‚Ä¢  --skip-networking N'accepte pas les connexions TCP/. Toutes les connexions √† mysqld|
  4920. |    |doivent √™tre faites avec les sockets Unix. Cette option n'est pas disponibles pour les|
  4921. |    |syst√®mes qui utilisent les MIT-pthreads, car MIT-pthreads ne supporte pas les sockets |
  4922. |    |Unix.                                                                                 |
  4923. |    |7 Programmation MySQL                                                                 |
  4924. |    |7.1 Syntaxe des cha√Ænes et nombres                                                    |
  4925. |    |7.1.1 Cha√Ænes                                                                         |
  4926. |    |Une cha√Æne est une s√©quence de caract√®res, entour√©e par des guillemets simples (`''') |
  4927. |    |ou doubles(`""'). Par exemple :                                                       |
  4928. |    |                                                                                      |
  4929. |    |'une cha√Æne'                                                                          |
  4930. |    |"une autre cha√Æne"                                                                    |
  4931. |    |A l'int√©rieur d'une cha√Æne, on trouve des s√©quences sp√©ciales. Celles-ci commencent   |
  4932. |    |avec le caract√®re backslash (``\''), dit aussi caract√®re d'√©chappement. MySQL         |
  4933. |    |reconna√Æt les s√©quences suivantes :                                                   |
  4934. |    |Within a string, certain sequences have special meaning. Each of these sequences      |
  4935. |    |begins with a backslash known as the escape character. MySQL recognizes the following |
  4936. |    |escape sequences:                                                                     |
  4937. |    |‚Ä¢  \0 ASCII 0 (NUL) le caract√®re nul.                                                 |
  4938. |    |‚Ä¢  \n Une nouvelle ligne.                                                             |
  4939. |    |‚Ä¢  \t Une tabulation.                                                                 |
  4940. |    |‚Ä¢  \r Un retour chariot.                                                              |
  4941. |    |‚Ä¢  \b Un effacement.                                                                  |
  4942. |    |‚Ä¢  \' Un guillemet simple (``''').                                                    |
  4943. |    |‚Ä¢  \" Un guillemet double (``"'').                                                    |
  4944. |    |‚Ä¢  \\ Un backslash (``\'').                                                           |
  4945. |    |‚Ä¢  \% Un pourcentage ``%''. Cela permet de rechercher le caract√®re `%' dans un        |
  4946. |    |contexte ou il pourrait etre consid√©r√© comme un caract√®re sp√©cial.                    |
  4947. |    |‚Ä¢  \_ Un soulign√© ``_'' Cela permet de rechercher le caract√®re ``_'dans un contexte ou|
  4948. |    |il pourrait etre consid√©r√© comme un caract√®re sp√©cial.'                               |
  4949. |    |Il y a plusieurs fa√ßons d'introduire des guillemets dans une cha√Æne.                  |
  4950. |    |Un guillemet simple ``''' dans une cha√Æne √† guillemet simple peut s'√©crire : ``''''.  |
  4951. |    |Un guillemet double ``"''dans une cha√Æne √† double simple peut s'√©crire : ``""''.      |
  4952. |    |On peut ajouter le caract√®re d'√©chappement avant un guillemet : ``\''.                |
  4953. |    |Un guillemet simple ``''' dans une cha√Æne √† guillemet double ne requiert aucun        |
  4954. |    |traitement sp√©cial.                                                                   |
  4955. |    |Un guillemet double ``"'' dans une cha√Æne √† guillemet simple ne requiert aucun        |
  4956. |    |traitement sp√©cial.                                                                   |
  4957. |    |La commande SELECT ci-dessous montre comment fonctionne les guillemets et le caract√®re|
  4958. |    |d'√©chappement.                                                                        |
  4959. |    |mysql> SELECT 'bonjour', '"bonjour"', '""bonjour""', 'bonj''our', '\'bonjour';        |
  4960. |    |                                                                                      |
  4961. |    |+---------+-----------+-------------+----------+----------+                           |
  4962. |    || bonjour | "bonjour" | ""bonjour"" | bonj'our | 'bonjour |                           |
  4963. |    |+---------+-----------+-------------+----------+----------+                           |
  4964. |    |mysql> SELECT "bonjour", "'bonjour'", "''bonjour''", "bonj""our", "\"bonjour";        |
  4965. |    |+---------+-----------+-------------+----------+----------+                           |
  4966. |    || bonjour | 'bonjour' | ''bonjour'' | bonj"our | "bonjour |                           |
  4967. |    |+---------+-----------+-------------+----------+----------+                           |
  4968. |    |                                                                                      |
  4969. |    |mysql> SELECT "Voici\nQuatre\nLignes\nDistinctes";                                    |
  4970. |    |+--------------------+                                                                |
  4971. |    || Voici                                                                               |
  4972. |    |Quatre                                                                                |
  4973. |    |Lignes                                                                                |
  4974. |    |Distinctes |                                                                          |
  4975. |    |+--------------------+                                                                |
  4976. |    |Pour ajouter des valeurs binaires dans un BLOB, les caract√®res suivants doivent √™tre  |
  4977. |    |repr√©sent√© par des s√©quences sp√©ciales :                                              |
  4978. |    |‚Ä¢  NUL ASCII 0. Repr√©sentation : ``\0'' (un backslash et un caract√®re ASCII ``0'' ).  |
  4979. |    |‚Ä¢  \ ASCII 92, backslash. Repr√©sentation : ``\\''.                                    |
  4980. |    |‚Ä¢  ' ASCII 39, guillemet simple. Repr√©sentation : ``\'''.                             |
  4981. |    |‚Ä¢  " ASCII 34, guillemet double. Repr√©sentation : ``\"''.                             |
  4982. |    |‚Ä¢  De pr√©f√©rence, on utilisera une s√©quence d'√©chappement pour toute cha√Æne qui       |
  4983. |    |contient un des caract√®res sp√©ciaux ci-dessus.                                        |
  4984. |    |7.1.2 Nombres                                                                         |
  4985. |    |‚Ä¢  Les entiers sont repr√©sent√©s comme une s√©quence de chiffres. Les nombres r√©el      |
  4986. |    |utilise le point (``.') comme s√©parateur d√©cimal. Les entiers et les r√©els peuvent    |
  4987. |    |√™tre pr√©c√©d√©s par le signe moins (`-'), pour indiquer un nombre n√©gatif.'             |
  4988. |    |‚Ä¢  Exemples d'entiers :                                                               |
  4989. |    |                                                                                      |
  4990. |    |1221                                                                                  |
  4991. |    |0                                                                                     |
  4992. |    |-32                                                                                   |
  4993. |    |‚Ä¢  Exemples de nombres r√©els :                                                        |
  4994. |    |                                                                                      |
  4995. |    |294.42                                                                                |
  4996. |    |-32032.6809e+10                                                                       |
  4997. |    |148.00                                                                                |
  4998. |    |‚Ä¢  Lorsqu'un nombre entier est utilis√© avec un nombre r√©el, il est consid√©r√© lui      |
  4999. |    |aussi, comme un nombre r√©el.                                                          |
  5000. |    |7.1.3 Valeurs h√©xadecimales                                                           |
  5001. |    |MySQL supporte les valeurs hexad√©cimales. Dans un contexte num√©rique, elles se        |
  5002. |    |comportent comme des entiers (pr√©cision 64bits). Dans un contexte de cha√Ænes, elles se|
  5003. |    |comportent comme des cha√Ænes binaires dont chaque paire de digits seront converti en  |
  5004. |    |caract√®re.                                                                            |
  5005. |    |                                                                                      |
  5006. |    |mysql> SELECT 0xa+0                                                                   |
  5007. |    |-> 10                                                                                 |
  5008. |    |mysql> select 0x5061756c;                                                             |
  5009. |    |-> Paul                                                                               |
  5010. |    |Les cha√Ænes hexad√©cimales sont souvent utilis√©es avec ODBC pour donner des valeurs aux|
  5011. |    |colonnes BLOB.                                                                        |
  5012. |    |7.1.4 La valeur NULL                                                                  |
  5013. |    |‚Ä¢  La valeur NULL signifie : ``aucune information''. Cette valeur est diff√©rente de 0 |
  5014. |    |ou de la cha√Æne vide.                                                                 |
  5015. |    |‚Ä¢  NULL est parfois repr√©sent√© par \N quand on utilise un fichier d'import ou d'export|
  5016. |    |(LOAD DATA INFILE, SELECT ... INTO OUTFILE). Cf section LOAD DATA.                    |
  5017. |    |7.1.5 Noms de base de donn√©es, table, index, column et alias                          |
  5018. |    |‚Ä¢  Les noms port√©s par les base de donn√©es, les tables, les index, les colonnes et les|
  5019. |    |alias suivent tous les m√™mes r√®gle dans MySQL:                                        |
  5020. |    |                                                                                      |
  5021. |    |Un nom est constitu√© de caract√®res alphanum√©riques et des caract√®res ``_'' et ``$''.  |
  5022. |    |                                                                                      |
  5023. |    |Le nom d'une base de donn√©es, d'une table, d'un index ou d'une colonne peut avoir     |
  5024. |    |jusqu'√† 64 caract√®res.                                                                |
  5025. |    |Un nom peut commencer avec n'importe quel caract√®re autoris√©. En particulier, un nom  |
  5026. |    |peut commencer avec un nombre (ce qui n'est pas toujours le cas dans de nombreuses    |
  5027. |    |bases de donn√©es). Cependant, un nom ne peut pas contenir uniquement des nombres.     |
  5028. |    |Il est pr√©f√©rable de ne pas utiliser de noms tels que 1e, car un expression telle que |
  5029. |    |1e est ambigu√´. Le nom peut √™tre interpr√©t√© comme une expression (1e + 1) ou comme le |
  5030. |    |nombre 1e+1.                                                                          |
  5031. |    |Il est interdit d'utiliser le point dans les noms, car il est d√©j√† utilis√© pour       |
  5032. |    |sp√©cifier les noms des colonnes (cf ci dessous).                                      |
  5033. |    |Avec MySQL, il est possible d'acc√©der aux colonnes d'une table avec les expressions   |
  5034. |    |suivantes : Il n'est pas n√©cessaire de pr√©ciser Nom_tab ou Nom_base. Nom_tab pour     |
  5035. |    |faire r√©f√©rence √† un nom de colonne, √† moins que cela puisse √™tre ambigu√´. Par        |
  5036. |    |exemple, si les tables t1 et t2 contiennent chacune la colonne c, et que lors d'un    |
  5037. |    |SELECT, les deux tables soient utilis√©es. Dans ce cas, c est ambigu√´, car elle n'est  |
  5038. |    |pas unique dans les tables utilis√©es, et il faut alors pr√©ciser la colonne en         |
  5039. |    |pr√©cisant t1.c et t2.c. De la m√™me mani√®re, si deux bases de donn√©es contiennent      |
  5040. |    |chacune une table nomm√©e t, il faudra pr√©ciser la base de donn√©es utilis√©e, en notant |
  5041. |    |: db1.t.col1 et db2.t.col2. Dans la syntaxe .Nom_tab. Nom_col, on suppose que la table|
  5042. |    |Nom_tab est disponible dans la base de donn√©es courante. Cette syntaxe est autoris√©e  |
  5043. |    |pour assurer la compatibilit√© avec ODBC, car certains programmes compatible ODBC      |
  5044. |    |ajoute le pr√©fixe point ``.'' aux noms des tables.                                    |
  5045. |    |7.1.5.1 Sensibilit√© des noms √† la casse                                               |
  5046. |    |‚Ä¢  Dans MySQL, les base de donn√©es et les tables correspondent √† des dossiers et      |
  5047. |    |fichiers. Par cons√©quent, la sensibilit√© √† la casse du syst√®me d'exploitation         |
  5048. |    |sous-jacent d√©termine celle de MySQL. Par exemple, les noms de base de donn√©es et de  |
  5049. |    |tables seront sensible √† la casse sous Unix, et pas sous Windows.                     |
  5050. |    |‚Ä¢  N.B.: Bien que les noms de base de donn√©es et de table soient insensible √† la      |
  5051. |    |casse, sous Windows 32bits, il est pr√©f√©rable de toujours utiliser la m√™me casse pour |
  5052. |    |se r√©f√©rer √† un objet dans une m√™me requ√™te. La requ√™te suivante ne fonctionnera pas, |
  5053. |    |car on utilise la m√™me table avec deux noms diff√©rents : ma_table et MA_TABLE.        |
  5054. |    |                                                                                      |
  5055. |    |                                                                                      |
  5056. |    |SELECT * FROM ma_table WHERE MA_TABLE.col=1;                                          |
  5057. |    |‚Ä¢  Dans tous les cas, les noms de colonnes sont insensibles √† la casse.               |
  5058. |    |‚Ä¢  Les noms d'alias sont sensibles √† la casse. La requ√™te suivante ne fonctionnera    |
  5059. |    |pas, car elle utilise le m√™me alias, sous la forme : a et A.                          |
  5060. |    |                                                                                      |
  5061. |    |                                                                                      |
  5062. |    |mysql> SELECT Nom_col FROM Nom_table AS a                                             |
  5063. |    |WHERE a.Nom_col = 1 OR A. Nom_col = 2;                                                |
  5064. |    |‚Ä¢  Les alias sur une colonnes sont insensibles √† la casse.                            |
  5065. |    |7.2 Types de colonnes                                                                 |
  5066. |    |‚Ä¢  MySQL dispose d'un grand nombre de type de colonnes. Ces types peuvent √™tre        |
  5067. |    |regroup√©s en trois cat√©gories : les types num√©riques, les types date et heure, et les |
  5068. |    |types cha√Ænes de caract√®res. Ce paragraphe pr√©sente les diff√©rents types disponibles  |
  5069. |    |et leur tailles respectives, puis il d√©taille les caract√©ristiques de chaque          |
  5070. |    |cat√©gorie. La pr√©sentation des types est intentionnellement br√®ves : les descriptions |
  5071. |    |d√©taill√©es fourniront toutes les informations n√©cessaires pour un type particulier,   |
  5072. |    |comme par exemple les formats autoris√©s pour chaque colonne.                          |
  5073. |    |‚Ä¢  Voici la liste des types de colonnes utilis√©s par MySQL. Les codes suivants sont   |
  5074. |    |utilis√© durant les descriptions :                                                     |
  5075. |    |‚Ä¢  M Indique la taille maximale d'affichage. La taille maximale autoris√©e par d√©faut  |
  5076. |    |est 255.                                                                              |
  5077. |    |‚Ä¢  D S'applique aux types √† virgule flottante, et pr√©cise le nombre de chiffre apr√®s  |
  5078. |    |la virgule.                                                                           |
  5079. |    |Crochets (``['' et ``]'') indique que cet argument est optionnel.                     |
  5080. |    |NB : Il est toujours possible de sp√©cifier ZEROFILL pour une colonne. MySQL ajoutera  |
  5081. |    |alors automatiquement l'attribut UNSIGNED √† la colonne.                               |
  5082. |    |‚Ä¢  TINYINT[(M)] [UNSIGNED] [ZEROFILL] Un tr√®s petit entier. Sign√©, il couvre          |
  5083. |    |l'intervalle -128 √† 127 ; non sign√©, il couvre 0 √† 255.                               |
  5084. |    |‚Ä¢  SMALLINT[(M)] [UNSIGNED] [ZEROFILL] Un petit entier. Sign√©, il couvre l'intervalle |
  5085. |    |-32768 √† 32767; non sign√©, il couvre 0 √† 65535.                                       |
  5086. |    |‚Ä¢  MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] Un entier de taille interm√©diaire. Sign√©, il  |
  5087. |    |couvre l'intervalle -8388608 √† 8388607; non sign√©, il couvre 0 √† 16777215.            |
  5088. |    |‚Ä¢  INT[(M)] [UNSIGNED] [ZEROFILL] Un entier de taille normale. Sign√©, il couvre       |
  5089. |    |l'intervalle -2147483648 √† 2147483647; non sign√©, il couvre 0 √† 4294967295.           |
  5090. |    |‚Ä¢  INTEGER[(M)] [UNSIGNED] [ZEROFILL] Un synonyme pour INT.                           |
  5091. |    |‚Ä¢  BIGINT[(M)] [UNSIGNED] [ZEROFILL] Un entier de grande taille. Sign√©, il couvre     |
  5092. |    |l'intervalle -9223372036854775808 √† 9223372036854775807; non sign√©, il couvre 0 √†     |
  5093. |    |18446744073709551615. NB : toutes les op√©rations arithm√©tiques effectu√©e en interne,  |
  5094. |    |utilise des BIGINT sign√©s ou DOUBLE , donc il ne faut pas utiliser les grands entiers |
  5095. |    |non sign√© au del√† de 9223372036854775807 (63 bits), hormis pour les fonctions sur les |
  5096. |    |bits. NB : les op√©rations -, + et * utiliseront des BIGINT , m√™me lorsque les         |
  5097. |    |arguments seront des entiers. Cela signifie que la multiplication de deux grands      |
  5098. |    |entiers (ou le r√©sultat de fonction qui retourne des entiers) peut avoir des r√©sultats|
  5099. |    |surprenants, si le r√©sultat est sup√©rieur √† 9223372036854775807                       |
  5100. |    |‚Ä¢  FLOAT(precision) [ZEROFILL] Un nombre √† virgule flottante. Il est obligatoirement  |
  5101. |    |sign√©. precision peut prendre les valeurs de 4 ou 8. FLOAT(8) est un nombre √†         |
  5102. |    |pr√©cision double. Ces types sont identiques aux types FLOAT et DOUBLE d√©crit          |
  5103. |    |ci-dessous, mais leur pr√©cision peut √™tre param√©tr√©e. Avec MySQL 3.23, ce sont de     |
  5104. |    |vrais nombres √† virgule flottante, alors qu'avec les anciennes versions,              |
  5105. |    |FLOAT(precision) n'avait que 2 d√©cimales. Cette syntaxe a √©t√© ajout√©e pour assurer la |
  5106. |    |compatibilit√© ODBC.                                                                   |
  5107. |    |‚Ä¢  FLOAT[(M,D)] [ZEROFILL] Un nombre √† virgule flottante, en pr√©cision simple. Il est |
  5108. |    |toujours sign√©. Les valeurs sont comprises -3.402823466E+38 et -1.175494351E-38.      |
  5109. |    |‚Ä¢  DOUBLE[(M,D)] [ZEROFILL] Un nombre √† virgule flottante, en pr√©cision double. Il est|
  5110. |    |toujours sign√©. Les valeurs sont comprises -1.7976931348623157E+308 et                |
  5111. |    |2.2250738585072014E-308.                                                              |
  5112. |    |‚Ä¢  DOUBLE PRECISION[(M,D)] [ZEROFILL]                                                 |
  5113. |    |‚Ä¢  REAL[(M,D)] [ZEROFILL] Des synonymes pour DOUBLE.                                  |
  5114. |    |‚Ä¢  DECIMAL(M,D) [ZEROFILL] Un nombre √† virgule flottante. Il est toujours sign√©. Il se|
  5115. |    |comporte comme une colonne CHAR . Il n'est pas paqu√©, c'est √† dire que le nombre est  |
  5116. |    |stock√© comme une cha√Æne de chiffre. Chaque chiffre, le signe moins, la virgule occupe |
  5117. |    |un caract√®re. Si D vaut 0, le nombre n'aura pas de d√©cimales, ni de virgule. La taille|
  5118. |    |maximale pour les d√©cimales est la m√™me que pour les DOUBLE , mais en il peut √™tre    |
  5119. |    |limit√© par le choix de of M et D. Avec MySQL 3.23, M n'inclut plus le signe           |
  5120. |    |moins``-'', ni la virgule des nombres d√©cimaux (norme ANSI SQL.).                     |
  5121. |    |‚Ä¢  NUMERIC(M,D) [ZEROFILL] Un synonyme pour DECIMAL.                                  |
  5122. |    |‚Ä¢  DATE Une date. L'intervalle valide de date va de '1000-01-01' √† '9999-12-31'. MySQL|
  5123. |    |affiche les DATE avec le format , mais il est possible d'affecter des DATE en         |
  5124. |    |utilisant indiff√©remment des cha√Ænes ou des nombres.                                  |
  5125. |    |‚Ä¢  DATETIME Une combinaison de date et d'heure. L'intervalle valide va de '1000-01-01 |
  5126. |    |00:00:00' to '9999-12-31 23:59:59'. MySQL affiche DATETIME avec le format 'YYYY-MM-DD |
  5127. |    |HH:MM:SS', mais il est possible d'affecter des DATETIME en utilisant indiff√©remment   |
  5128. |    |des cha√Ænes ou des nombres.                                                           |
  5129. |    |‚Ä¢  TIMESTAMP[(M)] Un timestamp : la date et l'heure, exprim√©e en secondes, depuis le  |
  5130. |    |1er janviers 1970. Il permet de couvrir un intervalle allant de'1970-01-01 00:00:00' √†|
  5131. |    |quelque part, durant l'ann√©e 2037. MySQL affiche les TIMESTAMP avec les format        |
  5132. |    |YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD ou YYMMDD, suivant que M vaut 14 (ou absent),  |
  5133. |    |12, 8 ou 6, mais il est possible d'affecter des TIMESTAMP en utilisant indiff√©remment |
  5134. |    |des cha√Ænes ou des nombres. Une colonne de type TIMESTAMP est tr√®s pratique pour      |
  5135. |    |enregistrer des dates et heures lors d'un INSERT ou UPDATE, car cette colonne sera    |
  5136. |    |automatiquement mis √† la date et heure de l'op√©ration la plus r√©cente, si aucune      |
  5137. |    |valeur n'est pr√©cis√©e. Il est aussi possible d'affecter l'heure courante en assignant |
  5138. |    |la valeur NULL √† une colonne de type . ( 7.2.6 Types date et heure)                   |
  5139. |    |‚Ä¢  TIME Une mesure de l'heure. L'intervalle valide est '-838:59:59' √† '838:59:59'.    |
  5140. |    |MySQL affiche TIME au format 'HH:MM:SS', mais il est possible d'affecter des TIME en  |
  5141. |    |utilisant indiff√©remment des cha√Ænes ou des nombres.                                  |
  5142. |    |‚Ä¢  YEAR Un an. L'intervalle valide est 1901 √† 2155, et 0000. MySQL affiche YEAR au    |
  5143. |    |format YYYY, mais il est possible d'affecter des YEAR en utilisant indiff√©remment des |
  5144. |    |cha√Ænes ou des nombres}(Le type YEAR est nouveau en MySQL 3.22.)                      |
  5145. |    |‚Ä¢  CHAR(M) [BINARY] Une cha√Æne de caract√®re de taille fixe, et toujours compl√©t√©e √†   |
  5146. |    |droite par des espaces. M va de 1 √† 255 caract√®res. Les espaces suppl√©mentaires sont  |
  5147. |    |supprim√©s lorsque la valeur est retourn√©e dans une requ√™te. Les tris et comparaisons  |
  5148. |    |effectu√©s sur des valeurs de type CHAR sont insensibles √† la casse, √† moins que le mot|
  5149. |    |cl√© BINARY soit pr√©cis√©.                                                              |
  5150. |    |‚Ä¢  VARCHAR(M) [BINARY] Une cha√Æne de caract√®re de longueur variable. Les espaces en   |
  5151. |    |fin de cha√Æne sont supprim√©s lorsque la cha√Æne est stock√©e (ce n'est pas conforme √† la|
  5152. |    |norme ANSI SQL). Va de 1 a 255 caract√®res . Les tris et comparaisons effectu√©s sur des|
  5153. |    |valeurs de type VARCHAR sont insensibles √† la casse, √† moins que le mot cl√© BINARY    |
  5154. |    |soit pr√©cis√©. Voir aussi la section 7.6.1 Modifications automatiques de type de       |
  5155. |    |colonne.                                                                              |
  5156. |    |‚Ä¢  TINYBLOB                                                                           |
  5157. |    |‚Ä¢  TINYTEXT Un objet BLOB ou TEXT avec une longueur maximale de 255 (2^8 - 1). Voir   |
  5158. |    |aussi la section 7.6.1 Modifications automatiques de type de colonne.                 |
  5159. |    |‚Ä¢  BLOB                                                                               |
  5160. |    |‚Ä¢  TEXT Un objet BLOB ou TEXT avec une longueur maximale de 65535 (2^16 - 1). 7.6.1   |
  5161. |    |Modifications automatiques de type de colonne.                                        |
  5162. |    |‚Ä¢  MEDIUMBLOB                                                                         |
  5163. |    |‚Ä¢  MEDIUMTEXT Un objet BLOB ou TEXT avec une longueur maximale de 16777215 (2^24 - 1).|
  5164. |    |7.6.1 Modifications automatiques de type de colonne.                                  |
  5165. |    |‚Ä¢  LONGBLOB                                                                           |
  5166. |    |‚Ä¢  LONGTEXT Un objet BLOB ou TEXT avec une longueur maximale de 4294967295 (2^32 - 1).|
  5167. |    |7.6.1 Modifications automatiques de type de colonne.                                  |
  5168. |    |‚Ä¢  ENUM('value1','value2',...) Une √©num√©ration. Un objet cha√Æne peut prendre une des  |
  5169. |    |valeurs contenue dans une liste de valeur 'value1', 'value2', ..., ou NULL . Une ENUM |
  5170. |    |peut avoir un maximum de 65535 valeurs distinctes.                                    |
  5171. |    |‚Ä¢  SET('value1','value2',...) Un ensemble. Un objet cha√Æne peut prendre une ou        |
  5172. |    |plusieurs valeurs, chacun de ces valeur devant √™tre contenue dans une liste de valeurs|
  5173. |    |'value1', 'value2', .... Un SET peut prendre jusqu'√† 64 √©l√©ments.                     |
  5174. |    |7.2.1 Tailles n√©cessaires pour le stockage de types de colonnes                       |
  5175. |    |Voici la liste des espaces m√©moire requis, par type.                                  |
  5176. |    |7.2.2 Types num√©riques                                                                |
  5177. |    |Column type                                                                           |
  5178. |    |Storage required                                                                      |
  5179. |    |                                                                                      |
  5180. |    |TINYINT                                                                               |
  5181. |    |1 byte                                                                                |
  5182. |    |                                                                                      |
  5183. |    |SMALLINT                                                                              |
  5184. |    |2 bytes                                                                               |
  5185. |    |                                                                                      |
  5186. |    |MEDIUMINT                                                                             |
  5187. |    |3 bytes                                                                               |
  5188. |    |                                                                                      |
  5189. |    |INT                                                                                   |
  5190. |    |4 bytes                                                                               |
  5191. |    |                                                                                      |
  5192. |    |INTEGER                                                                               |
  5193. |    |4 bytes                                                                               |
  5194. |    |                                                                                      |
  5195. |    |BIGINT                                                                                |
  5196. |    |8 bytes                                                                               |
  5197. |    |                                                                                      |
  5198. |    |FLOAT(4)                                                                              |
  5199. |    |4 bytes                                                                               |
  5200. |    |                                                                                      |
  5201. |    |FLOAT(8)                                                                              |
  5202. |    |8 bytes                                                                               |
  5203. |    |                                                                                      |
  5204. |    |FLOAT                                                                                 |
  5205. |    |4 bytes                                                                               |
  5206. |    |                                                                                      |
  5207. |    |DOUBLE                                                                                |
  5208. |    |8 bytes                                                                               |
  5209. |    |                                                                                      |
  5210. |    |DOUBLE PRECISION                                                                      |
  5211. |    |8 bytes                                                                               |
  5212. |    |                                                                                      |
  5213. |    |REAL                                                                                  |
  5214. |    |8 bytes                                                                               |
  5215. |    |                                                                                      |
  5216. |    |DECIMAL(M,D)                                                                          |
  5217. |    |M bytes (D+2, if M < D)                                                               |
  5218. |    |                                                                                      |
  5219. |    |NUMERIC(M,D)                                                                          |
  5220. |    |M bytes (D+2, if M < D)                                                               |
  5221. |    |                                                                                      |
  5222. |    |7.2.3 Types date et heure                                                             |
  5223. |    |Column type                                                                           |
  5224. |    |Storage required                                                                      |
  5225. |    |                                                                                      |
  5226. |    |DATETIME                                                                              |
  5227. |    |8 bytes                                                                               |
  5228. |    |                                                                                      |
  5229. |    |DATE                                                                                  |
  5230. |    |3 bytes                                                                               |
  5231. |    |                                                                                      |
  5232. |    |TIMESTAMP                                                                             |
  5233. |    |4 bytes                                                                               |
  5234. |    |                                                                                      |
  5235. |    |TIME                                                                                  |
  5236. |    |3 bytes                                                                               |
  5237. |    |                                                                                      |
  5238. |    |YEAR                                                                                  |
  5239. |    |1 byte                                                                                |
  5240. |    |                                                                                      |
  5241. |    |7.2.4 Types cha√Æne                                                                    |
  5242. |    |Column type                                                                           |
  5243. |    |taille requise                                                                        |
  5244. |    |                                                                                      |
  5245. |    |CHAR(M)                                                                               |
  5246. |    |M octets, 1 <= M <= 255                                                               |
  5247. |    |                                                                                      |
  5248. |    |VARCHAR(M)                                                                            |
  5249. |    |L+1 bytes, avec L <= M et 1 <= M <= 255                                               |
  5250. |    |                                                                                      |
  5251. |    |TINYBLOB, TINYTEXT                                                                    |
  5252. |    |L+1 octets, where L < 2^8                                                             |
  5253. |    |                                                                                      |
  5254. |    |BLOB, TEXT                                                                            |
  5255. |    |L+2 octets, where L < 2^16                                                            |
  5256. |    |                                                                                      |
  5257. |    |MEDIUMBLOB, MEDIUMTEXT                                                                |
  5258. |    |L+3 octets, where L < 2^24                                                            |
  5259. |    |                                                                                      |
  5260. |    |LONGBLOB, LONGTEXT                                                                    |
  5261. |    |L+4 octets, where L < 2^32                                                            |
  5262. |    |                                                                                      |
  5263. |    |ENUM('value1','value2',...)                                                           |
  5264. |    |1 ou 2 octets, suivant le nombre de valeur dans l'√©numeration (65535 au maximum)      |
  5265. |    |                                                                                      |
  5266. |    |SET('value1','value2',...)                                                            |
  5267. |    |1, 2, 3, 4 ou 8 octets, suivant le nombre de membre de l'ensemble (64 membres au      |
  5268. |    |maximum)                                                                              |
  5269. |    |                                                                                      |
  5270. |    |Les types VARCHAR, BLOB et TEXT sont des types √† longueur variable, dont taille de    |
  5271. |    |stockage d√©pend plus de la valeur qui leur est assign√©e que de leur taille maximale.  |
  5272. |    |Par exemple, une colonne de type VARCHAR(10) peut contenir une cha√Æne de 10 caract√®res|
  5273. |    |aux maximum. La taille r√©elle n√©cessaire est la longueur de la cha√Æne, plus 1 octet,  |
  5274. |    |qui stockera la taille r√©elle de la cha√Æne. Par exemple, la cha√Æne 'abcd' occupe 5    |
  5275. |    |octets.                                                                               |
  5276. |    |Les types BLOB et TEXT ont besoin de 1, 2, 3 ou 4 octets pour stocker la taille de la |
  5277. |    |colonne, en fonction du type.                                                         |
  5278. |    |Si une table poss√®de au moins une colonne de longueur variable, l'enregistrement sera |
  5279. |    |aussi de longueur variable. Il faut noter que lorsqu'une table est cr√©√©e, MySQL peut, |
  5280. |    |sous certaines conditions, changer le type d'une colonne de longueur variable en un   |
  5281. |    |type de colonne de longueur fixe, et vice-versa. Pour plus de d√©tails, 7.6.1          |
  5282. |    |Modifications automatiques de type de colonne.                                        |
  5283. |    |La taille d'un objet ENUM est d√©termin√© par le nombre d'√©num√©ration diff√©rentes. 1    |
  5284. |    |octet est suffisant pour d√©crire une √©num√©ration qui a jusqu'√† 255 valeurs diff√©rentes|
  5285. |    |; 2 octets sont n√©cessaires d√©crire une √©num√©ration qui aurait jusqu'                 |
  5286. |    |La taille d'un objet SET est d√©termin√© par le nombre d'√©l√©ment distinct qu'il         |
  5287. |    |contient. Si la taille d'un SET est N, le SET occupera (N+7)/8 octets, arrondi aux    |
  5288. |    |entiers 1,2,3,4, ou 8 octets. Un ensemble peut contenir jusqu'√† 64 √©l√©ments.          |
  5289. |    |7.2.5 Types num√©riques                                                                |
  5290. |    |Tous les types entiers disposent d'un attribut optionnel UNSIGNED. Les valeurs non    |
  5291. |    |sign√©es sont utilis√©es quand les nombres utilis√© sont uniquement positifs, ou bien    |
  5292. |    |lorsqu'il faut pouvoir manipuler des nombres un peu plus grand de normalement.        |
  5293. |    |Tous les types num√©riques disposent d'un attribut optionnel ZEROFILL. Cette option    |
  5294. |    |force l'affichage de tous les z√©ros non significatifs. Ainsi, dans une colonne de type|
  5295. |    |INT(5) ZEROFILL, 4 sera affich√© : 00004.                                              |
  5296. |    |Quand une valeur trop grande est affect√©e √† une colonne, MySQL limitera cette valeur  |
  5297. |    |au maximum qu'il peut stocker dans la colonne.                                        |
  5298. |    |Par exemple, soit une colonne de type INT qui accueille des nombres dans l'intervalle |
  5299. |    |-2147483648 to 2147483647. Lorsqu'on tente d'inserer -9999999999 dans cette colonne,  |
  5300. |    |MySQL utilisera automatiquement la plus petite valeur possible, soit -2147483648 . De |
  5301. |    |m√™me, Lorsqu'on tente d'inserer 9999999999 dans cette colonne, MySQL utilisera        |
  5302. |    |automatiquement la plus grande valeur possible, soit 2147483647.                      |
  5303. |    |Si une colonne est de type INT UNSIGNED, la taille de la colonne est la m√™me, mais les|
  5304. |    |extr√©mit√©s sont diff√©rentes. Lors d'une tentative d'insertion, -9999999999 et         |
  5305. |    |9999999999 deviendront respectivement 0 et 4294967296.                                |
  5306. |    |Ces conversions implicites sont signal√©es comme des alertes (``warnings''), lors des  |
  5307. |    |requ√™tes incluant ALTER TABLE, LOAD DATA INFILE, UPDATE et INSERT multi-lignes.       |
  5308. |    |La taille maximale (M) et le nombre de d√©cimales (D) sont utilis√©es lors du formatage |
  5309. |    |et des calculs de la taille maximale d'une colonne.                                   |
  5310. |    |MySQL tentera d'enregistrer n'importe quelle valeur, du moment que cette derni√®re peut|
  5311. |    |√™tre contenue dans la colonne, et malgr√© le d√©passement de limite d'affichage. Par    |
  5312. |    |exemple, une colonne de type INT(4) peut afficher 4 caract√®res. Il est cependant      |
  5313. |    |possible d'ins√©rer une valeur qui a plus que 4 chiffres, telle que 12345. La taille   |
  5314. |    |d'affichage est d√©pass√©e, mais 12345 est bien dans l'intervalle autoris√© pour un INT. |
  5315. |    |Donc, MySQL va enregistrer la valeur de 12345 . Lors d'une requ√™te, MySQL retournera  |
  5316. |    |bien la vraie valeur, c'est √† dire . 12345                                            |
  5317. |    |Le type DECIMAL peut √™tre consid√©r√© comme un type num√©rique (puisqu'il est synonyme de|
  5318. |    |NUMERIC ), mais ce type est en fait enregistr√© comme une cha√Æne. Un caract√®re est     |
  5319. |    |utilis√© pour chaque chiffre, pour la virgule et pour le signe moins``-''. Si D vaut 0,|
  5320. |    |DECIMAL et NUMERIC ne contiennent ni virgule, ni partie d√©cimale.                     |
  5321. |    |La taille maximale d'une valeur DECIMAL est la m√™me que celle d'un DOUBLE, mais elle  |
  5322. |    |peut d√©pendre des choix de M et D. Par exemple, un DECIMAL d√©clar√© tel que indique    |
  5323. |    |DECIMAL(4,2) que la valeur maximale aura 2 chiffres apr√®s la virgule. Etant donn√© la  |
  5324. |    |fa√ßon avec laquelle le type DECIMAL est enregistr√©, ce DECIMAL sera compris entre-.99 |
  5325. |    |to 9.99, ce qui est nettement moins que les valeurs accessibles avec un DOUBLE.       |
  5326. |    |Pour √©viter certains probl√®mes d'arrondissement, MySQL ajuste toujours les valeurs    |
  5327. |    |qu'il enregistre au nombre de d√©cimale de la colonne. Ainsi, pour une colonne de type |
  5328. |    |FLOAT(8,2)., le nombre de d√©cimale est 2. Donc, un nombre tel que 2.333 sera arrondi √†|
  5329. |    |2.33, puis enregistr√©.                                                                |
  5330. |    |7.2.6 Types date et heure                                                             |
  5331. |    |Les types date et heure sont DATETIME, DATE, TIMESTAMP, TIME et YEAR. Chacun dispose  |
  5332. |    |d'un intervalle de validit√©, et une valeur ``z√©ro'', qui peut √™tre utilis√© pour       |
  5333. |    |indiquer une valeur ill√©gale.                                                         |
  5334. |    |Voici quelques consid√©rations g√©n√©rales √† garder √† l'esprit quand on travaille avec   |
  5335. |    |les types date et heure :                                                             |
  5336. |    |MySQL retourne les valeurs de date et d'heure dans un format standard unique, mais il |
  5337. |    |est capable d'interpr√©ter un grand nombre de format d'entr√©e. N√©anmoins, seuls les    |
  5338. |    |formats d√©crit dans les sections suivantes sont support√©s. MySQL attends des dates    |
  5339. |    |valides, et des effets impr√©visibles peuvent r√©sulter de l'utilisation d'autres       |
  5340. |    |formats.                                                                              |
  5341. |    |Bien que MySQL tente d'interpr√©ter un grand nombre de format de date, l'ann√©e devra   |
  5342. |    |toujours √™tre plac√©e √† gauche. Les dates doivent √™tre donn√©es dans l'ordre            |
  5343. |    |ann√©e-mois-jour (ie : '98-09-04'), plut√¥t que dans l'ordre mois-jour-ann√©e ou l'ordre |
  5344. |    |jour-mois-ann√©e utilis√©s habituellement. (ie '09-04-98', '04-09-98').                 |
  5345. |    |MySQL convertit automatiquement une date ou une heure en un nombre, si cette valeur   |
  5346. |    |est utilis√© dans un contexte num√©rique, et vice-versa.                                |
  5347. |    |Quand MySQL rencontre une valeur pour une date ou une heure qui n'est pas valide, il  |
  5348. |    |la convertit en valeur ``z√©ro''. Les probl√®mes de d√©passement de capacit√©s sont r√©gl√©s|
  5349. |    |comme pour les types num√©riques, en ramenant la valeur au maximum ou au minimum de    |
  5350. |    |l'intervalle autoris√©. La table suivante montre les formats des valeurs ``z√©ro''.     |
  5351. |    |Column type                                                                           |
  5352. |    |``Zero'' value                                                                        |
  5353. |    |                                                                                      |
  5354. |    |DATETIME                                                                              |
  5355. |    |'0000-00-00 00:00:00'                                                                 |
  5356. |    |                                                                                      |
  5357. |    |DATE                                                                                  |
  5358. |    |'0000-00-00'                                                                          |
  5359. |    |                                                                                      |
  5360. |    |TIMESTAMP                                                                             |
  5361. |    |00000000000000 (length depends on display size)                                       |
  5362. |    |                                                                                      |
  5363. |    |TIME                                                                                  |
  5364. |    |'00:00:00'                                                                            |
  5365. |    |                                                                                      |
  5366. |    |YEAR                                                                                  |
  5367. |    |0000                                                                                  |
  5368. |    |                                                                                      |
  5369. |    |Les valeurs ``z√©ro'' sont des valeurs particuli√®res, mais il est parfaitement possible|
  5370. |    |de les utiliser pour les enregistrer ou y faire r√©f√©rence. Il est aussi possible de   |
  5371. |    |les √©crire '0' ou 0,qui sont plus facile √† √©crire.                                    |
  5372. |    |Les dates ``Z√©ro'' utilis√©es via MyODBC sont automatiquement converties √† NULL par    |
  5373. |    |MyODBC 2.50.12 et mieux, car ODBC ne peut pas manipuler de telle valeur.              |
  5374. |    |7.2.6.1 Bug de l'an 2000 et donn√©es de types date                                     |
  5375. |    |Les types DATETIME, DATE et TIMESTAMP sont proches. Cette section d√©crit leur         |
  5376. |    |caract√©ristiques, et montre en quoi ils sont similaires, et en quoi ils sont          |
  5377. |    |diff√©rents.                                                                           |
  5378. |    |Le type DATETIME est utile pour manipuler en m√™me temps une date et une heure. . MySQL|
  5379. |    |retourne et affiche les valeurs de type DATETIME au format 'YYYY-MM-DD HH:MM:SS'.     |
  5380. |    |L'intervalle valide pour le type DATETIME est '1000-01-01 00:00:00' √† '9999-12-31     |
  5381. |    |23:59:59'. (``valide`` signifie que des valeurs anciennes pourrait fonctionner, mais  |
  5382. |    |qu'il n'y a aucune garantie).                                                         |
  5383. |    |Le type DATE est utilis√© pour manipuler simplement une date, sans l'heure. MySQL      |
  5384. |    |retourne et affiche les valeurs de type DATE au format 'YYYY-MM-DD' L'intervalle      |
  5385. |    |valide pour le type DATE est '1000-01-01' √† '9999-12-31'                              |
  5386. |    |Le type TIMESTAMP est utilis√© automatiquement lors de requ√™te , avec la valeur        |
  5387. |    |courante de date et d'heure. Si il y a plusieurs colonnes de type TIMESTAMP , seule la|
  5388. |    |premi√®re sera automatiquement mise √† jour.                                            |
  5389. |    |La datation automatique intervient sur la premi√®re colonne de type TIMESTAMP , et dans|
  5390. |    |les conditions suivantes :                                                            |
  5391. |    |La colonne n'est pas express√©ment nomm√©e dans la requ√™te INSERT ou LOAD DATA          |
  5392. |    |La colonne n'est pas express√©ment nomm√©e dans une requ√™te , et au moins une autre     |
  5393. |    |colonne change UPDATE de valeur (Il est important de noter qu'une requ√™te UPDATE qui  |
  5394. |    |affecterait la m√™me valeur que celle qui est d√©j√† affect√©e dans la colonne, alors la  |
  5395. |    |colonne TIMESTAMP ne sera pas mise √† jour, car MySQL va ignorer la requ√™te, par souci |
  5396. |    |d'efficacit√©.)                                                                        |
  5397. |    |La colonne TIMESTAMP est explicitement mise √† NULL.                                   |
  5398. |    |Dans le cas o√π il y a plusieurs colonnes de type TIMESTAMP, il est possible d'affecter|
  5399. |    |la valeur courante de date et d'heure, en affectant la valeur NULL ou NOW().          |
  5400. |    |Il est possible d'affecter n'importe quelle date √† une colonne de type TIMESTAMP, en  |
  5401. |    |lui affectant explicitement la valeur d√©sir√©e. Cela est vrai pour toutes les colonnes |
  5402. |    |de type TIMESTAMP, y compris la premi√®re. Par exemple, il est possible d'utiliser une |
  5403. |    |colonne de type pour enregistrer le moment de cr√©ation de la ligne, mais qui ne sera  |
  5404. |    |plus chang√© par la suite.:                                                            |
  5405. |    |Il suffit de laisser MySQL affecter la valeur automatiquement lors de la cr√©ation de  |
  5406. |    |la ligne. L'initalisation sera faite au jour et heure courante.                       |
  5407. |    |Lors des modifications ult√©rieurs, il suffit d'affecter √† la colonne sa propre valeur.|
  5408. |    |                                                                                      |
  5409. |    |Ou alors, il est aussi simple d'utiliser une colonne de type DATETIME, qui sera       |
  5410. |    |initialis√© √† l'aide de la commande NOW() , et qui ne sera plus jamais modifi√©e.       |
  5411. |    |TIMESTAMP couvre un espace de temps qui commence en 1970 et se termine quelques par en|
  5412. |    |2037, avec un pr√©cision d'une seconde. Ses valeurs sont affich√©e comme des nombres.   |
  5413. |    |Le format utilis√© par pour retourner les valeurs de type d√©pendent de la taille de    |
  5414. |    |l'affichage, comme pr√©sent√© ci dessous. Un complet affiche 14 chiffres, mais il est   |
  5415. |    |possible de n'afficher qu'une partie.                                                 |
  5416. |    |Column type                                                                           |
  5417. |    |Display format                                                                        |
  5418. |    |                                                                                      |
  5419. |    |TIMESTAMP(14)                                                                         |
  5420. |    |YYYYMMDDHHMMSS                                                                        |
  5421. |    |                                                                                      |
  5422. |    |TIMESTAMP(12)                                                                         |
  5423. |    |YYMMDDHHMMSS                                                                          |
  5424. |    |                                                                                      |
  5425. |    |TIMESTAMP(10)                                                                         |
  5426. |    |YYMMDDHHMM                                                                            |
  5427. |    |                                                                                      |
  5428. |    |TIMESTAMP(8)                                                                          |
  5429. |    |YYYYMMDD                                                                              |
  5430. |    |                                                                                      |
  5431. |    |TIMESTAMP(6)                                                                          |
  5432. |    |YYMMDD                                                                                |
  5433. |    |                                                                                      |
  5434. |    |TIMESTAMP(4)                                                                          |
  5435. |    |YYMM                                                                                  |
  5436. |    |                                                                                      |
  5437. |    |TIMESTAMP(2)                                                                          |
  5438. |    |YY                                                                                    |
  5439. |    |                                                                                      |
  5440. |    |Toutes les colonnes de type ont besoin de la m√™me quantit√© de m√©moire, quelque soit le|
  5441. |    |format d'affichage. Les formats d'affichage les plus courants sont le 6, le 8, le 12  |
  5442. |    |et le 14. Il est possible d'imposer une taille arbitraire au format d'affichage au    |
  5443. |    |moment de la cr√©ation de la table, mais 0 et toutes les valeurs sup√©rieures √† 14      |
  5444. |    |seront ramen√©es √† 14. Les valeurs impaires entre 1 et 13 sont arrondies au nombre     |
  5445. |    |entier pair sup√©rieur.                                                                |
  5446. |    |Il est possible d'affecter des valeurs de type DATETIME, DATE et TIMESTAMP en         |
  5447. |    |utilisant n'importe lequel des formats suivants :                                     |
  5448. |    |Une cha√Æne, avec le format 'YYYY-MM-DD HH:MM:SS' ou 'YY-MM-DD HH:MM:SS'. Les '-' et ' |
  5449. |    |:' ne sont pas obligatoires, et n'importe quel caract√®re non num√©rique. Par exemple,  |
  5450. |    |'98-12-31 11:30:45', '98.12.31 11+30+45', '98/12/31 11*30*45' et '98@12@31 11^30^45'  |
  5451. |    |sont √©quivalents.                                                                     |
  5452. |    |Une cha√Æne, avec le format 'YYYY-MM-DD' ou 'YY-MM-DD'. Les '-' et ' :' ne sont pas    |
  5453. |    |obligatoires, et ils peuvent √™tre remplac√© par quel caract√®re non num√©rique. Par      |
  5454. |    |exemple, '98-12-31', '98.12.31', '98/12/31' et '98@12@31' sont √©quivalents.           |
  5455. |    |Une cha√Æne sans aucun d√©limiteur, avec le format 'YYYYMMDDHHMMSS' ou 'YYMMDDHHMMSS',  |
  5456. |    |en supposant que cette cha√Æne a bien un sens en tant que date. Par exemple,           |
  5457. |    |'19970523091528' et '970523091528 seront comprises comme '1997-05-23 09:15:28'.Au     |
  5458. |    |contraire, '971122459015' n'est pas valide (le nombre de seconde n'est pas valide), et|
  5459. |    |sera remplac√© par : '0000-00-00 00:00:00'.                                            |
  5460. |    |Une cha√Æne sans aucun d√©limiteur, avec le format 'YYYYMMDD' or 'YYMMDD', en supposant |
  5461. |    |que cette cha√Æne a bien un sens en tant que date. Par exemple, '19970523' et '970523' |
  5462. |    |seront comprises comme '1997-05-23'.Au contraire, '971332' n'est pas valide (le nombre|
  5463. |    |de mois et de jour ne sont pas valides), et sera remplac√© par : '0000-00-00'.         |
  5464. |    |Un nombre avec le format YYYYMMDDHHMMSS or YYMMDDHHMMSS, en supposant que cette cha√Æne|
  5465. |    |a bien un sens en tant que date. Par exemple, 19830905132800 et 830905132800 seront   |
  5466. |    |comprises comme '1983-09-05 13:28:00'                                                 |
  5467. |    |Un nombre avec le format YYYYMMDD or YYMMDD, en supposant que cette cha√Æne a bien un  |
  5468. |    |sens en tant que date. Par exemple, 19830905132800 et 830905132800 seront comprises   |
  5469. |    |comme '1983-09-05 13:28:00'                                                           |
  5470. |    |Le r√©sultat d'une fonction qui retourne une valeur acceptable en dans un contexte de  |
  5471. |    |DATETIME, DATE or TIMESTAMP, comme NOW() or CURRENT_DATE.                             |
  5472. |    |Toutes les valeurs de type DATETIME, DATE ou TIMESTAMP sont converties automatiquement|
  5473. |    |en ``zero'' du m√™me type ('0000-00-00 00:00:00', '0000-00-00' ou 00000000000000).     |
  5474. |    |Pour les valeurs sp√©cifi√©es au format cha√Æne avec des d√©limiteurs, il n'est pas       |
  5475. |    |n√©cessaire de pr√©ciser les deux chiffres pour les mois ou les jours. Par exemple,     |
  5476. |    |'1979-6-9' et '1979-06-09' sont identiques. De la m√™me fa√ßon, pour les valeurs        |
  5477. |    |sp√©cifi√©es au format cha√Æne avec des d√©limiteurs, il n'est pas n√©cessaire de pr√©ciser |
  5478. |    |les deux chiffres pour les heures, minutes ou secondes. Ainsi, '1979-10-30 1:2:3' et  |
  5479. |    |'1979-10-30 01:02:03' sont identiques.                                                |
  5480. |    |Les valeurs sp√©cifi√©e au format nombre doivent avoir 6, 8, 12 ou 14 chiffres. Si le   |
  5481. |    |nombre a 8 ou 14 chiffres, MySQL utilisera respectivement le format YYYYMMDD ou       |
  5482. |    |YYYYMMDDHHMMSS, o√π l'ann√©e sera repr√©sent√©e par les quatre premiers chiffres. Si le   |
  5483. |    |nombre a 6 ou 12 chiffres, MySQL utilisera respectivement le format YYMMDD or         |
  5484. |    |YYMMDDHHMMSS, o√π l'ann√©e sera repr√©sent√©e par les deux premiers chiffres. Si le nombre|
  5485. |    |n'a pas le bon nombre de chiffre, il sera compl√©t√© avec des z√©ros non significatif    |
  5486. |    |(plac√©s avant le premier chiffre), jusqu'√† correspondre √† une taille analysable.      |
  5487. |    |Les valeurs non d√©limit√©es, sont interpr√©t√©es en fonction de leur longueur. Si la     |
  5488. |    |cha√Æne fait 8 ou 14 caract√®res, l'ann√©e sera consid√©r√©e comme ayant 4 chiffres. Sinon,|
  5489. |    |l'ann√©e n'aura que les deux premiers chiffres. La cha√Æne est interpr√©t√©e de gauche √†  |
  5490. |    |droite, en lisant successivement l'ann√©e, le mois, le jour, l'heure, la minute et la  |
  5491. |    |seconde, dans la mesure o√π la cha√Æne est suffisamment longue. Cela implique qu'il ne  |
  5492. |    |faut pas utiliser de cha√Æne de moins de 6 caract√®res. Par exemple, la cha√Æne '9903',  |
  5493. |    |qui pourrait s'interpr√©ter mars 1999, sera remplac√©e par la date ``z√©ro''. En effet,  |
  5494. |    |est capable de trouver l'ann√©e (99) et le mois (03) mais pas le jour (00), et donc    |
  5495. |    |cette valeur n'est pas valide.                                                        |
  5496. |    |Les colonnes de type TIMESTAMP enregistre les dates avec la pr√©cision maximum, quelque|
  5497. |    |soit la taille d'affichage. Cela a plusieurs implications :                           |
  5498. |    |Il faut toujours pr√©ciser l'ann√©e, le mois et le jour, m√™me si le type de la colonne  |
  5499. |    |est TIMESTAMP(4) ou TIMESTAMP(2). Sinon, la valeur ne sera pas valide, et donc,       |
  5500. |    |remplac√©e par ``z√©ro''.                                                               |
  5501. |    |Si la structure de la table est modifi√© avec , pour agrandir la colonne, l'affichage  |
  5502. |    |pr√©sentera des donn√©es qui √©taient pr√©c√©demment cach√©es.                              |
  5503. |    |De la m√™me fa√ßon, r√©duire la taille d'affichage d'une colonne TIMESTAMP ne causera pas|
  5504. |    |de perte d'information : elles seront simplement cach√©es.                             |
  5505. |    |Bien que les valeurs TIMESTAMP soient en pr√©cision maximale, la seul fonction qui     |
  5506. |    |op√®re directement sur la valeur enregistr√©e dans la base est UNIX_TIMESTAMP(). Les    |
  5507. |    |autres fonctions utilisent la valeur format√©e. Cela signifie qu'il n'est pas possible |
  5508. |    |d'utiliser une fonction telle que HOUR() ou SECOND() √† moins que la partie            |
  5509. |    |significative de TIMESTAMP soit inclus dans la valeur format√©e. Par exemple, la partie|
  5510. |    |HH d'une valeur de type TIMESTAMP ne sera pas affich√©e, √† moins que la taille de      |
  5511. |    |l'affichage soit au moins de 10. Ainsi, utiliser la fonction sur une valeur de type de|
  5512. |    |taille inf√©rieure √† 10 risque de retourner une valeur incoh√©rente.                    |
  5513. |    |Il est possible d'affecter des valeurs de type date dans une variable d'un autre type |
  5514. |    |date. Cependant, cela peut engendrer des alt√©rations ou des pertes d'informations. :  |
  5515. |    |Lors de l'affectation d'une DATE dans une variable de type DATETIME ou TIMESTAMP, la  |
  5516. |    |partie heure du r√©sultat est mis √† '00:00:00', car la valeur DATE ne contient aucune  |
  5517. |    |information d'heure.                                                                  |
  5518. |    |Lors de l'affectation d'une DATETIME ou TIMESTAMP dans une variable de type DATE, la  |
  5519. |    |partie heure du r√©sultat est perdue , car la valeur DATE ne contient aucune           |
  5520. |    |information d'heure.                                                                  |
  5521. |    |Il ne faut pas confondre les diff√©rents formats de sp√©cifications des DATETIME, DATE  |
  5522. |    |et TIMESTAMP . En effet, pour le m√™me format d'acquisition, les diff√©rents types n'ont|
  5523. |    |pas le m√™me intervalle de validit√©. Par exemple, TIMESTAMP ne peut contenir de valeur |
  5524. |    |ant√©rieure √† 1970 ou post√©rieure √† 2037. Cela signifie qu'une date telle que as       |
  5525. |    |'1968-01-01', tout en √©tant valide pour les types DATETIME or DATE, n'est pas valide  |
  5526. |    |pour le type TIMESTAMP et sera transform√©e en 0, lors de l'affectation √† un tel objet.|
  5527. |    |                                                                                      |
  5528. |    |Attention aussi aux erreurs de sp√©cifications :                                       |
  5529. |    |En utilisant la forme de sp√©cification avec d√©limiteurs, comme les d√©limiteurs ne sont|
  5530. |    |pas impos√©, il est possible d'√™tre induit en erreur par la forme : Ainsi, '10:11:12'  |
  5531. |    |ressemble √† une heure, √† cause des d√©limiteurs " : ". Mais, utilis√© dans un contexte  |
  5532. |    |de date, il peut aussi √™tre interpr√©t√© comme la date'2010-11-12'. De m√™me, la valeur  |
  5533. |    |'10:45:15' sera convertie en 0, car 45 ,'est pas un mois valide.                      |
  5534. |    |Les ann√©es sp√©cifi√©es sur deux chiffres sont ambigu√´s :                               |
  5535. |    |Les ann√©es qui sont dans l'intervalle 00-69 sont consid√©r√© comme 2000-2069.           |
  5536. |    |Les ann√©es qui sont dans l'intervalle 70-99 sont consid√©r√© comme 1970-1999.           |
  5537. |    |7.2.6.2 Le type TIME                                                                  |
  5538. |    |MySQL retourne et affiche les valeurs de type TIME aux formats 'HH:MM:SS' ou          |
  5539. |    |'HHH:MM:SS'. Les valeurs de type TIME vont de '-838:59:59' √† '838:59:59'. Le nombre   |
  5540. |    |d'heure peut √™tre rendu aussi grand afin de pouvoir repr√©senter les heures du jour,   |
  5541. |    |mais aussi de faire des calculs de diff√©rence d'heure entre deux jours, ce qui conduit|
  5542. |    |√† des dur√©e tr√®s sup√©rieures √† 24h, voire m√™me des valeurs n√©gatives.                 |
  5543. |    |Les valeurs de type TIME peuvent √™tre d√©finies de nombreuses mani√®res diff√©rentes :   |
  5544. |    |Une cha√Æne de format 'HH:MM:SS'. Les :' ne sont pas obligatoires, et ils peuvent √™tre |
  5545. |    |remplac√© par n'importe quel caract√®re non num√©rique. Par exemple, , '10:11:12' et     |
  5546. |    |'10.11.12'sont √©quivalents..                                                          |
  5547. |    |Une cha√Æne sans d√©limiteurs, au format'HHMMSS', en supposant qu'elle est un sens en   |
  5548. |    |tant que date. Par exemple, '101112' sera interpret√© comme '10:11:12', mais '109712'  |
  5549. |    |n'est pas valide et deviendra '00:00:00'.                                             |
  5550. |    |Un nombre au format HHMMSS, en supposant que cela ait un sens. Par exemple, 101112    |
  5551. |    |vaudra . '10:11:12'                                                                   |
  5552. |    |Le r√©sultat d'une fonction qui retourne une valeur acceptable en dans un contexte de  |
  5553. |    |DATETIME, DATE or TIMESTAMP, comme NOW() or CURRENT_DATE.                             |
  5554. |    |Pour les valeurs de type TIME sp√©cifi√©es au format cha√Æne avec des d√©limiteurs, il    |
  5555. |    |n'est pas n√©cessaire de pr√©ciser les deux chiffres pour les heures, minutes ou        |
  5556. |    |secondes. Ainsi, '8:3:2' et '08:03:02'.sont identiques.                               |
  5557. |    |Attention aux affections de valeurs courtes dans une colonne de type TIME. MySQL      |
  5558. |    |interpr√®te les valeurs en supposant que les chiffres de gauche sont les secondes      |
  5559. |    |(MySQL interpr√®te les valeurs de type TIME comme des intervalles de temps, plut√¥t     |
  5560. |    |qu'une date). Par exemple, '11:12', '1112' et 1112 pourraient √™tre confondues avec    |
  5561. |    |'11:12:00' (12 minutes apr√®s 11 heures), mais MySQL le comprend comme '00:11:12' (11  |
  5562. |    |minutes, 12 seconds). De m√™me, '12' et 12 representent '00:00:12'.                    |
  5563. |    |Toutes les valeurs de TIME, qui sont hors de l'intervalle de validit√© sont ramen√©es √† |
  5564. |    |la valeur valide la plus proche. Ainsi, '-850:00:00' et '850:00:00' sont              |
  5565. |    |respectivement converties en'-838:59:59' et '838:59:59'.                              |
  5566. |    |Toutes les valeurs invalides de TIME sont converties en '00:00:00'. Il faut bien      |
  5567. |    |savoir que '00:00:00'est une valeur de TIME valide. Ainsi, si est stock√© dans une     |
  5568. |    |table, il est impossible de dire si cela provient d'une erreur, ou si il a √©t√© affect√©|
  5569. |    |√† cette valeur.                                                                       |
  5570. |    |7.2.6.3 Le type YEAR                                                                  |
  5571. |    |Le type YEAR sert √† repr√©senter les ann√©es sur un octet.                              |
  5572. |    |MySQL retourne et affiche les YEAR au format YYYY: L'intervalle de validit√© est de    |
  5573. |    |1901 √† 2155.                                                                          |
  5574. |    |Les valeurs de type YEAR peuvent √™tre d√©finies de nombreuses mani√®res diff√©rentes :   |
  5575. |    |Une cha√Æne de 4 chiffres, dans l'intervalle de 1901 √† 2155.                           |
  5576. |    |Un nombre de 4 chiffres, dans l'intervalle de 1901 √† 2155.                            |
  5577. |    |Une cha√Æne de 2 chiffres, dans l'intervalle de '00' √† '99'. Les valeurs de '00' √† '69'|
  5578. |    |et de'70' √† '99' seront converties en valeurs de type YEAR, dans les intervalles      |
  5579. |    |respectifs de 2000 √† 2069 et de 1970 √† 1999.                                          |
  5580. |    |Un nombre de 2 chiffres, dans l'intervalle de 1 √† 99. Les valeurs de 1 √† 69 et de70 √† |
  5581. |    |99 seront converties en valeurs de type YEAR, dans les intervalles respectifs de 2000 |
  5582. |    |√† 2069 et de 1970 √† 1999. Il faut bien noter que ce format diff√®re l√©g√®rement du      |
  5583. |    |pr√©c√©dent, car il n'est pas possible de passer un nombre √©gal √† 0, pour obtenir       |
  5584. |    |l'ann√©e 2000. Il faut sp√©cifier une cha√Æne, '0' ou '00', sinon MySQL retournera 0000  |
  5585. |    |Le r√©sultat d'une fonction qui retourne une valeur acceptable en dans un contexte de  |
  5586. |    |DATETIME, DATE or TIMESTAMP, comme NOW().                                             |
  5587. |    |Toutes les valeurs invalides de YEAR sont converties en 0000.                         |
  5588. |    |7.2.7 Types cha√Æne                                                                    |
  5589. |    |Les types cha√Ænes sont CHAR, VARCHAR, BLOB, TEXT, ENUM et SET.                        |
  5590. |    |7.2.7.1 Les types CHAR et VARCHAR                                                     |
  5591. |    |Les types CHAR et VARCHAR sont similaires, mais ils diff√®rent par la mani√®re dont ils |
  5592. |    |sont stock√©s.                                                                         |
  5593. |    |Les valeurs de type CHAR sont de longueur fix√©e. La longueur est d√©clar√©e lors de la  |
  5594. |    |cr√©ation de la table. Cette longueur peut aller de 1 √† 255. Quand une valeur de type  |
  5595. |    |CHAR est enregistr√©e, elle est compl√©t√©e √† gauche par des espaces. Lorsque MySQL      |
  5596. |    |retourne cette valeur, ces espaces sont effac√©s.                                      |
  5597. |    |Les valeurs de type VARCHAR sont de longueur variable. Une longueur maximum est       |
  5598. |    |d√©clar√©e lors de la cr√©ation de la table. Cette longueur peut aller de 1 √† 255. Quand |
  5599. |    |une valeur de type CHAR est enregistr√©e, seul les caract√®res utiles sont enregistr√©s, |
  5600. |    |plus un octet pour enregistrer la taille de la cha√Æne. Les ne sont pas compl√©t√©e √†    |
  5601. |    |gauche par des espaces, mais les espaces en d√©but de valeurs sont effac√©s lors de     |
  5602. |    |l'enregistrement (cette fonction d'effacement des espaces √† l'enregistrement n'est pas|
  5603. |    |sp√©cifi√©e dans ANSI SQL).                                                             |
  5604. |    |Lors de l'affectation d'une valeur de type CHAR ou VARCHAR dans une colonne trop      |
  5605. |    |petite, la valeur est tronqu√©e √† la taille de la colonne.                             |
  5606. |    |La table ci dessous illustre les diff√©rences de taille entre les deux types :         |
  5607. |    |Value                                                                                 |
  5608. |    |CHAR(4)                                                                               |
  5609. |    |Storage required                                                                      |
  5610. |    |VARCHAR(4)                                                                            |
  5611. |    |Storage required                                                                      |
  5612. |    |                                                                                      |
  5613. |    |''                                                                                    |
  5614. |    |' '                                                                                   |
  5615. |    |4 bytes                                                                               |
  5616. |    |''                                                                                    |
  5617. |    |1 byte                                                                                |
  5618. |    |                                                                                      |
  5619. |    |'ab'                                                                                  |
  5620. |    |'ab '                                                                                 |
  5621. |    |4 bytes                                                                               |
  5622. |    |'ab'                                                                                  |
  5623. |    |3 bytes                                                                               |
  5624. |    |                                                                                      |
  5625. |    |'abcd'                                                                                |
  5626. |    |'abcd'                                                                                |
  5627. |    |4 bytes                                                                               |
  5628. |    |'abcd'                                                                                |
  5629. |    |5 bytes                                                                               |
  5630. |    |                                                                                      |
  5631. |    |'abcdefgh'                                                                            |
  5632. |    |'abcd'                                                                                |
  5633. |    |4 bytes                                                                               |
  5634. |    |'abcd'                                                                                |
  5635. |    |5 bytes                                                                               |
  5636. |    |                                                                                      |
  5637. |    |Les valeurs retourn√©es seront les m√™mes, car dans tous les cas, les espaces situ√©s en |
  5638. |    |d√©but de cha√Æne seront effac√©es                                                       |
  5639. |    |Les valeurs de type CHAR et VARCHAR sont tri√©es et compar√©es sans tenir compte de la  |
  5640. |    |casse, √† moins que l'option BINARY ai √©t√© activ√©e lors de la cr√©ation de la table.    |
  5641. |    |Cette option signifie que cette colonne sera tri√©e et compar√©e en tenant compte de la |
  5642. |    |casse, et en fonction de l'ordre de la table ASCII de la machine qui supporte MySQL.  |
  5643. |    |Le mode est contagieux : Cela signifie que si une colonne de type binaire est utilis√©e|
  5644. |    |dans une expression, la comparaison tiendra compte de la casse.                       |
  5645. |    |MySQL peut changer spontan√©ment les types de colonne lors de la cr√©ation d'une table..|
  5646. |    |7.6.1 Modifications automatiques de type de colonne.                                  |
  5647. |    |7.2.7.2 Les types BLOB et TEXT                                                        |
  5648. |    |Un BLOB est un binary long object, c'est √† dire un objet binaire long, qui peut       |
  5649. |    |contenir une certaine quantit√© d'information. Les quatre types TINYBLOB, BLOB,        |
  5650. |    |MEDIUMBLOB et LONGBLOB ne diff√®rent que par leur taille maximum. Voir 7.2.1 Tailles   |
  5651. |    |n√©cessaires pour le stockage de types de colonnes.                                    |
  5652. |    |Les quatre types TINYTEXT, TEXT, MEDIUMTEXT t LONGTEXT correspondent aux quatre types |
  5653. |    |BLOB et ont les m√™mes tailles maximum, et les m√™mes conditions de stockage. La seule  |
  5654. |    |diff√©rence entre les types BLOB et TEXT tient aux tris et aux comparaisons : les tris |
  5655. |    |et comparaisons tiennent compte de la casse, dans le cas des TEXT, et n'en tiennent   |
  5656. |    |pas compte, dans le cas des BLOB. En d'autres termes, un TEXT est un BLOB insensible √†|
  5657. |    |la casse.                                                                             |
  5658. |    |Lors de l'affectation d'une valeur de type BLOB ou TEXT dans une colonne trop petite, |
  5659. |    |la valeur est tronqu√©e √† la taille de la colonne.                                     |
  5660. |    |En g√©n√©ral, on peut consid√©rer qu'une colonne de type TEXT est une colonne de type    |
  5661. |    |VARCHAR, aussi grande que d√©sir√©. De la m√™me mani√®re, on peut consid√©rer qu'une       |
  5662. |    |colonne de type BLOB est une colonne de type VARCHAR BINARY, aussi grande que         |
  5663. |    |possible. Les diff√©rences sont :                                                      |
  5664. |    |Il est possible d'indexer les variables de type BLOB et TEXT pour les version de MySQL|
  5665. |    |3.23.2 ou plus r√©centes. Les anciennes versions ne le supporte pas.                   |
  5666. |    |Les espaces situ√©s en d√©but de cha√Æne ne sont pas effac√©s lors de l'enregistrement    |
  5667. |    |dans un BLOB t TEXT, contrairement aux colonnes de type VARCHAR. BLOB and TEXT columns|
  5668. |    |cannot have DEFAULT values.                                                           |
  5669. |    |Les valeurs de type BLOB t TEXT n'ont pas d'option DEFAULT.                           |
  5670. |    |MyODBC utilise le type LONGVARBINARY pour le type BLOB et LONGVARBINARY pour TEXT.    |
  5671. |    |Parce que les types peuvent √™tre extr√™mement grands, il y a certaines contraintes √†   |
  5672. |    |leur utilisation :                                                                    |
  5673. |    |Pour utiliser la clause GROUP BY ou ORDER BY sur une colonne de type BLOB ou TEXT, il |
  5674. |    |faut commencer par convertir la colonne dans un type √† longueur fixe. Pour cela, on   |
  5675. |    |utilise la fonction SUBSTRING. Par exemple :                                          |
  5676. |    |                                                                                      |
  5677. |    |mysql> SELECT commentaires FROM Nom_table , SUBSTRING(commentaires,20) as             |
  5678. |    |souscha√Æne ORDER BY souscha√Æne;                                                       |
  5679. |    |Si SUBSTRING n'est pas utilis√©, le tri portera uniquement sur les max_sort_longueur   |
  5680. |    |premiers octets de la colonne. Par d√©faut, max_sort_longueur vaut 1024, et cette      |
  5681. |    |valeur peut √™tre chang√©e en utilisant l'option , lors du d√©marrage de MySQL. Il est   |
  5682. |    |possible d'utiliser la clause GROUP sur un BLOB or TEXT , en sp√©cifiant la position de|
  5683. |    |la colonne, et en utilisant un alias. Par exemple :                                   |
  5684. |    |                                                                                      |
  5685. |    |mysql> select id,substring(blob_col,1,100) FROM Nom_table                             |
  5686. |    |GROUP BY 2;                                                                           |
  5687. |    |mysql> select id,substring(blob_col,1,100) as b FROM Nom_table                        |
  5688. |    |GROUP BY b;                                                                           |
  5689. |    |La taille maximale d'un objet de type est d√©termin√©e par son type, mais la quantit√©   |
  5690. |    |d'information qu'il est possible de transmettre entre le serveur et le client d√©pend  |
  5691. |    |de la quantit√© de m√©moire vive et de la taille des buffers de communications. Il est  |
  5692. |    |possible de changer la taille des buffers, mais il faut le faire sur le serveur et sur|
  5693. |    |le client.                                                                            |
  5694. |    |Il faut bien noter que chaque valeur de type est repr√©sent√©e de mani√®re interne par un|
  5695. |    |objet allou√©. Contrairement aux autres objets, pour qui l'espace m√©moire est r√©serv√© √†|
  5696. |    |la cr√©ation de la table.                                                              |
  5697. |    |7.2.7.3 Le type ENUM                                                                  |
  5698. |    |Le type est ENUM une cha√Æne, dont la valeur est choisi dans une liste de valeurs      |
  5699. |    |autoris√©es, et sp√©cifi√©es √† la cr√©ation de la table.                                  |
  5700. |    |Cette valeur peut prendre les valeurs ("") ou NULL sous certaines conditions :        |
  5701. |    |Lors de l'insertion d'une valeur invalide dans un ENUM ( par exemple, une cha√Æne qui  |
  5702. |    |ne serait pas dans la liste des valeurs autoris√©es), une cha√Æne vide est ins√©r√©e √† la |
  5703. |    |place, afin d'indiquer une erreur.                                                    |
  5704. |    |Si une ENUM est d√©clar√©e NULL, NULL sera alors une valeur valide pour cette colonne,  |
  5705. |    |et la valeur par d√©faut sera aussi NULL. Si une ENUM est d√©clar√©e NOT NULL, la valeur |
  5706. |    |par d√©faut sera le premier √©l√©ment de la liste de valeurs autoris√©es.                 |
  5707. |    |Chaque √©num√©ration a un index.                                                        |
  5708. |    |Les valeurs autoris√©es sont ordonn√©es et index√©es √† partir de 1.                      |
  5709. |    |L'index de la valeur erreur est 0. Cela signifie qu'il est possible d'utiliser la     |
  5710. |    |clause SELECT pour rechercher des lignes qui auraient une valeur ENUM invalide :      |
  5711. |    |                                                                                      |
  5712. |    |mysql> SELECT * FROM Nom_table WHERE enum_col=0;                                      |
  5713. |    |L'index de la valeur NULL est NULL.                                                   |
  5714. |    |Par exemple, une colonne de type ENUM("un", "deux", "trois") peut prendre chacune des |
  5715. |    |valeurs ci-dessous. L'index de la valeur est aussi indiqu√©.                           |
  5716. |    |Value                                                                                 |
  5717. |    |Index                                                                                 |
  5718. |    |                                                                                      |
  5719. |    |NULL                                                                                  |
  5720. |    |NULL                                                                                  |
  5721. |    |                                                                                      |
  5722. |    |""                                                                                    |
  5723. |    |0                                                                                     |
  5724. |    |                                                                                      |
  5725. |    |"one"                                                                                 |
  5726. |    |1                                                                                     |
  5727. |    |                                                                                      |
  5728. |    |"two"                                                                                 |
  5729. |    |2                                                                                     |
  5730. |    |                                                                                      |
  5731. |    |"three"                                                                               |
  5732. |    |3                                                                                     |
  5733. |    |                                                                                      |
  5734. |    |Une √©num√©ration peut avoir au maximum 65535 √©l√©ments.                                 |
  5735. |    |La casse des lettres est sans importance pour l'affection de valeur dans une colonne  |
  5736. |    |de type ENUM. Cependant, lorsque ces valeurs sont retourn√©es, elles tiennent compte de|
  5737. |    |la casse des lettres tels qu'elle a √©t√© sp√©cifi√©es √† la cr√©ation de la table.         |
  5738. |    |Lire une valeur de type ENUM dans un contexte num√©rique permet d'acc√®der √† l'index de |
  5739. |    |la valeur. De m√™me, lors de l'affectation d'un nombre dans une valeur ENUM, le nombre |
  5740. |    |sera trait√© comme un index, et la valeur enregistr√©e sera celle de l'√©num√©ration, √†   |
  5741. |    |l'index pr√©cis√©.                                                                      |
  5742. |    |Les valeurs d'une √©num√©ration sont tri√©e en fonction de l'ordre dans lequel les       |
  5743. |    |√©l√©ments de l'√©num√©ration sont enregistr√©s lors de la cr√©ation de la colonne (en      |
  5744. |    |d'autres termes, les valeurs d'une √©num√©ration sont tri√©es en fonction de leur index).|
  5745. |    |Par exemple, "a" sera plac√© avant "b" pour ENUM("a", "b"), mais "b" sera plac√© avant  |
  5746. |    |"a" pour ENUM("b", "a").les cha√Ænes vides sont plac√©es avant les cha√Ænes non vides, et|
  5747. |    |la valeur NULL passe avant toutes les autres.                                         |
  5748. |    |Pour visualiser toutes les valeurs d'une colonne de type, il faut utiliser SHOW       |
  5749. |    |COLUMNS FROM Nom_table LIKE Nom_col_enum et d√©tailler les valeurs de la deuxi√®me      |
  5750. |    |colonne.                                                                              |
  5751. |    |7.2.7.4 Le type SET                                                                   |
  5752. |    |Un ensemble est une cha√Æne qui peut avoir aucune, une ou plusieurs valeurs, chaque    |
  5753. |    |valeur √©tant choisie dans une liste de valeur autoris√©es lors de la cr√©ation de la    |
  5754. |    |table. Les valeurs de type SET qui ont plusieurs valeurs sont sp√©cifi√©es en s√©parant  |
  5755. |    |les membres par des virgules(``,'').. Par cons√©quent, les valeurs de type SET ne      |
  5756. |    |peuvent pas contenir de virgule.                                                      |
  5757. |    |Par exemple, une colonne de type SET("un", "deux") NOT NULL peut prendre les valeurs  |
  5758. |    |suivantes :                                                                           |
  5759. |    |                                                                                      |
  5760. |    |""                                                                                    |
  5761. |    |"un"                                                                                  |
  5762. |    |"deux"                                                                                |
  5763. |    |"un, deux"                                                                            |
  5764. |    |Un ensemble peut avoir un maximum de 64 membres distincts.                            |
  5765. |    |MySQL enregistre les valeurs de type SET values num√©riquement, avec le premier √©l√©ment|
  5766. |    |situ√© au bit de poids faible. Lorsqu'une valeur de type SET est retourn√©e dans un     |
  5767. |    |contexte num√©rique, les bits √† 1 de cette valeurs correspondent √† un membre du SET qui|
  5768. |    |appartienne √† cette valeur. Si un nombre est enregistr√© dans une valeur de type SET,  |
  5769. |    |alors les bits mis √† un de ce nombre d√©termineront les membres du SET qui             |
  5770. |    |appartiennent √† la valeur. Par exemple, une colonne a √©t√© sp√©cifi√©e par               |
  5771. |    |SET("a","b","c","d").Alors, les membres prennent la valeur suivante :                 |
  5772. |    |SET member                                                                            |
  5773. |    |Decimal value                                                                         |
  5774. |    |Binary value                                                                          |
  5775. |    |                                                                                      |
  5776. |    |a                                                                                     |
  5777. |    |1                                                                                     |
  5778. |    |0001                                                                                  |
  5779. |    |                                                                                      |
  5780. |    |b                                                                                     |
  5781. |    |2                                                                                     |
  5782. |    |0010                                                                                  |
  5783. |    |                                                                                      |
  5784. |    |c                                                                                     |
  5785. |    |4                                                                                     |
  5786. |    |0100                                                                                  |
  5787. |    |                                                                                      |
  5788. |    |d                                                                                     |
  5789. |    |8                                                                                     |
  5790. |    |1000                                                                                  |
  5791. |    |                                                                                      |
  5792. |    |Pour les valeurs qui contiennent plus d'un membre, l'ordre d'insertion n'importe pas. |
  5793. |    |Une valeur peut √™tre ins√©r√©e plusieurs fois, elle n'appara√Ætra plus qu'une seule fois |
  5794. |    |dans le SET, et sera plac√© dans l'ordre des membres, √† la cr√©ation du SET. Par        |
  5795. |    |exemple, dans une colonne de type SET("a","b","c","d"), alors les valeurs "a, d", "d, |
  5796. |    |a" et "d,a,a,d,d" seront devenues "a, d", lorsqu'elle seront retourn√©es par la base.  |
  5797. |    |Les valeurs de type s SET ont tri√©es par ordre num√©rique. La valeur NULL est plac√©e   |
  5798. |    |avant toutes les autres valeurs non- NULL.                                            |
  5799. |    |En g√©n√©ral, il est possible d'utiliser la clause SELECT sur une colonne de type SET,  |
  5800. |    |en utilisant l'op√©rateur LIKE ou la fonction FIND_IN_SET().                           |
  5801. |    |                                                                                      |
  5802. |    |mysql> SELECT * FROM Nom_table WHERE Nom_col LIKE '%valeur%';                         |
  5803. |    |mysql> SELECT * FROM Nom_table WHERE FIND_IN_SET(valeur, Nom_col)>0;                  |
  5804. |    |Mais les exemples suivants sont aussi corrects                                        |
  5805. |    |                                                                                      |
  5806. |    |mysql> SELECT * FROM Nom_table WHERE Nom_col = 'val1,val2';                           |
  5807. |    |mysql> SELECT * FROM Nom_table WHERE Nom_col & 1;                                     |
  5808. |    |le premier exemple recherche une valeur exacte ('val1,val2'). Le second exemple       |
  5809. |    |recherche les valeurs qui contiennent le premier √©l√©ment.                             |
  5810. |    |Pour visualiser toutes les valeurs d'une colonne de type, il faut utiliser SHOW       |
  5811. |    |COLUMNS FROM Nom_table LIKE Nom_col_enum et d√©tailler les valeurs de la deuxi√®me      |
  5812. |    |colonne.                                                                              |
  5813. |    |7.2.8 Choisir le bon type de colonne                                                  |
  5814. |    |Pour une utilisation aussi efficace de l'espace m√©moire, il faut utiliser le type de  |
  5815. |    |colonne le plus pr√©cis possible. Par exemple, pour stocker un entier dont la valeur va|
  5816. |    |de 1 t 99999, MEDIUMINT UNSIGNED est le meilleur type.                                |
  5817. |    |La repr√©sentation des valeurs mon√©taires est un probl√®me commun. Avec MySQL, le       |
  5818. |    |meilleur choix est le type DECIMAL. Il est enregistr√© comme une cha√Æne, ce qui        |
  5819. |    |n'entra√Æne aucune perte de donn√©es. Si la pr√©cision n'est pas primordiale, le type    |
  5820. |    |DOUBLE peut √™tre un bon choix.                                                        |
  5821. |    |Pour une meilleure pr√©cision, il est toujours possible de convertir les nombres √†     |
  5822. |    |virgule fixe en BIGINT. Cela autorise la manipulation d'entier pour les calculs, et il|
  5823. |    |suffit alors de les reconvertir en valeur √† virgule flottante au moment de            |
  5824. |    |l'affichage. 10.17 Quel sont les diff√©rents formats de lignes? Quand utiliser         |
  5825. |    |VARCHAR/CHAR?.                                                                        |
  5826. |    |7.2.9 Index de colonne                                                                |
  5827. |    |Avec MySQL, tous les types de colonnes peuvent √™tre index√©s, √† l'exception des types  |
  5828. |    |BLOB et TEXT. L'utilisation d'index est le meilleur moyen d'acc√©l√©rer les performances|
  5829. |    |des clauses SELECT.                                                                   |
  5830. |    |Une table peut avoir jusqu'√† 16 index. La taille maximale d'un index est de 256 bytes,|
  5831. |    |et cette valeur peut √™tre choisie √† la compilation de MySQL.                          |
  5832. |    |Il n'est pas possible d'indexer une colonne qui contient des valeurs NULL, donc une   |
  5833. |    |colonne index√©e doit √™tre d√©clar√©e NOT NULL.                                          |
  5834. |    |Pour les colonnes de type CHAR et VARCHAR, il est possible de pr√©fixer la colonne.    |
  5835. |    |C'est un moyen beaucoup plus rapide et qui requiert moins d'espace disque qu'indexer  |
  5836. |    |une colonne compl√®te. La syntaxe pour cr√©er une telle colonne est la suivante :       |
  5837. |    |                                                                                      |
  5838. |    |KEY Nom_index(Nom_col(longueur))                                                      |
  5839. |    |L'exemple suivant cr√©er un index pour les 10 premiers caract√®res de la colonne        |
  5840. |    |Nom_col.                                                                              |
  5841. |    |                                                                                      |
  5842. |    |mysql> CREATE TABLE test (                                                            |
  5843. |    |nom  CHAR(200) NOT NULL,                                                              |
  5844. |    |KEY Nom_index(nom(10)));                                                              |
  5845. |    |7.2.10 Index multi-colonnes                                                           |
  5846. |    |MySQL peut cr√©er des indexes sur plusieurs colonnes en m√™me temps. Un index peut      |
  5847. |    |contenir jusqu'√† 15 colonnes (Avec les colonnes de type CHAR t VARCHAR , il est aussi |
  5848. |    |possible d'utiliser un pr√©fixe lors de l'indexation).                                 |
  5849. |    |Un index de plusieurs colonnes peut √™tre consid√©r√© comme un tableau tri√© contenant les|
  5850. |    |lignes obtenues en concat√©nant les valeurs des colonnes index√©es.                     |
  5851. |    |MySQL g√®re les index sur plusieurs colonnes de mani√®re √† ce que les requ√™tes qui      |
  5852. |    |recherche une valeur connue dans la premi√®re colonne (avec une clause WHERE), soient  |
  5853. |    |rapides, m√™me si les valeurs pour les autres colonnes ne sont pas pr√©cis√©es.          |
  5854. |    |Par exemple, soit la table suivante :                                                 |
  5855. |    |                                                                                      |
  5856. |    |                                                                                      |
  5857. |    |mysql> CREATE TABLE test (                                                            |
  5858. |    |id INT NOT NULL,                                                                      |
  5859. |    |nom CHAR(30) NOT NULL,                                                                |
  5860. |    |prenom CHAR(30) NOT NULL,                                                             |
  5861. |    |PRIMARY KEY (id),                                                                     |
  5862. |    |INDEX nom_complet (nom, prenom));                                                     |
  5863. |    |Ainsi, l'index nom_complet est un index sur les deux colonnes nom et pr√©nom. L'index  |
  5864. |    |sera utilis√© lors des requ√™tes qui recherchent un nom, ou un nom et un pr√©nom. L'index|
  5865. |    |sera donc utilis√© lors des requ√™tes suivantes :                                       |
  5866. |    |                                                                                      |
  5867. |    |mysql> SELECT * FROM test WHERE nom="Dupont";                                         |
  5868. |    |mysql> SELECT * FROM test WHERE nom ="Dupont"                                         |
  5869. |    |AND prenom="Michel";                                                                  |
  5870. |    |mysql> SELECT * FROM test WHERE nom ="Dupont"                                         |
  5871. |    |AND (prenom ="Michel" OR prenom ="Marie");                                            |
  5872. |    |mysql> SELECT * FROM test WHERE nom ="Dupont"                                         |
  5873. |    |AND prenom >="M" AND prenom < "N";                                                    |
  5874. |    |Cependant, l'index ne sera pas utilis√© lors des requ√™tes suivantes :                  |
  5875. |    |                                                                                      |
  5876. |    |mysql> SELECT * FROM test WHERE prenom ="Michel";                                     |
  5877. |    |mysql> SELECT * FROM test WHERE nom="Dupont"                                          |
  5878. |    |OR prenom ="Michel";                                                                  |
  5879. |    |7.2.11 Utiliser des types de colonnes d'autres bases de donn√©es                       |
  5880. |    |Afin de simplifier le portage d'applications √©crite en SQL sur d'autres base de       |
  5881. |    |donn√©es, MySQL remplace automatiquement les types pr√©sent√©s ci-dessous par les siens :|
  5882. |    |                                                                                      |
  5883. |    |Other vendor type                                                                     |
  5884. |    |MySQL type                                                                            |
  5885. |    |                                                                                      |
  5886. |    |BINARY(NUM)                                                                           |
  5887. |    |CHAR(NUM) BINARY                                                                      |
  5888. |    |                                                                                      |
  5889. |    |CHAR VARYING(NUM)                                                                     |
  5890. |    |VARCHAR(NUM)                                                                          |
  5891. |    |                                                                                      |
  5892. |    |FLOAT4                                                                                |
  5893. |    |FLOAT                                                                                 |
  5894. |    |                                                                                      |
  5895. |    |FLOAT8                                                                                |
  5896. |    |DOUBLE                                                                                |
  5897. |    |                                                                                      |
  5898. |    |INT1                                                                                  |
  5899. |    |TINYINT                                                                               |
  5900. |    |                                                                                      |
  5901. |    |INT2                                                                                  |
  5902. |    |SMALLINT                                                                              |
  5903. |    |                                                                                      |
  5904. |    |INT3                                                                                  |
  5905. |    |MEDIUMINT                                                                             |
  5906. |    |                                                                                      |
  5907. |    |INT4                                                                                  |
  5908. |    |INT                                                                                   |
  5909. |    |                                                                                      |
  5910. |    |INT8                                                                                  |
  5911. |    |BIGINT                                                                                |
  5912. |    |                                                                                      |
  5913. |    |LONG VARBINARY                                                                        |
  5914. |    |MEDIUMBLOB                                                                            |
  5915. |    |                                                                                      |
  5916. |    |LONG VARCHAR                                                                          |
  5917. |    |MEDIUMTEXT                                                                            |
  5918. |    |                                                                                      |
  5919. |    |MIDDLEINT                                                                             |
  5920. |    |MEDIUMINT                                                                             |
  5921. |    |                                                                                      |
  5922. |    |VARBINARY(NUM)                                                                        |
  5923. |    |VARCHAR(NUM) BINARY                                                                   |
  5924. |    |                                                                                      |
  5925. |    |Ce remplacement intervient √† la cr√©ation de la table. Apr√®s la cr√©ation d'une table,  |
  5926. |    |les types retourn√©s par une commande DESCRIBE Nom_table seront les types √©quivalent de|
  5927. |    |MySQL.                                                                                |
  5928. |    |7.3 Fonctions utilis√©es dans les clauses SELECT et WHERE                              |
  5929. |    |Une clause select ou where dans une command SQL peut contenir des expressions         |
  5930. |    |utilisant les fonctions d√©crites ci-dessous.                                          |
  5931. |    |Une expression qui contient une valeur aura toujours un r√©sultat , sauf exceptions    |
  5932. |    |indiqu√©es dans la documentation sur les op√©rateurs et fonctions.                      |
  5933. |    |Note: Il faut n√©cessairement un espace entre le nom de la fonction et la parenth√®se   |
  5934. |    |ouvrante qui suit. Cela aide l'analyseur syntaxique de MySQL √† faire la diff√©rence    |
  5935. |    |entre les appels de fonctions et les r√©f√©rences aux tables ou colonnes qui            |
  5936. |    |interviennent dans la m√™me colonne et qui ont le m√™me nom que la fonction. Les espaces|
  5937. |    |autours des arguments aussi autoris√©s.                                                |
  5938. |    |Par souci de bri√®vet√©, les affichages d'exemples seront en mode r√©duit. Par exemple   |
  5939. |    |                                                                                      |
  5940. |    |mysql> select MOD(29,9);                                                              |
  5941. |    |1 rows in set (0.00 sec)                                                              |
  5942. |    |+-----------+                                                                         |
  5943. |    || mod(29,9) |                                                                         |
  5944. |    |+-----------+                                                                         |
  5945. |    ||         2 |                                                                         |
  5946. |    |+-----------+                                                                         |
  5947. |    |Sera affich√© comme suit :                                                             |
  5948. |    |                                                                                      |
  5949. |    |                                                                                      |
  5950. |    |mysql> select MOD(29,9);                                                              |
  5951. |    |-> 2                                                                                  |
  5952. |    |7.3.1 Fonction de groupement                                                          |
  5953. |    |( ... )                                                                               |
  5954. |    |( ... )                                                                               |
  5955. |    |Parenth√®ses. MySQL g√®re les priorit√©s avec les parenth√®ses.                           |
  5956. |    |                                                                                      |
  5957. |    |mysql> select 1+2*3;                                                                  |
  5958. |    |-> 7                                                                                  |
  5959. |    |mysql> select (1+2)*3;                                                                |
  5960. |    |-> 9                                                                                  |
  5961. |    |Parentheses. Use these to force the order of evaluation in an expression.             |
  5962. |    |7.3.2 Op√©rations arithm√©tiques normales                                               |
  5963. |    |Les op√©rateurs arithm√©tiques usuels sont disponible. Il faut bien noter que dans le   |
  5964. |    |cas de -, + et *, le resultat est calcul√© avec la pr√©cision BIGINT (64-bit) si les    |
  5965. |    |deux op√©rateurs sont des entiers.                                                     |
  5966. |    |‚Ä¢  + Addition                                                                         |
  5967. |    |                                                                                      |
  5968. |    |mysql> select 3+5;                                                                    |
  5969. |    |-> 8                                                                                  |
  5970. |    |‚Ä¢  - Soustraction                                                                     |
  5971. |    |                                                                                      |
  5972. |    |mysql> select 3-5;                                                                    |
  5973. |    |-> -2                                                                                 |
  5974. |    |‚Ä¢  * Multiplication                                                                   |
  5975. |    |                                                                                      |
  5976. |    |mysql> select 3*5;                                                                    |
  5977. |    |-> 15                                                                                 |
  5978. |    |mysql> select 18014398509481984*18014398509481984.0;                                  |
  5979. |    |-> 324518553658426726783156020576256.0                                                |
  5980. |    |mysql> select 18014398509481984*18014398509481984;                                    |
  5981. |    |-> 0                                                                                  |
  5982. |    |Le r√©sultat du dernier exemple est incorrect, car le r√©sultat de la multiplication    |
  5983. |    |exc√®de la taille maximale d'un BIGINT.                                                |
  5984. |    |‚Ä¢  / Division                                                                         |
  5985. |    |                                                                                      |
  5986. |    |mysql> select 3/5;                                                                    |
  5987. |    |-> 0.60                                                                               |
  5988. |    |La division par z√©ro retourne une valeur NULL:                                        |
  5989. |    |                                                                                      |
  5990. |    |mysql> select 102/(1-1);                                                              |
  5991. |    |-> NULL                                                                               |
  5992. |    |La division sera calcul√©e avec l'arithm√©tique des BIGINT, uniquement dans le cas ou le|
  5993. |    |r√©sultat doit √™tre converti en entier !                                               |
  5994. |    |7.3.3 Fonctions sur les bits                                                          |
  5995. |    |MySQL utilise des BIGINT (64-bit) pour ses op√©rations sur les bits, donc tous les     |
  5996. |    |op√©rateurs suivants ont au portent au plus 64 bits.                                   |
  5997. |    |‚Ä¢  | OU bit √† bit                                                                     |
  5998. |    |                                                                                      |
  5999. |    |mysql> select 29 | 15;                                                                |
  6000. |    |-> 31                                                                                 |
  6001. |    |‚Ä¢  & ET bit √† bit                                                                     |
  6002. |    |                                                                                      |
  6003. |    |mysql> select 29 & 15;                                                                |
  6004. |    |-> 13                                                                                 |
  6005. |    |‚Ä¢  << D√©calage des bits vers la gauche sur un BIGINT.                                 |
  6006. |    |                                                                                      |
  6007. |    |mysql> select 1 << 2                                                                  |
  6008. |    |-> 4                                                                                  |
  6009. |    |‚Ä¢  >> D√©calage des bits vers la droite sur un BIGINT.                                 |
  6010. |    |                                                                                      |
  6011. |    |mysql> select 4 >> 2                                                                  |
  6012. |    |-> 1                                                                                  |
  6013. |    |‚Ä¢  BIT_COUNT(N) Compte le nombre de bits mis √† un dans l'argument N.                  |
  6014. |    |                                                                                      |
  6015. |    |mysql> select BIT_COUNT(29);                                                          |
  6016. |    |-> 4                                                                                  |
  6017. |    |7.3.4 Op√©rations logiques                                                             |
  6018. |    |Toutes les op√©rations logiques retournent 1 (TRUE) ou 0 (FALSE).                      |
  6019. |    |‚Ä¢  NOT                                                                                |
  6020. |    |‚Ä¢  ! NON logique. Retourne 1 si l'argument est 0, sinon, retourne 0. Exception: NOT   |
  6021. |    |NULL retourne NULL.                                                                   |
  6022. |    |                                                                                      |
  6023. |    |mysql> select NOT 1;                                                                  |
  6024. |    |-> 0                                                                                  |
  6025. |    |mysql> select NOT NULL;                                                               |
  6026. |    |-> NULL                                                                               |
  6027. |    |mysql> select ! (1+1);                                                                |
  6028. |    |-> 0                                                                                  |
  6029. |    |mysql> select ! 1+1;                                                                  |
  6030. |    |-> 1                                                                                  |
  6031. |    |Le dernier exemple retourne 1 car l'expression est √©valu√©e de la m√™me fa√ßon que       |
  6032. |    |(!1)+1.                                                                               |
  6033. |    |‚Ä¢  OR                                                                                 |
  6034. |    |‚Ä¢  || OU logique. Retourne 1 si l'un des arguments est ni 0 ni NULL.                  |
  6035. |    |                                                                                      |
  6036. |    |mysql> select 1 || 0;                                                                 |
  6037. |    |-> 1                                                                                  |
  6038. |    |mysql> select 0 || 0;                                                                 |
  6039. |    |-> 0                                                                                  |
  6040. |    |mysql> select 1 || NULL;                                                              |
  6041. |    |-> 1                                                                                  |
  6042. |    |‚Ä¢  AND                                                                                |
  6043. |    |‚Ä¢  && ET logique. Retourne 0 si l'un des arguments est 0 ou NULL. Sinon, retourne 1.  |
  6044. |    |                                                                                      |
  6045. |    |mysql> select 1 && NULL;                                                              |
  6046. |    |-> 0                                                                                  |
  6047. |    |mysql> select 1 && 0;                                                                 |
  6048. |    |-> 0                                                                                  |
  6049. |    |7.3.5 Op√©rateurs de comparaison                                                       |
  6050. |    |Les op√©rations de comparaison retourne soit 1 (TRUE), 0 (FALSE) ou NULL. Ces fonctions|
  6051. |    |s'appliquent aussi bien aux nombres qu'aux cha√Ænes. Les cha√Ænes sont automatiquement  |
  6052. |    |converties en nombre et les nombres en cha√Æne, suivant les besoins (comme en Perl).   |
  6053. |    |MySQL effectue les comparaisons en suivant les r√®gle suivantes                        |
  6054. |    |Si l'un au moins des argument est NULL, le r√©sultat de la comparaison est NULL.       |
  6055. |    |Si les deux argument sont des cha√Ænes, ils se comparent en tant que cha√Ænes.          |
  6056. |    |Si les deux argument sont des entiers, ils se comparent en tant que entiers.          |
  6057. |    |Si les deux argument est de type TIMESTAMP ou DATETIME, et l'autre argument est une   |
  6058. |    |constante, la constante est convertie au format TIMESTAMP avant la comparaison. Cette |
  6059. |    |fonction est faite pour assurer la compatibilit√© ODBC.                                |
  6060. |    |Dans tous les autres cas, les arguments sont compar√©s en tant que nombre √† virgule    |
  6061. |    |flottante.                                                                            |
  6062. |    |Par d√©faut, les comparaisons de cha√Æne sont fait sans tenir compte de la casse, et en |
  6063. |    |utilisant le jeu de caract√®re courant (ISO-8859-1 Latin1 par d√©faut, qui fonctionne   |
  6064. |    |bien pour l'anglais). Les exemples suivants illustrent les r√®gles de conversions lors |
  6065. |    |des op√©rations de comparaison.                                                        |
  6066. |    |                                                                                      |
  6067. |    |mysql> SELECT 1 > '6x';                                                               |
  6068. |    |-> 0                                                                                  |
  6069. |    |mysql> SELECT 7 > '6x';                                                               |
  6070. |    |-> 1                                                                                  |
  6071. |    |mysql> SELECT 0 > 'x6';                                                               |
  6072. |    |-> 0                                                                                  |
  6073. |    |mysql> SELECT 0 = 'x6';                                                               |
  6074. |    |-> 1                                                                                  |
  6075. |    |‚Ä¢  = Egalit√©.                                                                         |
  6076. |    |                                                                                      |
  6077. |    |mysql> select 1 = 0;                                                                  |
  6078. |    |-> 0                                                                                  |
  6079. |    |mysql> select '0' = 0;                                                                |
  6080. |    |-> 1                                                                                  |
  6081. |    |mysql> select '0.0' = 0;                                                              |
  6082. |    |-> 1                                                                                  |
  6083. |    |mysql> select '0.01' = 0;                                                             |
  6084. |    |-> 0                                                                                  |
  6085. |    |mysql> select '.01' = 0.01;                                                           |
  6086. |    |-> 1                                                                                  |
  6087. |    |‚Ä¢  <>                                                                                 |
  6088. |    |‚Ä¢  != Diff√©rent                                                                       |
  6089. |    |                                                                                      |
  6090. |    |mysql> select '.01' <> '0.01';                                                        |
  6091. |    |-> 1                                                                                  |
  6092. |    |mysql> select .01 <> '0.01';                                                          |
  6093. |    |-> 0                                                                                  |
  6094. |    |mysql> select 'zorro' <> 'zorrro';                                                    |
  6095. |    |-> 1                                                                                  |
  6096. |    |‚Ä¢  <= Inf√©rieur ou √©gal                                                               |
  6097. |    |                                                                                      |
  6098. |    |mysql> select 0.1 <= 2;                                                               |
  6099. |    |-> 1                                                                                  |
  6100. |    |‚Ä¢  < Strictement inf√©rieur                                                            |
  6101. |    |                                                                                      |
  6102. |    |mysql> select 2 <= 2;                                                                 |
  6103. |    |-> 1                                                                                  |
  6104. |    |‚Ä¢  >= Sup√©rieur ou √©gal                                                               |
  6105. |    |                                                                                      |
  6106. |    |mysql> select 2 >= 2;                                                                 |
  6107. |    |-> 1                                                                                  |
  6108. |    |‚Ä¢  > Strictement sup√©rieur                                                            |
  6109. |    |                                                                                      |
  6110. |    |mysql> select 2 > 2;                                                                  |
  6111. |    |-> 0                                                                                  |
  6112. |    |‚Ä¢  <=> Egalit√© : ce op√©rateur s'assure qu'on ne compare pas NULL et une valeur non    |
  6113. |    |nulle.                                                                                |
  6114. |    |                                                                                      |
  6115. |    |mysql> select 1 <=> 1, NULL <=> NULL, 1 <=> NULL;                                     |
  6116. |    |-> 1 1 0                                                                              |
  6117. |    |‚Ä¢  expression BETWEEN minimum AND maximum Si l'expression est comprise entre le       |
  6118. |    |minimum et le maximum, alors BETWEEN retourne 1, sinon 0. Cette fonction est          |
  6119. |    |√©quivalente √† l'expression (minimum <= expression AND expression <= maximum) si tous  |
  6120. |    |les arguments sont du m√™me type. Le premier argument (expression) d√©termine la mani√®re|
  6121. |    |dont la comparaison va √™tre faite. Si expression est une cha√Æne, la comparaison sera  |
  6122. |    |de type cha√Æne, et insensible √† la casse. Si expression est une cha√Æne de type        |
  6123. |    |binaire, la comparaison sera de type cha√Æne, et sensible √† la casse. Si expression est|
  6124. |    |un entier, la comparaison sera de type num√©rique. Si expression est un nombre √†       |
  6125. |    |virgule flottante, la comparaison sera de type num√©rique, √† virgule flottante.        |
  6126. |    |                                                                                      |
  6127. |    |mysql> select 1 BETWEEN 2 AND 3;                                                      |
  6128. |    |-> 0                                                                                  |
  6129. |    |mysql> select 'b' BETWEEN 'a' AND 'c';                                                |
  6130. |    |-> 1                                                                                  |
  6131. |    |mysql> select 2 BETWEEN 2 AND '3';                                                    |
  6132. |    |-> 1                                                                                  |
  6133. |    |mysql> select 2 BETWEEN 2 AND 'x-3';                                                  |
  6134. |    |-> 0                                                                                  |
  6135. |    |‚Ä¢  expression IN (value,...) Retourne 1 si expression est un membre de la liste IN,   |
  6136. |    |sinon retourne 0.Si toutes les valeurs de la liste IN sont constantes, alors elles    |
  6137. |    |sont toutes converties au type de expression, et tri√©es. La recherche dans la listes  |
  6138. |    |est alors faite avec une recherche binaire. Cela signifie que la recherche est tr√®s   |
  6139. |    |rapide si la liste IN ne contient que des constantes. Si expression est une cha√Æne    |
  6140. |    |sensible √† la casse, la comparaison avec les valeurs de IN en tiendra compte.         |
  6141. |    |                                                                                      |
  6142. |    |mysql> select 2 IN (0,3,5,'wefwf');                                                   |
  6143. |    |-> 0                                                                                  |
  6144. |    |mysql> select 'wefwf' IN (0,3,5,'wefwf');                                             |
  6145. |    |-> 1                                                                                  |
  6146. |    |‚Ä¢  expression NOT IN (value,...) Identique √† NOT (expression IN (value,...)).         |
  6147. |    |‚Ä¢  ISNULL(expression ) Si expression est NULL, ISNULL() retourne 1, sinon 0.          |
  6148. |    |                                                                                      |
  6149. |    |mysql> select ISNULL(1+1);                                                            |
  6150. |    |-> 0                                                                                  |
  6151. |    |mysql> select ISNULL(1/0);                                                            |
  6152. |    |-> 1                                                                                  |
  6153. |    |Il faut noter que la comparaison √† NULL avec = sera toujours fausse!                  |
  6154. |    |‚Ä¢  COALESCE(liste) Retourne le premier √©l√©ment non NULL dans la liste.                |
  6155. |    |                                                                                      |
  6156. |    |mysql> select COALESCE(NULL,1);                                                       |
  6157. |    |-> 1                                                                                  |
  6158. |    |mysql> select ISNULL(NULL,NULL,NULL);                                                 |
  6159. |    |-> NULL                                                                               |
  6160. |    |‚Ä¢  INTERVAL(N,N1,N2,N3,...) Retourne 1 si N1 < N2 < N3 < ... < Nn . Si il existe deux |
  6161. |    |valeurs i et j, telles que i < j et Ni > Nj, alors la fonction retourne faux. Toutes  |
  6162. |    |les valeurs sont trait√©es comme des nombres. Cela permet l'utilisation d'une          |
  6163. |    |comparaison binaire, tr√®s rapide.                                                     |
  6164. |    |                                                                                      |
  6165. |    |mysql> select INTERVAL(23, 1, 15, 17, 30, 44, 200);                                   |
  6166. |    |-> 3                                                                                  |
  6167. |    |mysql> select INTERVAL(10, 1, 10, 100, 1000);                                         |
  6168. |    |-> 2                                                                                  |
  6169. |    |mysql> select INTERVAL(22, 23, 30, 44, 200);                                          |
  6170. |    |-> 0                                                                                  |
  6171. |    |7.3.6 Fonctions de comparaisons des cha√Ænes                                           |
  6172. |    |Dans une expression quelconque, si une des cha√Ænes est sensible √† la casse, alors la  |
  6173. |    |comparaison tiendra compte de la casse.                                               |
  6174. |    |‚Ä¢  expr1 LIKE expr2 [ESCAPE 'escape-char'] Expression r√©guli√®re SQL. Retourne 1 (TRUE)|
  6175. |    |ou 0 (FALSE). Avec LIKE, les caract√®res sp√©ciaux suivants sont disponibles :          |
  6176. |    |                                                                                      |
  6177. |    |mysql> select 'David!' LIKE 'David_';                                                 |
  6178. |    |-> 1                                                                                  |
  6179. |    |mysql> select 'David!' LIKE '%D%v%';                                                  |
  6180. |    |-> 1                                                                                  |
  6181. |    |Pour tester la pr√©sence d'un des caract√®res sp√©ciaux, il suffit de faire pr√©c√©der du  |
  6182. |    |caract√®re d'√©chappement. Si ce dernier n'est pas pr√©cis√©, le caract√®re ``\'' est alors|
  6183. |    |utilis√©.                                                                              |
  6184. |    |                                                                                      |
  6185. |    |mysql> select 'David!' LIKE 'David\_';                                                |
  6186. |    |-> 0                                                                                  |
  6187. |    |mysql> select 'David_' LIKE 'David\_';                                                |
  6188. |    |-> 1                                                                                  |
  6189. |    |Pour sp√©cifier un autre caract√®re d'√©chappement, il faut utiliser la clause ESCAPE :  |
  6190. |    |                                                                                      |
  6191. |    |mysql> select 'David_' LIKE 'David|_' ESCAPE '|';                                     |
  6192. |    |-> 1                                                                                  |
  6193. |    |LIKE peut travailler avec des expressions num√©riques (c'est une extension de la norme |
  6194. |    |ANSI SQL.)                                                                            |
  6195. |    |                                                                                      |
  6196. |    |mysql> select 10 LIKE '1%';                                                           |
  6197. |    |-> 1                                                                                  |
  6198. |    |Note: Comme MySQL utilise le syst√®me d'√©chappement du langage C (e.g., ``\n''), il    |
  6199. |    |faut doubler toutes les occurrences dans les clause LIKE. Par exemple, pour rechercher|
  6200. |    |le caract√®re ``\n'', il faut mettre la cha√Æne ``\\n''. Pour recherche le caract√®re for|
  6201. |    |``\'', il faut l'√©crire ``\\\\'' (les backslashes sont supprim√©s une premi√®re fois par|
  6202. |    |l'analyseur syntaxique, et une deuxi√®me fois, quand la recherche est termin√©e : ce qui|
  6203. |    |laisse un seul backslash √† rechercher).                                               |
  6204. |    |‚Ä¢  ‚Ä¢  expr1 NOT LIKE expr2 [ESCAPE 'escape-char'] Identique √† NOT (expr1 LIKE expr2   |
  6205. |    |[ESCAPE 'escape-char']).                                                              |
  6206. |    |‚Ä¢  expr REGEXP pat                                                                    |
  6207. |    |‚Ä¢  expr RLIKE pat                                                                     |
  6208. |    |‚Ä¢  expression REGEXP pat                                                              |
  6209. |    |‚Ä¢  expression RLIKE pat Effectue une chercher sur la cha√Æne expression avec le masque |
  6210. |    |pat. Le pattern peut √™tre une expression r√©guli√®re √©tendue. Retoune 1 si l'expression |
  6211. |    |r√©guli√®re r√©ussit, 0. RLIKE est un synonyme pour REGEXP, fourni pour assurer la       |
  6212. |    |compatibilit√© avec mSQL Note: Comme MySQL utilise le syst√®me d'√©chappement du langage |
  6213. |    |C (e.g., ``\n''), il faut doubler toutes les occurrences dans les clause. REGEXP .    |
  6214. |    |                                                                                      |
  6215. |    |                                                                                      |
  6216. |    |mysql> select 'Monty!' REGEXP 'm%y%%';                                                |
  6217. |    |-> 0                                                                                  |
  6218. |    |mysql> select 'Monty!' REGEXP '.*';                                                   |
  6219. |    |-> 1                                                                                  |
  6220. |    |mysql> select 'new*\n*line' REGEXP 'new\\*.\\*line';                                  |
  6221. |    |-> 1                                                                                  |
  6222. |    |REGEXP et RLIKE utilisent le jeu de caract√®re (ISO-8859-1 Latin1 par d√©faut) pour     |
  6223. |    |choisir le type de caract√®re.                                                         |
  6224. |    |‚Ä¢  expr NOT REGEXP pat                                                                |
  6225. |    |‚Ä¢  expr NOT RLIKE pat                                                                 |
  6226. |    |‚Ä¢  expression NOT REGEXP expression Identique √† NOT (expression REGEXP expression ).  |
  6227. |    |‚Ä¢  STRCMP(expr1,expr2) STRCMP() retourne 0 si les cha√Ænes sont identiques, -1 si le   |
  6228. |    |premier argument est plus petit que le second, en fonction de l'ordre de tri courant, |
  6229. |    |et sinon 1 .                                                                          |
  6230. |    |                                                                                      |
  6231. |    |mysql> select STRCMP('text', 'text2');                                                |
  6232. |    |-> -1                                                                                 |
  6233. |    |mysql> select STRCMP('text2', 'text');                                                |
  6234. |    |-> 1                                                                                  |
  6235. |    |mysql> select STRCMP('text', 'text');                                                 |
  6236. |    |-> 0                                                                                  |
  6237. |    |7.3.7 Op√©rateurs de transtypage                                                       |
  6238. |    |‚Ä¢  BINARY L'op√©rateur BINARY transforme la cha√Æne qui le suive en cha√Æne insensible √† |
  6239. |    |la casse. C'est un moyen simple de forcer une comparaison insensible √† la casse, m√™me |
  6240. |    |si la colonne n'a pas √©t√© d√©finie comme un BINARY ou BLOB.                            |
  6241. |    |                                                                                      |
  6242. |    |mysql> select "a" = "A";                                                              |
  6243. |    |-> 1                                                                                  |
  6244. |    |mysql> select BINARY "a" = "A";                                                       |
  6245. |    |-> 0                                                                                  |
  6246. |    |BINARY a √©t√© introduit dans MySQL 3.23.0                                              |
  6247. |    |7.3.8 Fonctions de contr√¥le                                                           |
  6248. |    |‚Ä¢  IFNULL(expr1,expr2) Si expr1 n'est pas NULL, IFNULL() retourne expr1, sinon expr2. |
  6249. |    |IFNULL() retourne un nombre ou une cha√Æne, en fonction du contexte dans lequel il est |
  6250. |    |utilis√©.                                                                              |
  6251. |    |                                                                                      |
  6252. |    |mysql> select IFNULL(1,0);                                                            |
  6253. |    |-> 1                                                                                  |
  6254. |    |mysql> select IFNULL(0,10);                                                           |
  6255. |    |-> 0                                                                                  |
  6256. |    |mysql> select IFNULL(1/0,10);                                                         |
  6257. |    |-> 10                                                                                 |
  6258. |    |mysql> select IFNULL(1/0,'yes');                                                      |
  6259. |    |-> 'yes'                                                                              |
  6260. |    |‚Ä¢  IF(expr1,expr2,expr3) Si expr1 est vraie (TRUE) (expr1 <> 0 et expr1 <> NULL) alors|
  6261. |    |IF() retourne expr2, sinon il retourne expr3. IF() retourne un nombre ou une cha√Æne,  |
  6262. |    |en fonction du contexte dans lequel il est utilis√©.                                   |
  6263. |    |                                                                                      |
  6264. |    |mysql> select IF(1>2,2,3);                                                            |
  6265. |    |-> 3                                                                                  |
  6266. |    |mysql> select IF(1<2,'yes','no');                                                     |
  6267. |    |-> 'yes'                                                                              |
  6268. |    |mysql> select IF(strcmp('test','test1'),'yes','no');                                  |
  6269. |    |-> 'no'                                                                               |
  6270. |    |expr1 est √©valu√©e en tant qu'entier, ce qui signifie que si le test portait sur un    |
  6271. |    |nombre √† virgule flottante ou une cha√Æne, il faudrait mieux utiliser un op√©rateur de  |
  6272. |    |comparaison.                                                                          |
  6273. |    |                                                                                      |
  6274. |    |mysql> select IF(0.1,1,0);                                                            |
  6275. |    |-> 0                                                                                  |
  6276. |    |mysql> select IF(0.1<>0,1,0);                                                         |
  6277. |    |-> 1                                                                                  |
  6278. |    |Dans le premier cas ci-dessus, IF(0.1) retourne 0 car 0.1 est converti en un nombre   |
  6279. |    |entier, ce qui conduit √† un test de type IF(0). C'est une source d'erreur. Dans le    |
  6280. |    |deuxi√®me cas, la comparaison est faite avec un op√©rateur de comparaison, qui teste la |
  6281. |    |non nullit√©. Le r√©sultat de la comparaison est utilis√© comme un entier.               |
  6282. |    |‚Ä¢  CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] |
  6283. |    |[ELSE result] END                                                                     |
  6284. |    |‚Ä¢  CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] |
  6285. |    |END La premi√®re version retourne result si value=compare-value. La seconde version    |
  6286. |    |retourne le r√©sultat si la premi√®re condition est vraie. Si il n'y a aucun r√©sultat,  |
  6287. |    |alors, le r√©sultat apr√®s ELSE est retourn√©. SI il n'y a pas de r√©sultat pour ELSE     |
  6288. |    |alors NULL.                                                                           |
  6289. |    |                                                                                      |
  6290. |    |mysql> SELECT CASE 1 WHEN 1 THEN "un" WHEN 2 THEN "deux" ELSE "plus" END;             |
  6291. |    |-> "un"                                                                               |
  6292. |    |mysql> SELECT CASE WHEN 1>0 THEN "vrai" ELSE "faux" END;                              |
  6293. |    |-> "vrai"                                                                             |
  6294. |    |mysql> SELECT CASE BINARY "B" when "a" then 1 when "b" then 2 END;                    |
  6295. |    |-> NULL                                                                               |
  6296. |    |7.3.9 Fonctions math√©matiques                                                         |
  6297. |    |Toutes les fonctions math√©matiques retourne NULL en cas d'erreur.                     |
  6298. |    |‚Ä¢  - Moins unaire. Change le signe de l'argument.                                     |
  6299. |    |                                                                                      |
  6300. |    |mysql> select - 2;                                                                    |
  6301. |    |-> -2                                                                                 |
  6302. |    |Note : si cet op√©rateur est utilis√© avec un BIGINT, le r√©sultat sera BIGINT! Cela     |
  6303. |    |signifie qu'il faut √©viter d'utiliser ‚Äì sur des entiers qui ont la valeur -2^63!      |
  6304. |    |‚Ä¢  ABS(X) Valeur absolue de X.                                                        |
  6305. |    |                                                                                      |
  6306. |    |mysql> select ABS(2);                                                                 |
  6307. |    |-> 2                                                                                  |
  6308. |    |mysql> select ABS(-32);                                                               |
  6309. |    |-> 32                                                                                 |
  6310. |    |Cette fonction ne pose aucun probl√®me particulier avec les valeurs de type BIGINT.    |
  6311. |    |‚Ä¢  SIGN(X) Retourne le signe de l'argument sous la forme -1, 0 or 1, suivant que X est|
  6312. |    |n√©gatif, nul, ou positif.                                                             |
  6313. |    |                                                                                      |
  6314. |    |mysql> select SIGN(-32);                                                              |
  6315. |    |-> -1                                                                                 |
  6316. |    |mysql> select SIGN(0);                                                                |
  6317. |    |-> 0                                                                                  |
  6318. |    |mysql> select SIGN(234);                                                              |
  6319. |    |-> 1                                                                                  |
  6320. |    |‚Ä¢  MOD(N,M)                                                                           |
  6321. |    |‚Ä¢  % Modulo (identique √† l'op√©rateur % en langage C). Retourne le reste de la division|
  6322. |    |euclidienne de N par M.                                                               |
  6323. |    |                                                                                      |
  6324. |    |mysql> select MOD(234, 10);                                                           |
  6325. |    |-> 4                                                                                  |
  6326. |    |mysql> select 253 % 7;                                                                |
  6327. |    |-> 1                                                                                  |
  6328. |    |mysql> select MOD(29,9);                                                              |
  6329. |    |-> 2                                                                                  |
  6330. |    |Cette fonction ne pose aucun probl√®me particulier avec les valeurs de type BIGINT.    |
  6331. |    |‚Ä¢  FLOOR(X) Retourne le plus grand entier possible mais plus petit que X.             |
  6332. |    |                                                                                      |
  6333. |    |mysql> select FLOOR(1.23);                                                            |
  6334. |    |-> 1                                                                                  |
  6335. |    |mysql> select FLOOR(-1.23);                                                           |
  6336. |    |-> -2                                                                                 |
  6337. |    |Note : le r√©sultat est converti en BIGINT!                                            |
  6338. |    |‚Ä¢  CEILING(X) Retourne le plus petit entier possible mais plus grand que X.           |
  6339. |    |                                                                                      |
  6340. |    |mysql> select CEILING(1.23);                                                          |
  6341. |    |-> 2                                                                                  |
  6342. |    |mysql> select CEILING(-1.23);                                                         |
  6343. |    |-> -1                                                                                 |
  6344. |    |Note : le r√©sultat est converti en BIGINT!                                            |
  6345. |    |‚Ä¢  ROUND(X) Retourne l'argument X, arrondi √† l'entier le plus proche.                 |
  6346. |    |                                                                                      |
  6347. |    |mysql> select ROUND(-1.23);                                                           |
  6348. |    |-> -1                                                                                 |
  6349. |    |mysql> select ROUND(-1.58);                                                           |
  6350. |    |-> -2                                                                                 |
  6351. |    |mysql> select ROUND(1.58);                                                            |
  6352. |    |-> 2                                                                                  |
  6353. |    |Note : le r√©sultat est converti en BIGINT!                                            |
  6354. |    |‚Ä¢  ROUND(X,D) Retourne l'argument X, arrondi au d√©cimal le plus proche, avec D        |
  6355. |    |d√©cimales. Si D =0, le r√©sultat n'aura pas de partie d√©cimale.                        |
  6356. |    |                                                                                      |
  6357. |    |mysql> select ROUND(1.298, 1);                                                        |
  6358. |    |-> 1.3                                                                                |
  6359. |    |mysql> select ROUND(1.298, 0);                                                        |
  6360. |    |-> 1                                                                                  |
  6361. |    |Note : le r√©sultat est converti en BIGINT!                                            |
  6362. |    |‚Ä¢  EXP(X) Retourne la valeur de e (base des logarithmes naturels ou n√©p√©riens) √† la   |
  6363. |    |puissance X.                                                                          |
  6364. |    |                                                                                      |
  6365. |    |mysql> select EXP(2);                                                                 |
  6366. |    |-> 7.389056                                                                           |
  6367. |    |mysql> select EXP(-2);                                                                |
  6368. |    |-> 0.135335                                                                           |
  6369. |    |‚Ä¢  LOG(X) Retourne le logarithme naturel de X.                                        |
  6370. |    |                                                                                      |
  6371. |    |mysql> select LOG(2);                                                                 |
  6372. |    |-> 0.693147                                                                           |
  6373. |    |mysql> select LOG(-2);                                                                |
  6374. |    |-> NULL                                                                               |
  6375. |    |Pour obtenir la valeur du logarithme de X dans une base arbitraire, il faut utiliser  |
  6376. |    |la formule LOG(X)/LOG(B).                                                             |
  6377. |    |‚Ä¢  LOG10(X) Retourne le logarithme de X en base 10.                                   |
  6378. |    |                                                                                      |
  6379. |    |mysql> select LOG10(2);                                                               |
  6380. |    |-> 0.301030                                                                           |
  6381. |    |mysql> select LOG10(100);                                                             |
  6382. |    |-> 2.000000                                                                           |
  6383. |    |mysql> select LOG10(-100);                                                            |
  6384. |    |-> NULL                                                                               |
  6385. |    |‚Ä¢  POW(X,Y)                                                                           |
  6386. |    |‚Ä¢  POWER(X,Y) Retourne la valeur de X √† la puissance Y.                               |
  6387. |    |                                                                                      |
  6388. |    |mysql> select POW(2,2);                                                               |
  6389. |    |-> 4.000000                                                                           |
  6390. |    |mysql> select POW(2,-2);                                                              |
  6391. |    |-> 0.250000                                                                           |
  6392. |    |‚Ä¢  SQRT(X) Retourne la racine carr√©e positive de X.                                   |
  6393. |    |                                                                                      |
  6394. |    |mysql> select SQRT(4);                                                                |
  6395. |    |-> 2.000000                                                                           |
  6396. |    |mysql> select SQRT(20);                                                               |
  6397. |    |-> 4.472136                                                                           |
  6398. |    |‚Ä¢  PI() Retourne la valeur de PI.                                                     |
  6399. |    |                                                                                      |
  6400. |    |mysql> select PI();                                                                   |
  6401. |    |-> 3.141593                                                                           |
  6402. |    |‚Ä¢  COS(X) Retourne le cosinus de X, avec X en radians.                                |
  6403. |    |                                                                                      |
  6404. |    |                                                                                      |
  6405. |    |mysql> select COS(PI());                                                              |
  6406. |    |-> -1.000000                                                                          |
  6407. |    |‚Ä¢  SIN(X) Retourne le sinus de X, avec X en radians.                                  |
  6408. |    |                                                                                      |
  6409. |    |mysql> select SIN(PI());                                                              |
  6410. |    |-> 0.000000                                                                           |
  6411. |    |‚Ä¢  TAN(X) Retourne la tangente de X, avec X en radians.                               |
  6412. |    |                                                                                      |
  6413. |    |mysql> select TAN(PI()+1);                                                            |
  6414. |    |-> 1.557408                                                                           |
  6415. |    |‚Ä¢  ACOS(X) Retourne l'arcosinus de X, c'est √† dire l'angle dont le cosinus est X en   |
  6416. |    |radians. Retourne NULL si X n'est pas compris entre -1 et 1.                          |
  6417. |    |                                                                                      |
  6418. |    |mysql> select ACOS(1);                                                                |
  6419. |    |-> 0.000000                                                                           |
  6420. |    |mysql> select ACOS(1.0001);                                                           |
  6421. |    |-> NULL                                                                               |
  6422. |    |mysql> select ACOS(0);                                                                |
  6423. |    |-> 1.570796                                                                           |
  6424. |    |‚Ä¢  ASIN(X) Retourne l'arsinus de X, c'est √† dire l'angle dont le sinus est X en       |
  6425. |    |radians. Retourne NULL si X n'est pas compris entre -1 et 1.                          |
  6426. |    |                                                                                      |
  6427. |    |mysql> select ASIN(0.2);                                                              |
  6428. |    |-> 0.201358                                                                           |
  6429. |    |mysql> select ASIN('foo');                                                            |
  6430. |    |-> 0.000000                                                                           |
  6431. |    |‚Ä¢  ATAN(X) Retourne l'arctangente de X, c'est √† dire l'angle dont la tangente est X en|
  6432. |    |radians.                                                                              |
  6433. |    |                                                                                      |
  6434. |    |mysql> select ATAN(2);                                                                |
  6435. |    |-> 1.107149                                                                           |
  6436. |    |mysql> select ATAN(-2);                                                               |
  6437. |    |-> -1.107149                                                                          |
  6438. |    |‚Ä¢  ATAN2(X,Y) Retourne l'arc tangente de deux variables X et Y. C'est le m√™me calcul  |
  6439. |    |que arc tangent of Y / X, hormis le fait que les signes des deux arguments est utilis√©|
  6440. |    |pour d√©terminer le quadrant du r√©sultat.                                              |
  6441. |    |                                                                                      |
  6442. |    |mysql> select ATAN(-2,2);                                                             |
  6443. |    |-> -0.785398                                                                          |
  6444. |    |mysql> select ATAN(PI(),0);                                                           |
  6445. |    |-> 1.570796                                                                           |
  6446. |    |‚Ä¢  COT(X) Retourne la cotangente de X.                                                |
  6447. |    |                                                                                      |
  6448. |    |mysql> select COT(12);                                                                |
  6449. |    |-> -1.57267341                                                                        |
  6450. |    |mysql> select COT(0);                                                                 |
  6451. |    |-> NULL                                                                               |
  6452. |    |‚Ä¢  RAND()                                                                             |
  6453. |    |‚Ä¢  RAND(N) Retourne un nombre al√©atoire, compris entre 0 et 1.0. Si un entier N est   |
  6454. |    |pr√©cis√©, il est utilis√© comme valeur de seed.                                         |
  6455. |    |                                                                                      |
  6456. |    |mysql> select RAND();                                                                 |
  6457. |    |-> 0.5925                                                                             |
  6458. |    |mysql> select RAND(20);                                                               |
  6459. |    |-> 0.1811                                                                             |
  6460. |    |mysql> select RAND(20);                                                               |
  6461. |    |-> 0.1811                                                                             |
  6462. |    |mysql> select RAND();                                                                 |
  6463. |    |-> 0.2079                                                                             |
  6464. |    |mysql> select RAND();                                                                 |
  6465. |    |-> 0.7888                                                                             |
  6466. |    |Il est impossible d'utiliser une colonne de valeur RAND() avec la clause ORDER BY ,   |
  6467. |    |car la colonne sera √©valu√© plusieurs fois. Avec MySQL 3.23, il est cependant possible |
  6468. |    |d'√©crire: SELECT * FROM Nom_table ORDER BY RAND(). Comme cela, il est possible de     |
  6469. |    |faire une s√©lection al√©atoire d'une table : SELECT * FROM table1,table2 WHERE a=b AND |
  6470. |    |c<d ORDER BY RAND() LIMIT 1000.                                                       |
  6471. |    |‚Ä¢  LEAST(X,Y,...) Au moins deux arguments, retourne la plus petite valeur (minimum).  |
  6472. |    |Les arguments sont compar√©s en utilisant les r√®gles suivantes :                       |
  6473. |    |                                                                                      |
  6474. |    |Si LEAST est utilis√© dans un contexte d'entiers, ou bien tous les arguments sont des  |
  6475. |    |entiers, les arguments sont √©valu√©s et compar√©s en tant qu'entiers.                   |
  6476. |    |                                                                                      |
  6477. |    |Si LEAST est utilis√© dans un contexte de nombre √† virgule flottante, les arguments    |
  6478. |    |sont √©valu√©s et compar√©s en tant que nombre √† virgule flottante.                      |
  6479. |    |                                                                                      |
  6480. |    |Si tous les arguments sont des cha√Ænes sensibles √† la casse, tous les arguments sont  |
  6481. |    |compar√©s comme des cha√Ænes insensibles √† la casse.                                    |
  6482. |    |                                                                                      |
  6483. |    |Dans tous les autres cas, les arguments sont compar√©s comme des cha√Ænes insensibles √† |
  6484. |    |la casse.                                                                             |
  6485. |    |                                                                                      |
  6486. |    |mysql> select LEAST(2,0);                                                             |
  6487. |    |-> 0                                                                                  |
  6488. |    |mysql> select LEAST(34.0,3.0,5.0,767.0);                                              |
  6489. |    |-> 3.0                                                                                |
  6490. |    |mysql> select LEAST("B","A","C");                                                     |
  6491. |    |-> "A"                                                                                |
  6492. |    |Avec les version de MySQL ant√©rieur √† la 3.22.5, il est possible d'utiliser MIN() √† la|
  6493. |    |place de LEAST.                                                                       |
  6494. |    |‚Ä¢  GREATEST(X,Y,...) Retourne le plus grand argument de la liste. Les arguments sont  |
  6495. |    |compar√©s de la m√™me mani√®re que pour LEAST.                                           |
  6496. |    |                                                                                      |
  6497. |    |mysql> select GREATEST(2,0);                                                          |
  6498. |    |-> 2                                                                                  |
  6499. |    |mysql> select GREATEST(34.0,3.0,5.0,767.0);                                           |
  6500. |    |-> 767.0                                                                              |
  6501. |    |mysql> select GREATEST("B","A","C");                                                  |
  6502. |    |-> "C"                                                                                |
  6503. |    |Avec les version de MySQL ant√©rieur √† la 3.22.5, il est possible d'utiliser MAX () √†  |
  6504. |    |la place de GREATEST.                                                                 |
  6505. |    |‚Ä¢  DEGREES(X) Retourne l'argument X, converti de radians en degr√©s.                   |
  6506. |    |                                                                                      |
  6507. |    |mysql> select DEGREES(PI());                                                          |
  6508. |    |-> 180.000000                                                                         |
  6509. |    |‚Ä¢  RADIANS(X) Retourne l'argument X, converti de radians degr√©s en radians.           |
  6510. |    |                                                                                      |
  6511. |    |mysql> select RADIANS(90);                                                            |
  6512. |    |-> 1.570796                                                                           |
  6513. |    |‚Ä¢  TRUNCATE(X,D) Retourne l'argument X, tronqu√© √† D d√©cimales.                        |
  6514. |    |                                                                                      |
  6515. |    |mysql> select TRUNCATE(1.223,1);                                                      |
  6516. |    |-> 1.2                                                                                |
  6517. |    |mysql> select TRUNCATE(1.999,1);                                                      |
  6518. |    |-> 1.9                                                                                |
  6519. |    |mysql> select TRUNCATE(1.999,0);                                                      |
  6520. |    |-> 1                                                                                  |
  6521. |    |7.3.10 Fonctions de cha√Ænes                                                           |
  6522. |    |Les fonctions qui retourne des cha√Ænes, retourneront NULL si le r√©sultat d√©passe la   |
  6523. |    |taille maximale de max_allowed_packet.                                                |
  6524. |    |Pour les op√©rations sur les cha√Ænes, le premier caract√®re est en position 1.          |
  6525. |    |‚Ä¢  ASCII(str) Retourne le code ASCII du premier caract√®re de la cha√Æne. Si la cha√Æne  |
  6526. |    |est vide, retourne 0. Si la cha√Æne est NULL, retourne NULL.                           |
  6527. |    |                                                                                      |
  6528. |    |mysql> select ASCII('2');                                                             |
  6529. |    |-> 50                                                                                 |
  6530. |    |mysql> select ASCII(2);                                                               |
  6531. |    |-> 50                                                                                 |
  6532. |    |mysql> select ASCII('dx');                                                            |
  6533. |    |-> 100                                                                                |
  6534. |    |‚Ä¢  CONV(N,from_base,to_base) Converti des nombres d'une base √† l'autre, et retourne la|
  6535. |    |cha√Æne repr√©sentant le r√©sultat converti. Si la cha√Æne est NULL, retourne NULL.       |
  6536. |    |L'argument N est consid√©r√© comme un entier, mais peut √™tre un entier ou une cha√Æne. La|
  6537. |    |base minimum est 2, et maximum est 36. Si la base d'arriv√©e est un nombre n√©gatif, N  |
  6538. |    |est consid√©r√© comme un entier sign√©. Sinon, N est trait√© comme un entiers non sign√©.  |
  6539. |    |CONV fonctionne √† la pr√©cision 64 bits.                                               |
  6540. |    |                                                                                      |
  6541. |    |mysql> select CONV("a",16,2);                                                         |
  6542. |    |-> '1010'                                                                             |
  6543. |    |mysql> select CONV("6E",18,8);                                                        |
  6544. |    |-> '172'                                                                              |
  6545. |    |mysql> select CONV(-17,10,-18);                                                       |
  6546. |    |-> '-H'                                                                               |
  6547. |    |mysql> select CONV(10+"10"+'10'+0xa,10,10);                                           |
  6548. |    |-> '40'                                                                               |
  6549. |    |‚Ä¢  BIN(N) Retourne une cha√Æne repr√©sentant l'argument N en binaire. N est un BIGINT.  |
  6550. |    |Cette fonction est l'√©quivalent de CONV(N,10,2). Retourne NULL si N est NULL.         |
  6551. |    |                                                                                      |
  6552. |    |mysql> select BIN(12);                                                                |
  6553. |    |-> '1100'                                                                             |
  6554. |    |‚Ä¢  OCT(N) Retourne une cha√Æne repr√©sentant l'argument N en base 8. N est un BIGINT.   |
  6555. |    |Cette fonction est l'√©quivalent de CONV(N,10,8). Retourne NULL si N est NULL.         |
  6556. |    |                                                                                      |
  6557. |    |mysql> select OCT(12);                                                                |
  6558. |    |-> '14'                                                                               |
  6559. |    |‚Ä¢  HEX(N) Retourne une cha√Æne repr√©sentant l'argument N en hexad√©cimal. N est un      |
  6560. |    |BIGINT. Cette fonction est l'√©quivalent de CONV(N,10,16). Retourne NULL si N est NULL.|
  6561. |    |                                                                                      |
  6562. |    |                                                                                      |
  6563. |    |mysql> select HEX(255);                                                               |
  6564. |    |-> 'FF'                                                                               |
  6565. |    |‚Ä¢  CHAR(N,...) Interpr√®te les arguments comme des nombres entiers, et retourne une    |
  6566. |    |cha√Æne constitu√©e des caract√®res correspondant aux codes ASCII des arguments. Les     |
  6567. |    |valeurs NULL sont ignor√©es.                                                           |
  6568. |    |                                                                                      |
  6569. |    |mysql> select CHAR(77,121,83,81,'76');                                                |
  6570. |    |-> 'MySQL'                                                                            |
  6571. |    |mysql> select CHAR(77,77.3,'77.3');                                                   |
  6572. |    |-> 'MMM'                                                                              |
  6573. |    |‚Ä¢  CONCAT(X,Y,...) Concat√®ne les arguments, et re tourne le r√©sultat. Retourne NULL si|
  6574. |    |un des arguments est NULL. Le nombre d'argument minimum est 2.                        |
  6575. |    |                                                                                      |
  6576. |    |mysql> select CONCAT('My', 'S', 'QL');                                                |
  6577. |    |-> 'MySQL'                                                                            |
  6578. |    |mysql> select CONCAT('My', NULL, 'QL');                                               |
  6579. |    |-> NULL                                                                               |
  6580. |    |‚Ä¢  LONGUEUR(str)                                                                      |
  6581. |    |‚Ä¢  OCTET_LONGUEUR(str)                                                                |
  6582. |    |‚Ä¢  CHAR_LONGUEUR(str)                                                                 |
  6583. |    |‚Ä¢  CHARACTER_LONGUEUR(str) Retourne la longueur de la cha√Æne str.                     |
  6584. |    |                                                                                      |
  6585. |    |mysql> select LONGUEUR('text');                                                       |
  6586. |    |-> 4                                                                                  |
  6587. |    |mysql> select OCTET_LONGUEUR('text');                                                 |
  6588. |    |-> 4                                                                                  |
  6589. |    |‚Ä¢  LOCATE(substr,str)                                                                 |
  6590. |    |‚Ä¢  POSITION(substr IN str) Retourne la position de la premi√®re occurrence de substr   |
  6591. |    |dans la cha√Æne. Retourne 0 si substr n'est pas trouv√©e.                               |
  6592. |    |                                                                                      |
  6593. |    |mysql> select LOCATE('bar', 'foobarbar');                                             |
  6594. |    |-> 4                                                                                  |
  6595. |    |mysql> select LOCATE('xbar', 'foobar');                                               |
  6596. |    |-> 0                                                                                  |
  6597. |    |‚Ä¢  LOCATE(substr,str,pos) Retourne la position de la premi√®re occurrence de substr    |
  6598. |    |dans la cha√Æne, en commencant √† chercher √† partir de la position pos. Retourne 0 si   |
  6599. |    |substr n'est pas trouv√©e.                                                             |
  6600. |    |                                                                                      |
  6601. |    |mysql> select LOCATE('bar', 'foobarbar',5);                                           |
  6602. |    |-> 7                                                                                  |
  6603. |    |‚Ä¢  INSTR(str,substr) Retourne la position de la premi√®re occurrence de substr dans la |
  6604. |    |cha√Æne, en commencant √† chercher √† partir de la position pos. Retourne 0 si substr    |
  6605. |    |n'est pas trouv√©e. C'est la m√™me fonction que LOCATE(), mais les deux arguments n'ont |
  6606. |    |pas la m√™me place.                                                                    |
  6607. |    |                                                                                      |
  6608. |    |mysql> select INSTR('foobarbar', 'bar');                                              |
  6609. |    |-> 4                                                                                  |
  6610. |    |mysql> select INSTR('xbar', 'foobar');                                                |
  6611. |    |-> 0                                                                                  |
  6612. |    |‚Ä¢  LPAD(str,len,padstr) Retourne la cha√Æne str, compl√©t√©e √† gauche par la cha√Æne      |
  6613. |    |padstr jusqu'√† ce que le r√©sultat ait la longueur .                                   |
  6614. |    |                                                                                      |
  6615. |    |mysql> select LPAD('hi',4,'??');                                                      |
  6616. |    |-> '??hi'                                                                             |
  6617. |    |‚Ä¢  RPAD(str,len,padstr) Retourne la cha√Æne str, compl√©t√©e √† droite par la cha√Æne      |
  6618. |    |padstr jusqu'√† ce que le r√©sultat ait la longueur .                                   |
  6619. |    |                                                                                      |
  6620. |    |mysql> select RPAD('hi',5,'?');                                                       |
  6621. |    |-> 'hi???'                                                                            |
  6622. |    |‚Ä¢  LEFT(str,len) Retourne les len premiers caract√®res de la cha√Æne str.               |
  6623. |    |                                                                                      |
  6624. |    |mysql> select LEFT('foobarbar', 5);                                                   |
  6625. |    |-> 'fooba'                                                                            |
  6626. |    |‚Ä¢  RIGHT(str,len)                                                                     |
  6627. |    |‚Ä¢  SUBSTRING(str FROM len) Retourne les len derniers caract√®res de la cha√Æne str.     |
  6628. |    |                                                                                      |
  6629. |    |mysql> select RIGHT('foobarbar', 4);                                                  |
  6630. |    |-> 'rbar'                                                                             |
  6631. |    |mysql> select SUBSTRING('foobarbar' FROM 4);                                          |
  6632. |    |-> 'rbar'                                                                             |
  6633. |    |‚Ä¢  SUBSTRING(str,pos,len)                                                             |
  6634. |    |‚Ä¢  SUBSTRING(str FROM pos FOR len)                                                    |
  6635. |    |‚Ä¢  MID(str,pos,len) Retourne les len caract√®res de la cha√Æne str, en commencant √†     |
  6636. |    |partir de la position pos. La variante FROM est une syntaxe issue de la norme ANSI    |
  6637. |    |SQL92.                                                                                |
  6638. |    |                                                                                      |
  6639. |    |mysql> select SUBSTRING('Quadratically',5,6);                                         |
  6640. |    |-> 'ratica'                                                                           |
  6641. |    |‚Ä¢  SUBSTRING(str,pos) Retourne une sous-cha√Æne, issue de str et commencant √† la       |
  6642. |    |position pos.                                                                         |
  6643. |    |                                                                                      |
  6644. |    |mysql> select SUBSTRING('Quadratically',5);                                           |
  6645. |    |-> 'ratically'                                                                        |
  6646. |    |‚Ä¢  SUBSTRING_INDEX(str,delim,count) Retourne une sous-cha√Æne, issue de str, apr√®s     |
  6647. |    |count occurrences du d√©limiteur delim. Si count est positif, la sous-cha√Æne comprendra|
  6648. |    |tous les caract√®res situ√©s √† gauche du d√©limiteur final. Si count est n√©gatif, la     |
  6649. |    |sous-cha√Æne comprendra tous les caract√®res situ√©s √† droite du d√©limiteur final        |
  6650. |    |                                                                                      |
  6651. |    |mysql> select SUBSTRING_INDEX('www.mysql.com', '.', 2);                               |
  6652. |    |-> 'www.mysql'                                                                        |
  6653. |    |mysql> select SUBSTRING_INDEX('www.mysql.com', '.', -2);                              |
  6654. |    |-> 'mysql.com'                                                                        |
  6655. |    |‚Ä¢  LTRIM(str) Retourne la cha√Æne str apr√®s √©limination des espaces situ√©s en d√©but de |
  6656. |    |cha√Æne.                                                                               |
  6657. |    |                                                                                      |
  6658. |    |mysql> select LTRIM('  barbar');                                                      |
  6659. |    |-> 'barbar'                                                                           |
  6660. |    |‚Ä¢  RTRIM(str) retourne la cha√Æne str apr√®s √©limination des espaces situ√©s en fin de   |
  6661. |    |cha√Æne.                                                                               |
  6662. |    |                                                                                      |
  6663. |    |mysql> select RTRIM('barbar   ');                                                     |
  6664. |    |-> 'barbar'                                                                           |
  6665. |    |‚Ä¢  TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str) Retourne la cha√Æne str apr√®s |
  6666. |    |√©limination de cha√Ænes remstr situ√©es en d√©but et/ou fin de cha√Æne. Si aucune des     |
  6667. |    |options BOTH, LEADING ou TRAILING n'est pr√©cis√©, alors BOTH est utilis√© par d√©faut. Si|
  6668. |    |remstr n'est pas pr√©cis√©, les espaces sont √©limin√©s.                                  |
  6669. |    |                                                                                      |
  6670. |    |mysql> select TRIM('  bar   ');                                                       |
  6671. |    |-> 'bar'                                                                              |
  6672. |    |mysql> select TRIM(LEADING 'x' FROM 'xxxbarxxx');                                     |
  6673. |    |-> 'barxxx'                                                                           |
  6674. |    |mysql> select TRIM(BOTH 'x' FROM 'xxxbarxxx');                                        |
  6675. |    |-> 'bar'                                                                              |
  6676. |    |mysql> select TRIM(TRAILING 'xyz' FROM 'barxxyz');                                    |
  6677. |    |-> 'barx'                                                                             |
  6678. |    |‚Ä¢  SOUNDEX(str) Retourne une repr√©sentation phon√©tique de la cha√Æne . Deux cha√Ænes qui|
  6679. |    |" sonne de la m√™me fa√ßon " devraient avoir des repr√©sentation identiques. Une         |
  6680. |    |repr√©sentation standard a 4 caract√®res, mais SOUNDEX() retourne un nombre arbitraire  |
  6681. |    |de caract√®re. Il faudra alors utiliser SUBSTRING() sur le r√©sultat pour avoir une     |
  6682. |    |repr√©sentation standard. Les caract√®res non-alphanum√©riques sont ignor√©s. Tous les    |
  6683. |    |caract√®res alphab√©tiques hors de l'intervalle A-Z sont consid√©r√© comme des voyelles.  |
  6684. |    |‚Ä¢  Attention : cette fonction ayant √©t√© programm√© par des anglophones, la " sonorit√© "|
  6685. |    |d'une cha√Æne aura un fort accent anglais.                                             |
  6686. |    |                                                                                      |
  6687. |    |                                                                                      |
  6688. |    |mysql> select SOUNDEX('Hello');                                                       |
  6689. |    |-> 'H400'                                                                             |
  6690. |    |mysql> select SOUNDEX('Quadratically');                                               |
  6691. |    |-> 'Q36324'                                                                           |
  6692. |    |‚Ä¢  SPACE(N) Cr√©e une cha√Æne contenant N espaces.                                      |
  6693. |    |                                                                                      |
  6694. |    |mysql> select SPACE(6);                                                               |
  6695. |    |-> '      '                                                                           |
  6696. |    |‚Ä¢  REPLACE(str,from_str,to_str) Remplace les occurrences de from_str par la cha√Æne    |
  6697. |    |to_str, dans la cha√Æne str.                                                           |
  6698. |    |                                                                                      |
  6699. |    |mysql> select REPLACE('www.mysql.com', 'w', 'Ww');                                    |
  6700. |    |-> 'WwWwww.mysql.com'                                                                 |
  6701. |    |‚Ä¢  REPEAT(str,count) Retourne une cha√Æne constitu√©e des r√©p√©titions de la cha√Æne . Si |
  6702. |    |count <= 0, retourne une cha√Æne vide. Si str ou count est NULL, retourne NULL.        |
  6703. |    |                                                                                      |
  6704. |    |mysql> select REPEAT('MySQL', 3);                                                     |
  6705. |    |-> 'MySQLMySQLMySQL'                                                                  |
  6706. |    |‚Ä¢  REVERSE(str) Inverse l'ordre des caract√®res de la cha√Æne str.                      |
  6707. |    |                                                                                      |
  6708. |    |mysql> select REVERSE('abc');                                                         |
  6709. |    |-> 'cba'                                                                              |
  6710. |    |‚Ä¢  INSERT(str,pos,len,newstr) Retourne la cha√Æne str, avec la cha√Æne newstr qui       |
  6711. |    |remplace tous les caract√®res √† partir de la position pos, et sur la longueur len.     |
  6712. |    |                                                                                      |
  6713. |    |mysql> select INSERT('Quadratic', 3, 4, 'What');                                      |
  6714. |    |-> 'QuWhattic'                                                                        |
  6715. |    |‚Ä¢  ELT(N,str1,str2,str3,...) Retourne str1 si N = 1, str2 si N = 2, etc... Retourne   |
  6716. |    |NULL si est plus petit que 1 ou plus grand que le nombre d'arguments. ELT() est le    |
  6717. |    |contraire de FIELD().                                                                 |
  6718. |    |                                                                                      |
  6719. |    |mysql> select ELT(1, 'ej', 'Heja', 'hej', 'foo');                                     |
  6720. |    |-> 'ej'                                                                               |
  6721. |    |mysql> select ELT(4, 'ej', 'Heja', 'hej', 'foo');                                     |
  6722. |    |-> 'foo'                                                                              |
  6723. |    |‚Ä¢  FIELD(str,str1,str2,str3,...) Retourne l'index de la cha√Æne str dans la liste des  |
  6724. |    |arguments . Retourne 0 si str n'est pas trouv√© .FIELD() est le contraire de ELT()     |
  6725. |    |                                                                                      |
  6726. |    |mysql> select FIELD('ej', 'Hej', 'ej', 'Heja', 'hej', 'foo');                         |
  6727. |    |-> 2                                                                                  |
  6728. |    |mysql> select FIELD('fo', 'Hej', 'ej', 'Heja', 'hej', 'foo');                         |
  6729. |    |-> 0                                                                                  |
  6730. |    |‚Ä¢  FIND_IN_SET(str,strlist) Retourne l'index de la cha√Æne dans la liste. Une liste de |
  6731. |    |cha√Æne est compos√©e de cha√Ænes, s√©par√©es par le caract√®re ``,''. Si le premier        |
  6732. |    |argument est une cha√Æne constante, et le deuxi√®me est une colonne de type SET, la     |
  6733. |    |fonction est optimis√©e FIND_IN_SET() pour utiliser l'arithm√©tique sur les bits !      |
  6734. |    |Retourne str si n'est pas dans la liste strlist, ou si la liste est vide. Retourne    |
  6735. |    |NULL si l'un des arguments est NULL. La fonction n'accepte pas de caract√®re ``,''dans |
  6736. |    |le premier membre de la liste.                                                        |
  6737. |    |                                                                                      |
  6738. |    |mysql> SELECT FIND_IN_SET('b','a,b,c,d');                                             |
  6739. |    |-> 2                                                                                  |
  6740. |    |‚Ä¢  MAKE_SET(bits,str1,str2,...) Retourne un ensemble (une cha√Æne contenant des        |
  6741. |    |sous-cha√Ænes s√©par√©e par ``,'') qui correspond √† u sous-ensemble des cha√Ænes en       |
  6742. |    |arguments. La cha√Æne √† l'index i sera pr√©sente dans l'ensemble r√©sultat, si le bit √†  |
  6743. |    |l'index i est √† un, dans bits).                                                       |
  6744. |    |                                                                                      |
  6745. |    |mysql> SELECT MAKE_SET(1,'a','b','c');                                                |
  6746. |    |-> 'a'                                                                                |
  6747. |    |mysql> SELECT MAKE_SET(1 | 4,'hello','nice','world');                                 |
  6748. |    |-> 'hello,world'                                                                      |
  6749. |    |mysql> SELECT MAKE_SET(0,'a','b','c');                                                |
  6750. |    |-> ''                                                                                 |
  6751. |    |‚Ä¢  EXPORT_SET(bits,on,off,[separator],[number_of_bits]) Retourne une cha√Æne dans      |
  6752. |    |laquelle, pour chaque bit √† 1 , il y a la cha√Æne on, pour chaque bit √† 0 , il y a la  |
  6753. |    |cha√Æne off, s√©par√©s par le separator (par d√©faut, ','), et uniquement pour les        |
  6754. |    |number_of_bits (par d√©faut, 64) premiers bits.                                        |
  6755. |    |                                                                                      |
  6756. |    |mysql> select EXPORT_SET(5,'Y','N',',',4)                                             |
  6757. |    |-> Y,N,Y,N                                                                            |
  6758. |    |‚Ä¢  LCASE(str)                                                                         |
  6759. |    |‚Ä¢  LOWER(str) Retourne la cha√Æne avec tous les caract√®res en minuscules, conform√©ment |
  6760. |    |au jeu de caract√®re courant (par d√©faut, ISO-8859-1 Latin1).                          |
  6761. |    |                                                                                      |
  6762. |    |mysql> select LCASE('QUADRATICALLY');                                                 |
  6763. |    |-> 'quadratically'                                                                    |
  6764. |    |‚Ä¢  UCASE(str)                                                                         |
  6765. |    |‚Ä¢  UPPER(str) Retourne la cha√Æne avec tous les caract√®res en majuscule, conform√©ment  |
  6766. |    |au jeu de caract√®re courant (par d√©faut, ISO-8859-1 Latin1).                          |
  6767. |    |                                                                                      |
  6768. |    |mysql> select UCASE('Hej');                                                           |
  6769. |    |-> 'HEJ'                                                                              |
  6770. |    |‚Ä¢  LOAD_FILE(Nom_fichier) Lit le fichier Nom_fichier et retourne le r√©sultat dans une |
  6771. |    |cha√Æne. Le fichier doit √™tre sur le serveur, et il faut pr√©ciser le nom et le chemin  |
  6772. |    |d'acc√®s complet. Le fichier doit √™tre lisible par tous, et √™tre plus petit que        |
  6773. |    |max_allowed_packet. Si le fichier n'existe pas, ou ne peut √™tre lu, la fonction       |
  6774. |    |retourne NULL.                                                                        |
  6775. |    |                                                                                      |
  6776. |    |mysql> UPDATE Nom_tableSET blob_column=LOAD_FILE("/tmp/picture") WHERE id=1;          |
  6777. |    |Il n'y a pas de fonction de conversion d'un nombre en char. Il n'y en pas besoin, car |
  6778. |    |MySQL converti automatiquement les nombres en cha√Ænes, et vice versa.                 |
  6779. |    |                                                                                      |
  6780. |    |mysql> SELECT 1+"1";                                                                  |
  6781. |    |-> 2                                                                                  |
  6782. |    |mysql> SELECT CONCAT(2,' test');                                                      |
  6783. |    |-> '2 test'                                                                           |
  6784. |    |Si une fonction qui travaille sur des cha√Ænes sensibles √† la casse recoit comme       |
  6785. |    |argument une cha√Æne insensible √† la casse, le resultat sera aussi une cha√Æne          |
  6786. |    |insensible √† la casse. Un nombre converti en cha√Æne est trait√© comme une cha√Æne       |
  6787. |    |insensible √† la casse. Cela n'affecte que les comparaisons.                           |
  6788. |    |7.3.11 Fonctions de date et heure                                                     |
  6789. |    |7.2.6 Types date et heure pour une description pr√©cise des intervalles de validit√© de |
  6790. |    |chaque type.                                                                          |
  6791. |    |Voici un exemple qui utilise des fonctions sur les dates et heures. La requ√™te        |
  6792. |    |ci-dessous s√©lectionne toutes les lignes avec une valeur qui est date_col dans les 30 |
  6793. |    |derniers jours :                                                                      |
  6794. |    |                                                                                      |
  6795. |    |mysql> SELECT quelquechose FROM table                                                 |
  6796. |    |WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;                                       |
  6797. |    |‚Ä¢  DAYOFWEEK(date) Retourne le jour de la semaine sous la forme d'un index qui        |
  6798. |    |commence √† 1 (1 = Dimanche, 2 = Lundi, ... 7 = Samedi). Ces valeurs sont celles du    |
  6799. |    |standard ODBC.                                                                        |
  6800. |    |                                                                                      |
  6801. |    |mysql> select DAYOFWEEK('1998-02-03');                                                |
  6802. |    |-> 3                                                                                  |
  6803. |    |‚Ä¢  WEEKDAY(date) Retourne le jour de la semaine sous la forme d'un index qui commence |
  6804. |    |√† 0 (0 = Dimanche, 1 = Lundi, ... 6 = Samedi).                                        |
  6805. |    |                                                                                      |
  6806. |    |mysql> select WEEKDAY('1997-10-04 22:23:00');                                         |
  6807. |    |-> 5                                                                                  |
  6808. |    |mysql> select WEEKDAY('1997-11-05');                                                  |
  6809. |    |-> 2                                                                                  |
  6810. |    |‚Ä¢  DAYOFMONTH(date) Retourne le jour du mois sous la forme d'un index entre 1 et 31.  |
  6811. |    |                                                                                      |
  6812. |    |mysql> select DAYOFMONTH('1998-02-03');                                               |
  6813. |    |-> 3                                                                                  |
  6814. |    |‚Ä¢  DAYOFYEAR(date) Retourne le jour de l'ann√©e sous la forme d'un index entre 1 et    |
  6815. |    |366.                                                                                  |
  6816. |    |                                                                                      |
  6817. |    |mysql> select DAYOFYEAR('1998-02-03');                                                |
  6818. |    |-> 34                                                                                 |
  6819. |    |‚Ä¢  MONTH(date) Retourne le mois de la date sous la forme d'un index entre 1 et 12.    |
  6820. |    |                                                                                      |
  6821. |    |mysql> select MONTH('1998-02-03');                                                    |
  6822. |    |-> 2                                                                                  |
  6823. |    |‚Ä¢  DAYNAME(date) Retourne le nom du jour de la date sous la forme d'une cha√Æne (en    |
  6824. |    |anglais ).                                                                            |
  6825. |    |                                                                                      |
  6826. |    |mysql> select DAYNAME("1998-02-05");                                                  |
  6827. |    |-> 'Thursday'                                                                         |
  6828. |    |‚Ä¢  MONTHNAME(date) Retourne le nom du mois de la date sous la forme d'une cha√Æne (en  |
  6829. |    |anglais ).                                                                            |
  6830. |    |                                                                                      |
  6831. |    |mysql> select MONTHNAME("1998-02-05");                                                |
  6832. |    |-> 'February'                                                                         |
  6833. |    |‚Ä¢  QUARTER(date) Retourne le trimestre de la date sous la forme d'un index entre 1 et |
  6834. |    |4.                                                                                    |
  6835. |    |                                                                                      |
  6836. |    |mysql> select QUARTER('98-04-01');                                                    |
  6837. |    |-> 2                                                                                  |
  6838. |    |‚Ä¢  WEEK(date)                                                                         |
  6839. |    |‚Ä¢  WEEK(date,first) Avec un seul argument, retourne la semaine de la date sous la     |
  6840. |    |forme d'un index entre 1 √† 52, avec Dimanche comme premier jour de la semaine. La     |
  6841. |    |fonction avec deux arguments permet de pr√©ciser si la semaine commence √† Dimanche (0) |
  6842. |    |ou Lundi (1).                                                                         |
  6843. |    |                                                                                      |
  6844. |    |mysql> select WEEK('1998-02-20');                                                     |
  6845. |    |-> 7                                                                                  |
  6846. |    |mysql> select WEEK('1998-02-20',0);                                                   |
  6847. |    |-> 7                                                                                  |
  6848. |    |mysql> select WEEK('1998-02-20',1);                                                   |
  6849. |    |-> 8                                                                                  |
  6850. |    |‚Ä¢  YEAR(date) Retourne l'ann√©e de la date sous la forme d'un index entre 1000 et 9999.|
  6851. |    |                                                                                      |
  6852. |    |                                                                                      |
  6853. |    |mysql> select YEAR('98-02-03');                                                       |
  6854. |    |-> 1998                                                                               |
  6855. |    |‚Ä¢  HOUR(time) Retourne l'heure de la date sous la forme d'un index entre 0 et 23.     |
  6856. |    |                                                                                      |
  6857. |    |mysql> select HOUR('10:05:03');                                                       |
  6858. |    |-> 10                                                                                 |
  6859. |    |‚Ä¢  MINUTE(time) Retourne la minute de la date sous la forme d'un index entre 0 et 59. |
  6860. |    |                                                                                      |
  6861. |    |mysql> select MINUTE('98-02-03 10:05:03');                                            |
  6862. |    |-> 5                                                                                  |
  6863. |    |‚Ä¢  SECOND(time) Retourne la seconde de la date sous la forme d'un index entre 0 et 59.|
  6864. |    |                                                                                      |
  6865. |    |                                                                                      |
  6866. |    |mysql> select SECOND('10:05:03');                                                     |
  6867. |    |-> 3                                                                                  |
  6868. |    |‚Ä¢  PERIOD_ADD(P,N) Ajoute N mois √† la date P (au format YYMM ou YYYYMM). Retourne le  |
  6869. |    |r√©sultat au format YYYYMM. Il faut bien noter que la date P n'est pas au format date. |
  6870. |    |                                                                                      |
  6871. |    |mysql> select PERIOD_ADD(9801,2);                                                     |
  6872. |    |-> 199803                                                                             |
  6873. |    |‚Ä¢  PERIOD_DIFF(P1,P2) Retourne le nombre de mois entre deux dates P1 et P2. P1 et P2  |
  6874. |    |doivent √™tre au format . Il faut bien noter que les dates P1 et P2 ne sont pas au     |
  6875. |    |format date.                                                                          |
  6876. |    |                                                                                      |
  6877. |    |mysql> select PERIOD_DIFF(9802,199703);                                               |
  6878. |    |-> 11                                                                                 |
  6879. |    |‚Ä¢  DATE_ADD(date,INTERVAL expression type)                                            |
  6880. |    |‚Ä¢  DATE_SUB(date,INTERVAL expression type)                                            |
  6881. |    |‚Ä¢  ADDDATE(date,INTERVAL expression type)                                             |
  6882. |    |‚Ä¢  SUBDATE(date,INTERVAL expression type) Ces fonctions effectuent des op√©rations     |
  6883. |    |arithm√©tiques sur les dates. Elles ont √©t√© inser√©es dans MySQL 3.22. ADDDATE() et     |
  6884. |    |SUBDATE() sont synonymes de DATE_ADD() et DATE_SUB(). date est de type DATETIME ou    |
  6885. |    |DATE , qui indique la date de d√©but. expression est une expression qui donne une dur√©e|
  6886. |    |√† ajouter ou √† retrancher √† la date de d√©but. expression est une cha√Æne qui peut      |
  6887. |    |commencer par un signe moins (``-''), pour indiquer une dur√©e n√©gative. type est un   |
  6888. |    |mot cl√© qui indique comment l'expression doit √™tre consid√©r√©. La table suivante       |
  6889. |    |√©tablit la relation type et expression :                                              |
  6890. |    |type value                                                                            |
  6891. |    |Meaning                                                                               |
  6892. |    |Expected expr format                                                                  |
  6893. |    |                                                                                      |
  6894. |    |SECOND                                                                                |
  6895. |    |Seconds                                                                               |
  6896. |    |SECONDS                                                                               |
  6897. |    |                                                                                      |
  6898. |    |MINUTE                                                                                |
  6899. |    |Minutes                                                                               |
  6900. |    |MINUTES                                                                               |
  6901. |    |                                                                                      |
  6902. |    |HOUR                                                                                  |
  6903. |    |Hours                                                                                 |
  6904. |    |HOURS                                                                                 |
  6905. |    |                                                                                      |
  6906. |    |DAY                                                                                   |
  6907. |    |Days                                                                                  |
  6908. |    |DAYS                                                                                  |
  6909. |    |                                                                                      |
  6910. |    |MONTH                                                                                 |
  6911. |    |Months                                                                                |
  6912. |    |MONTHS                                                                                |
  6913. |    |                                                                                      |
  6914. |    |YEAR                                                                                  |
  6915. |    |Years                                                                                 |
  6916. |    |YEARS                                                                                 |
  6917. |    |                                                                                      |
  6918. |    |MINUTE_SECOND                                                                         |
  6919. |    |Minutes and seconds                                                                   |
  6920. |    |"MINUTES:SECONDS"                                                                     |
  6921. |    |                                                                                      |
  6922. |    |HOUR_MINUTE                                                                           |
  6923. |    |Hours and minutes                                                                     |
  6924. |    |"HOURS:MINUTES"                                                                       |
  6925. |    |                                                                                      |
  6926. |    |DAY_HOUR                                                                              |
  6927. |    |Days and hours                                                                        |
  6928. |    |"DAYS HOURS"                                                                          |
  6929. |    |                                                                                      |
  6930. |    |YEAR_MONTH                                                                            |
  6931. |    |Years and months                                                                      |
  6932. |    |"YEARS-MONTHS"                                                                        |
  6933. |    |                                                                                      |
  6934. |    |HOUR_SECOND                                                                           |
  6935. |    |Hours, minutes,                                                                       |
  6936. |    |"HOURS:MINUTES:SECONDS"                                                               |
  6937. |    |                                                                                      |
  6938. |    |DAY_MINUTE                                                                            |
  6939. |    |Days, hours, minutes                                                                  |
  6940. |    |"DAYS HOURS:MINUTES"                                                                  |
  6941. |    |                                                                                      |
  6942. |    |DAY_SECOND                                                                            |
  6943. |    |Days, hours, minutes, seconds                                                         |
  6944. |    |"DAYS HOURS:MINUTES:SECONDS"                                                          |
  6945. |    |                                                                                      |
  6946. |    |MySQL allows any non-numeric delimiter in the expr format. The ones shown in the table|
  6947. |    |are the suggested delimiters. If the date argument is a DATE value and your           |
  6948. |    |calculations involve only YEAR, MONTH and DAY parts (that is, no time parts), the     |
  6949. |    |result is a DATE value. Otherwise the result is a DATETIME value.                     |
  6950. |    |                                                                                      |
  6951. |    |mysql> SELECT DATE_ADD("1997-12-31 23:59:59",                                         |
  6952. |    |INTERVAL 1 SECOND);                                                                   |
  6953. |    |-> 1998-01-01 00:00:00                                                                |
  6954. |    |mysql> SELECT DATE_ADD("1997-12-31 23:59:59",                                         |
  6955. |    |INTERVAL 1 DAY);                                                                      |
  6956. |    |-> 1998-01-01 23:59:59                                                                |
  6957. |    |mysql> SELECT DATE_ADD("1997-12-31 23:59:59",                                         |
  6958. |    |INTERVAL "1:1" MINUTE_SECOND);                                                        |
  6959. |    |-> 1998-01-01 00:01:00                                                                |
  6960. |    |mysql> SELECT DATE_SUB("1998-01-01 00:00:00",                                         |
  6961. |    |INTERVAL "1 1:1:1" DAY_SECOND);                                                       |
  6962. |    |-> 1997-12-30 22:58:59                                                                |
  6963. |    |mysql> SELECT DATE_ADD("1998-01-01 00:00:00",                                         |
  6964. |    |INTERVAL "-1 10" DAY_HOUR);                                                           |
  6965. |    |-> 1997-12-30 14:00:00                                                                |
  6966. |    |mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);                                |
  6967. |    |-> 1997-12-02                                                                         |
  6968. |    |mysql> SELECT EXTRACT(YEAR FROM "1999-07-02");                                        |
  6969. |    |-> 1999                                                                               |
  6970. |    |mysql> SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03");                         |
  6971. |    |-> 199907                                                                             |
  6972. |    |mysql> SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03");                         |
  6973. |    |-> 20102                                                                              |
  6974. |    |MySQL accepte l'utilisation de d√©limiteurs non-num√©riques dans le format de expression|
  6975. |    |. Ceux pr√©sent√©s dans le tableaux ne sont que des suggestions. Si l'argument date est |
  6976. |    |au format DATE et que les calculs font intervenir seulement YEAR, MONTH et DAY (c'est |
  6977. |    |√† dire, juste la date, par l'heure.), le r√©sultat est de type DATE . Sinon, le        |
  6978. |    |r√©sultat des de type DATETIME .                                                       |
  6979. |    |                                                                                      |
  6980. |    |mysql> select DATE_ADD("1997-12-31 23:59:59",                                         |
  6981. |    |INTERVAL 1 SECOND);                                                                   |
  6982. |    |-> 1998-01-01 00:00:00                                                                |
  6983. |    |mysql> select DATE_ADD("1997-12-31 23:59:59",                                         |
  6984. |    |INTERVAL 1 DAY);                                                                      |
  6985. |    |-> 1998-01-01 23:59:59                                                                |
  6986. |    |mysql> select DATE_ADD("1997-12-31 23:59:59",                                         |
  6987. |    |INTERVAL "1:1" MINUTE_SECOND);                                                        |
  6988. |    |-> 1998-01-01 00:01:00                                                                |
  6989. |    |mysql> select DATE_SUB("1998-01-01 00:00:00",                                         |
  6990. |    |INTERVAL "1 1:1:1" DAY_SECOND);                                                       |
  6991. |    |-> 1997-12-30 22:58:59                                                                |
  6992. |    |mysql> select DATE_ADD("1998-01-01 00:00:00",                                         |
  6993. |    |INTERVAL "-1 10" DAY_HOUR);                                                           |
  6994. |    |-> 1997-12-30 14:00:00                                                                |
  6995. |    |mysql> select DATE_SUB("1998-01-02", INTERVAL 31 DAY);                                |
  6996. |    |-> 1997-12-02                                                                         |
  6997. |    |Si l'argument de dur√©e est trop court par rapport au mot cl√© sp√©cifi√©, MySQL suppose  |
  6998. |    |que les parties de gauche sont mises √† z√©ro. Par exemple, avec le mot cl√© DAY_SECOND ,|
  6999. |    |s'attend √† trouver le format "JOURS HEURES:MINUTES:SECONDES" . Si l'argument de dur√©e |
  7000. |    |est "1:10", supposera que les jours et heures sont √† 0, et que seules, les minutes et |
  7001. |    |secondes sont fournies. En un sens, MySQL ignore le type sp√©cifi√©, et utilise √† la    |
  7002. |    |place MINUTE_SECOND. Si les dates sont incorrectes, le r√©sultat est NULL. Par         |
  7003. |    |ailleurs, lors de l'utilisation des options MONTH, YEAR_MONTH ou YEAR, et que dans le |
  7004. |    |mois r√©sultant, la date du jours n'existe pas, elle est automatiquement ramen√©e √† la  |
  7005. |    |plus grande valeur qu'elle peut prendre dans ce mois.                                 |
  7006. |    |                                                                                      |
  7007. |    |mysql> select DATE_ADD('1998-01-30', Interval 1 month);                               |
  7008. |    |-> 1998-02-28                                                                         |
  7009. |    |Note from the preceding example that the word INTERVAL and the type keyword are not   |
  7010. |    |case sensitive.                                                                       |
  7011. |    |‚Ä¢  TO_DAYS(date) Retourne l'index du jour par rapport au 1er janvier 0.               |
  7012. |    |                                                                                      |
  7013. |    |mysql> select TO_DAYS(950501);                                                        |
  7014. |    |-> 728779                                                                             |
  7015. |    |mysql> select TO_DAYS('1997-10-07');                                                  |
  7016. |    |-> 729669                                                                             |
  7017. |    |TO_DAYS() n'est pas pr√©vu pour utiliser des dates pr√©c√©dents l'av√®nement du calendrier|
  7018. |    |Gr√©gorien. (1582)..                                                                   |
  7019. |    |‚Ä¢  FROM_DAYS(N) Etant donn√© un num√©ro de jour par rapport au 1er janvier 0, retourne  |
  7020. |    |une valeur de type DATE.                                                              |
  7021. |    |                                                                                      |
  7022. |    |mysql> select FROM_DAYS(729669);                                                      |
  7023. |    |-> '1997-10-07'                                                                       |
  7024. |    |FROM_DAYS()n'est pas pr√©vu pour utiliser des dates pr√©c√©dents l'av√®nement du          |
  7025. |    |calendrier Gr√©gorien. (1582).                                                         |
  7026. |    |‚Ä¢  DATE_FORMAT(date,format) Formate la date date en fonction de la cha√Æne format. Les |
  7027. |    |formats suivants peuvent √™tre utilis√© dans format :                                   |
  7028. |    |%M                                                                                    |
  7029. |    |Month name (January..December)                                                        |
  7030. |    |                                                                                      |
  7031. |    |%W                                                                                    |
  7032. |    |Weekday name (Sunday..Saturday)                                                       |
  7033. |    |                                                                                      |
  7034. |    |%D                                                                                    |
  7035. |    |Day of the month with english suffix (1st, 2nd, 3rd, etc.)                            |
  7036. |    |                                                                                      |
  7037. |    |%Y                                                                                    |
  7038. |    |Year, numeric, 4 digits                                                               |
  7039. |    |                                                                                      |
  7040. |    |%y                                                                                    |
  7041. |    |Year, numeric, 2 digits                                                               |
  7042. |    |                                                                                      |
  7043. |    |%a                                                                                    |
  7044. |    |Abbreviated weekday name (Sun..Sat)                                                   |
  7045. |    |                                                                                      |
  7046. |    |%d                                                                                    |
  7047. |    |Day of the month, numeric (00..31)                                                    |
  7048. |    |                                                                                      |
  7049. |    |%e                                                                                    |
  7050. |    |Day of the month, numeric (0..31)                                                     |
  7051. |    |                                                                                      |
  7052. |    |%m                                                                                    |
  7053. |    |Month, numeric (01..12)                                                               |
  7054. |    |                                                                                      |
  7055. |    |%c                                                                                    |
  7056. |    |Month, numeric (1..12)                                                                |
  7057. |    |                                                                                      |
  7058. |    |%b                                                                                    |
  7059. |    |Abbreviated month name (Jan..Dec)                                                     |
  7060. |    |                                                                                      |
  7061. |    |%j                                                                                    |
  7062. |    |Day of year (001..366)                                                                |
  7063. |    |                                                                                      |
  7064. |    |%H                                                                                    |
  7065. |    |Hour (00..23)                                                                         |
  7066. |    |                                                                                      |
  7067. |    |%k                                                                                    |
  7068. |    |Hour (0..23)                                                                          |
  7069. |    |                                                                                      |
  7070. |    |%h                                                                                    |
  7071. |    |Hour (01..12)                                                                         |
  7072. |    |                                                                                      |
  7073. |    |%I                                                                                    |
  7074. |    |Hour (01..12)                                                                         |
  7075. |    |                                                                                      |
  7076. |    |%l                                                                                    |
  7077. |    |Hour (1..12)                                                                          |
  7078. |    |                                                                                      |
  7079. |    |%i                                                                                    |
  7080. |    |Minutes, numeric (00..59)                                                             |
  7081. |    |                                                                                      |
  7082. |    |%r                                                                                    |
  7083. |    |Time, 12-hour (hh:mm:ss [AP]M)                                                        |
  7084. |    |                                                                                      |
  7085. |    |%T                                                                                    |
  7086. |    |Time, 24-hour (hh:mm:ss)                                                              |
  7087. |    |                                                                                      |
  7088. |    |%S                                                                                    |
  7089. |    |Seconds (00..59)                                                                      |
  7090. |    |                                                                                      |
  7091. |    |%s                                                                                    |
  7092. |    |Seconds (00..59)                                                                      |
  7093. |    |                                                                                      |
  7094. |    |%p                                                                                    |
  7095. |    |AM or PM                                                                              |
  7096. |    |                                                                                      |
  7097. |    |%w                                                                                    |
  7098. |    |Day of the week (0=Sunday..6=Saturday)                                                |
  7099. |    |                                                                                      |
  7100. |    |%U                                                                                    |
  7101. |    |Week (0..52), where Sunday is the first day of the week                               |
  7102. |    |                                                                                      |
  7103. |    |%u                                                                                    |
  7104. |    |Week (0..52), where Monday is the first day of the week                               |
  7105. |    |                                                                                      |
  7106. |    |%%                                                                                    |
  7107. |    |A literal `%'.                                                                        |
  7108. |    |                                                                                      |
  7109. |    |Tous les autres caract√®res sont recopi√©s, sans interpretation                         |
  7110. |    |                                                                                      |
  7111. |    |mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');                         |
  7112. |    |-> 'Saturday October 1997'                                                            |
  7113. |    |mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');                         |
  7114. |    |-> '22:23:00'                                                                         |
  7115. |    |mysql> select DATE_FORMAT('1997-10-04 22:23:00',                                      |
  7116. |    |'%D %y %a %d %m %b %j');                                                              |
  7117. |    |-> '4th 97 Sat 04 10 Oct 277'                                                         |
  7118. |    |mysql> select DATE_FORMAT('1997-10-04 22:23:00',                                      |
  7119. |    |'%H %k %I %r %T %S %w');                                                              |
  7120. |    |-> '22 22 10 10:23:00 PM 22:23:00 00 6'                                               |
  7121. |    |Depuis MySQL 3.23, le caract√®re % est obligatoire devant le caract√®re de format. Dans |
  7122. |    |les versions ant√©rieures de MySQL, % il √©tait optionnel.                              |
  7123. |    |‚Ä¢  TIME_FORMAT(time,format) Utilisation identique √† DATE_FORMAT(), mais seulement pour|
  7124. |    |les heures (heures, minutes secondes). Les autres arguments conduisent √† un r√©sultat a|
  7125. |    |NULL ou 0.                                                                            |
  7126. |    |‚Ä¢  CURDATE()                                                                          |
  7127. |    |‚Ä¢  CURRENT_DATE Retourne la date du jour, au format 'YYYY-MM-DD' ou YYYYMMDD , suivant|
  7128. |    |que la fonction est utilis√©e en contexte cha√Æne ou num√©rique                          |
  7129. |    |                                                                                      |
  7130. |    |mysql> select CURDATE();                                                              |
  7131. |    |-> '1997-12-15'                                                                       |
  7132. |    |mysql> select CURDATE() + 0;                                                          |
  7133. |    |-> 19971215                                                                           |
  7134. |    |‚Ä¢  CURTIME()                                                                          |
  7135. |    |‚Ä¢  CURRENT_TIME Retourne l'heure du jour, au format 'HH:MM:SS' or HHMMSS, suivant que |
  7136. |    |la fonction est utilis√©e en contexte cha√Æne ou num√©rique                              |
  7137. |    |                                                                                      |
  7138. |    |mysql> select CURTIME();                                                              |
  7139. |    |-> '23:50:26'                                                                         |
  7140. |    |mysql> select CURTIME() + 0;                                                          |
  7141. |    |-> 235026                                                                             |
  7142. |    |‚Ä¢  NOW()                                                                              |
  7143. |    |‚Ä¢  SYSDATE()                                                                          |
  7144. |    |‚Ä¢  CURRENT_TIMESTAMP Retourne la date et l'heure du jour, au format 'YYYY-MM-DD       |
  7145. |    |HH:MM:SS' or YYYYMMDDHHMMSS, suivant que la fonction est utilis√©e en contexte cha√Æne  |
  7146. |    |ou num√©rique                                                                          |
  7147. |    |                                                                                      |
  7148. |    |mysql> select NOW();                                                                  |
  7149. |    |-> '1997-12-15 23:50:26'                                                              |
  7150. |    |mysql> select NOW() + 0;                                                              |
  7151. |    |-> 19971215235026                                                                     |
  7152. |    |‚Ä¢  UNIX_TIMESTAMP()                                                                   |
  7153. |    |‚Ä¢  UNIX_TIMESTAMP(date) Utilis√© sans argument, retourne un timestamp Unix (le nombre  |
  7154. |    |de secondes depuis '1970-01-01 00:00:00' GMT) . Utilis√© avec un argument de type date,|
  7155. |    |il renvoie le timestamp Unix correspondant √† cette date. DATE peut √™tre aux formats   |
  7156. |    |cha√Æne DATE cha√Æne, DATETIME cha√Æne, TIMESTAMP, ou un nombre au format YYMMDD ou      |
  7157. |    |YYYYMMDD.                                                                             |
  7158. |    |                                                                                      |
  7159. |    |mysql> select UNIX_TIMESTAMP();                                                       |
  7160. |    |-> 882226357                                                                          |
  7161. |    |mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00');                                  |
  7162. |    |-> 875996580                                                                          |
  7163. |    |Quand un UNIX_TIMESTAMP est affect√© √† une colonne de type TIMESTAMP, l'affectation    |
  7164. |    |sera directe, avec aucune conversion implicite.                                       |
  7165. |    |‚Ä¢  FROM_UNIXTIME(unix_timestamp) Retourne la repr√©sentation de l'argument             |
  7166. |    |unix_timestamp au format 'YYYY-MM-DD HH:MM:SS' or YYYYMMDDHHMMSS suivant que la       |
  7167. |    |fonction est utilis√©e en contexte cha√Æne ou num√©rique                                 |
  7168. |    |                                                                                      |
  7169. |    |mysql> select FROM_UNIXTIME(875996580);                                               |
  7170. |    |-> '1997-10-04 22:23:00'                                                              |
  7171. |    |mysql> select FROM_UNIXTIME(875996580) + 0;                                           |
  7172. |    |-> 19971004222300                                                                     |
  7173. |    |‚Ä¢  FROM_UNIXTIME(unix_timestamp,format) Retourne la repr√©sentation de l'argument      |
  7174. |    |unix_timestamp au format format, suivant que la fonction est utilis√©e en contexte     |
  7175. |    |cha√Æne ou num√©rique. Le format est sp√©cifi√© comme pour la fonction the DATE_FORMAT(). |
  7176. |    |                                                                                      |
  7177. |    |mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),                                         |
  7178. |    |'%Y %D %M %h:%i:%s %x');                                                              |
  7179. |    |-> '1997 23rd December 03:43:30 x'                                                    |
  7180. |    |‚Ä¢  SEC_TO_TIME(seconds) Converti l'argument seconds en heures, minutes et secondes, au|
  7181. |    |format 'HH:MM:SS' or HHMMSS, suivant que la fonction est utilis√©e en contexte cha√Æne  |
  7182. |    |ou num√©rique                                                                          |
  7183. |    |                                                                                      |
  7184. |    |mysql> select SEC_TO_TIME(2378);                                                      |
  7185. |    |-> '00:39:38'                                                                         |
  7186. |    |mysql> select SEC_TO_TIME(2378) + 0;                                                  |
  7187. |    |-> 3938                                                                               |
  7188. |    |‚Ä¢  TIME_TO_SEC(time) Retourne l'argument time, converti en secondes.                  |
  7189. |    |                                                                                      |
  7190. |    |mysql> select TIME_TO_SEC('22:23:00');                                                |
  7191. |    |-> 80580                                                                              |
  7192. |    |mysql> select TIME_TO_SEC('00:39:38');                                                |
  7193. |    |-> 2378                                                                               |
  7194. |    |7.3.12 Fonctions diverses                                                             |
  7195. |    |‚Ä¢  DATABASE() Retourne le nom de la base de donn√©es courante                          |
  7196. |    |                                                                                      |
  7197. |    |mysql> select DATABASE();                                                             |
  7198. |    |-> 'test'                                                                             |
  7199. |    |S'il n'y a pas de base de donn√©es courante, DATABASE() retourne une cha√Æne vide.      |
  7200. |    |‚Ä¢  USER()                                                                             |
  7201. |    |‚Ä¢  SYSTEM_USER()                                                                      |
  7202. |    |‚Ä¢  SESSION_USER() Retourne le nom de l'utilisateur MySQL courant.                     |
  7203. |    |                                                                                      |
  7204. |    |mysql> select USER();                                                                 |
  7205. |    |-> 'davida@localhost'                                                                 |
  7206. |    |Avec MySQL 3.22.11 ou plus r√©cent, le nom de l'utilisateur courant contient le nom du |
  7207. |    |de l'h√¥te client. On peut alors en extraire le nom du User.                           |
  7208. |    |                                                                                      |
  7209. |    |mysql> select left(USER(),instr(USER(),"@")-1);                                       |
  7210. |    |-> 'davida'                                                                           |
  7211. |    |‚Ä¢  PASSWORD(str) Calcule un mot de passe √† partir du texte de str. C'est une fonction |
  7212. |    |d'encryption utilis√©e par MySQL pour stocker les mots de passes dans la colonne       |
  7213. |    |Password, de la table des droits des utilisateurs.                                    |
  7214. |    |                                                                                      |
  7215. |    |mysql> select PASSWORD('badpwd');                                                     |
  7216. |    |-> '7f84554057dd964b'                                                                 |
  7217. |    |Le cryptage de PASSWORD() n'est pas reversible. PASSWORD() effectue un cryptage       |
  7218. |    |diff√©rent de celui d'Unix. Il ne faut pas croire que si le mot de passe de MySQL et   |
  7219. |    |d'Unix sont les m√™mes, alors les deux valeurs crypt√©es seront les m√™mes. Voir         |
  7220. |    |ENCRYPT().                                                                            |
  7221. |    |‚Ä¢  ENCRYPT(str[,salt]) Crypte la cha√Æne str en utilisant le cryptage d'Unix(          |
  7222. |    |crypt())l. Le grain de sel est une cha√Æne avec deux caract√®res.                       |
  7223. |    |                                                                                      |
  7224. |    |mysql> select ENCRYPT("hello");                                                       |
  7225. |    |-> 'VxuFAJXVARROc'                                                                    |
  7226. |    |Si la commande crypt() n'est pas disponible sur votre syst√®me, ENCRYPT()retournera    |
  7227. |    |NULL. ENCRYPT() n'utilise que les 8 premiers caract√®res de la cha√Æne, sur certains    |
  7228. |    |syst√®mes. Cela d√©pendra du comportement de l'appel syst√®me : crypt().                 |
  7229. |    |‚Ä¢  ENCODE(str,pass_str) Crypte la cha√Æne str en utilisant de mot de passe pass_str .  |
  7230. |    |Pour d√©crypter le r√©sultat, il faut utiliser DECODE(). Le r√©sultat est une cha√Æne     |
  7231. |    |binaire. Pour l'enregistrer, il faut l'affecter √† une colonne de type BLOB .          |
  7232. |    |‚Ä¢  DECODE(crypt_str,pass_str) D√©crypte la cha√Æne crypt√©e crypt_str, en utilisant le   |
  7233. |    |mot de passe pass_str . crypt_str doit √™tre une cha√Æne retourn√©e par ENCODE().        |
  7234. |    |‚Ä¢  MD5(string) Calcule la somme de v√©rification MD5 de ma cha√Æne. La valeur retourn√©e |
  7235. |    |est un nombre hexad√©cimal de 32 bits, utilis√© comme cl√©.                              |
  7236. |    |                                                                                      |
  7237. |    |mysql> select MD5("testing")                                                          |
  7238. |    |-> 'ae2b1fca515949e5d54fb22b8ed95575'                                                 |
  7239. |    |Cette fonction est issue de "RSA Data Security, Inc. MD5 Message-Digest Algorithm".   |
  7240. |    |‚Ä¢  LAST_INSERT_ID([expression ]) Retourne la derni√®re valeur g√©n√©r√©e automatiquement  |
  7241. |    |lors de la mise √† jour d'une colonne de type AUTO_INCREMENT Voir Section              |
  7242. |    |mysql_insert_id.                                                                      |
  7243. |    |                                                                                      |
  7244. |    |mysql> select LAST_INSERT_ID();                                                       |
  7245. |    |-> 195                                                                                |
  7246. |    |Le dernier ID g√©n√©r√© est conserv√© par le serveur, sur la base d'un par connexion. Il  |
  7247. |    |ne sera pas chang√© par un autre client. Il ne sera m√™me pas chang√© par la mise √† jour |
  7248. |    |d'une colonne de type AUTO_INCREMENT. Si expression est donn√© comme argument √†        |
  7249. |    |LAST_INSERT_ID() dans une clause , alors la valeur de l'argument est retourn√©e, en    |
  7250. |    |tant que LAST_INSERT_ID(). Cela peut √™tre utile pour simuler des s√©quences. Par       |
  7251. |    |exemple :                                                                             |
  7252. |    |‚Ä¢  Cr√©ation d'une table :                                                             |
  7253. |    |                                                                                      |
  7254. |    |mysql> create table sequence (id int not null);                                       |
  7255. |    |mysql> insert into sequence values (0);                                               |
  7256. |    |Alors la table peut √™tre utilis√©e pour g√©n√©rer une s√©quence de nombre comme ceci :    |
  7257. |    |                                                                                      |
  7258. |    |mysql> update sequence set id=LAST_INSERT_ID(id+1);                                   |
  7259. |    |Il est possible de g√©n√©rer des s√©quences sans appeler LAST_INSERT_ID(), mais l'inter√™t|
  7260. |    |de cette fonction et que l'ID est conserv√© par le serveur en tant que derni√®re valeur |
  7261. |    |g√©n√©r√©e. Il est ainsi possible d'obtenir un nouvel ID comme lors de la lecture de     |
  7262. |    |n'importe quelle colonne de type AUTO_INCREMENT. Par exemple, LAST_INSERT_ID() (sans  |
  7263. |    |argument) retournera un nouvel ID . La m√©thode C API mysql_insert_id() peut aussi √™tre|
  7264. |    |utilis√©e pour obtenir une telle valeur.                                               |
  7265. |    |‚Ä¢  FORMAT(X,D) Met le nombre X au format'#,###,###.##' avec D d√©cimales. Si D vaut 0, |
  7266. |    |le r√©sultat n'aura ni d√©cimales, ni virgule.                                          |
  7267. |    |                                                                                      |
  7268. |    |mysql> select FORMAT(12332.1234, 2);                                                  |
  7269. |    |-> '12,332.12'                                                                        |
  7270. |    |mysql> select FORMAT(12332.1,4);                                                      |
  7271. |    |-> '12,332.1000'                                                                      |
  7272. |    |mysql> select FORMAT(12332.2,0);                                                      |
  7273. |    |-> '12,332'                                                                           |
  7274. |    |‚Ä¢  VERSION() Retourne la version du serveur MySQL .                                   |
  7275. |    |                                                                                      |
  7276. |    |mysql> select VERSION();                                                              |
  7277. |    |-> '3.22.19b-log'                                                                     |
  7278. |    |‚Ä¢  GET_LOCK(str,timeout) Essaie d'obtenir le verrous nomm√© str , avec un timeout de   |
  7279. |    |timeout secondes. Retourne 1 si le verrous a pu √™tre obtenu, 0 en cas d'√©chec, ou si  |
  7280. |    |une erreur est survenue (comme par exemple, plus de m√©moire disponible, ou le thread a|
  7281. |    |√©t√© tu√© par l'administrateur). Un verrou est lib√©r√© avec la fonction RELEASE_LOCK(),  |
  7282. |    |avec l'ex√©cution de la fonction GET_LOCK() ou la mort du thread courant. Cette        |
  7283. |    |fonction peut √™tre utilis√©e pour impl√©menter des verrous d'applications, ou simuler   |
  7284. |    |des verrous sur les enregistrements.                                                  |
  7285. |    |                                                                                      |
  7286. |    |mysql> select GET_LOCK("lock1",10);                                                   |
  7287. |    |-> 1                                                                                  |
  7288. |    |mysql> select GET_LOCK("lock2",10);                                                   |
  7289. |    |-> 1                                                                                  |
  7290. |    |mysql> select RELEASE_LOCK("lock2");                                                  |
  7291. |    |-> 1                                                                                  |
  7292. |    |mysql> select RELEASE_LOCK("lock1");                                                  |
  7293. |    |-> NULL                                                                               |
  7294. |    |Il faut noter que le deuxi√®me appel √† RELEASE_LOCK()retourne NULL car le verrou       |
  7295. |    |"lock1" a √©t√© automatiquement lib√©r√© par le deuxi√®me appel √† GET_LOCK().              |
  7296. |    |‚Ä¢  RELEASE_LOCK(str) Lib√®re le verrous nomm√© str, obtenu par l'appel de GET_LOCK() .  |
  7297. |    |Retourne 1 si le verrous a bien √©t√© lib√©r√©, et 0 si il n'√©tait pas mis par ce thread  |
  7298. |    |(dans ce cas, il reste verrouill√©), et si ce verrous n'existe pas. Le verrous n'existe|
  7299. |    |pas tant qu'il n'a pas √©t√© cr√©er par GET_LOCK() ou si il a d√©j√† √©t√© lib√©r√©.           |
  7300. |    |‚Ä¢  BENCHMARK(count,expression ) La fonction de BENCHMARK ex√©cute l'expression         |
  7301. |    |expression count fois. Cela permet de mesurer le temps que MySQL met √† ex√©cuter       |
  7302. |    |l'expression. Le r√©sultat est toujours 0. Le temps mis pour l'ex√©cution de la commande|
  7303. |    |est disponible sur l'affichage du client MySQL.                                       |
  7304. |    |                                                                                      |
  7305. |    |mysql> select BENCHMARK(1000000,encode("hello","goodbye"));                           |
  7306. |    |+----------------------------------------------+                                      |
  7307. |    || BENCHMARK(1000000,encode("bonjour","ca va")) |                                      |
  7308. |    |+----------------------------------------------+                                      |
  7309. |    ||                                            0 |                                      |
  7310. |    |+----------------------------------------------+                                      |
  7311. |    |1 row in set (4.74 sec)                                                               |
  7312. |    |Le temps affich√© sur le client est le temps entre le d√©but et la fin de l'ex√©cution,  |
  7313. |    |et non pas le temps de travail du processeur. Il peut √™tre n√©cessaire d'√©x√©cuter      |
  7314. |    |plusieurs fois la commande, pour prendre en compte la charge de la machine.           |
  7315. |    |7.3.13 Fonctions √† utiliser dans les clauses GROUP BY                                 |
  7316. |    |L'utilisation d'une fonction de regroupement dans une commande qui ne contient pas la |
  7317. |    |clause GROUP BY est √©quivalent √† regrouper toutes les lignes.                         |
  7318. |    |‚Ä¢  COUNT(expression ) Retourne le nombre de lignes non-NULL obtenue par une commande  |
  7319. |    |SELECT.                                                                               |
  7320. |    |                                                                                      |
  7321. |    |mysql> select student.student_name,COUNT(*)                                           |
  7322. |    |from student,course                                                                   |
  7323. |    |where student.student_id=course.student_id                                            |
  7324. |    |GROUP BY student_name;                                                                |
  7325. |    |COUNT(*) est optimis√© pour compter tr√®s rapidement les lignes obtenues par un SELECT  |
  7326. |    |sur une seule table, sans qu'aucune autre colonne ne soit demand√©e, et sans clause    |
  7327. |    |WHERE . Par exemple :                                                                 |
  7328. |    |                                                                                      |
  7329. |    |mysql> select COUNT(*) from student;                                                  |
  7330. |    |‚Ä¢  COUNT(DISTINCT expression ,[expression ...]) Retourne le nombre de ligne           |
  7331. |    |distinctes.                                                                           |
  7332. |    |                                                                                      |
  7333. |    |mysql> select COUNT(DISTINCT results) from student;                                   |
  7334. |    |Avec MySQL il est possible d'obtenir le nombre de combinaison d'expressions distinctes|
  7335. |    |en donnant une liste d'expression. E, ANSI SQL, il aurait fallu concat√©ner les        |
  7336. |    |expressions avec CODE(DISTINCT ..).                                                   |
  7337. |    |‚Ä¢  AVG(expression ) Retourne la moyenne des valeurs de expression .                   |
  7338. |    |                                                                                      |
  7339. |    |mysql> select student_name, AVG(test_score)                                           |
  7340. |    |from student                                                                          |
  7341. |    |GROUP BY student_name;                                                                |
  7342. |    |‚Ä¢  MIN(expression )                                                                   |
  7343. |    |‚Ä¢  MAX(expression ) Retourne le minimum ou le maximum de expression . MIN() et MAX()  |
  7344. |    |peuvent travailler avec des cha√Ænes. Dans ce cas, il retourne la cha√Æne minimum       |
  7345. |    |maximum .                                                                             |
  7346. |    |                                                                                      |
  7347. |    |mysql> select student_name, MIN(test_score), MAX(test_score)                          |
  7348. |    |from student                                                                          |
  7349. |    |GROUP BY student_name;                                                                |
  7350. |    |‚Ä¢  SUM(expression ) Retourne la somme de expression . Si l'ensemble n'a aucune ligne, |
  7351. |    |le r√©sultat est NULL!                                                                 |
  7352. |    |‚Ä¢  STD(expression )                                                                   |
  7353. |    |‚Ä¢  STDDEV(expression ) Retourne la d√©viation standard de expression . C'est une       |
  7354. |    |extension √† la norme ANSI SQL. La fonction STDDEV() est fourni pour assurer la        |
  7355. |    |comptabilit√© avec les bases Oracle.                                                   |
  7356. |    |‚Ä¢  BIT_OR(expression ) Retourne le OU logique bit-√†-bit, effectu√© sur expression . Ce |
  7357. |    |calcul est fait sur 64 bits (pr√©cision de BIGINT).                                    |
  7358. |    |‚Ä¢  BIT_AND(expression ) Retourne le ET logique bit-√†-bit, effectu√© sur expression . Ce|
  7359. |    |calcul est fait sur 64 bits (pr√©cision de BIGINT).                                    |
  7360. |    |MySQL permet une utilisation √©tendue de GROUP BY. Il est possible de faire des calculs|
  7361. |    |sur des colonnes dans le SELECT m√™me si elles n'apparaissent pas dans le GROUP BY .   |
  7362. |    |Cela est possible pour n'importe quelle valeur de ce groupe. Cela permet de gagner en |
  7363. |    |performance en √©vitant de faire des regroupements ou des tris sur des valeurs         |
  7364. |    |inutiles. Par exemple, il n'y a pas besoin de faire un regroupement avec customer.name|
  7365. |    |dans la requ√™te suivante :                                                            |
  7366. |    |                                                                                      |
  7367. |    |mysql> select order.custid,customer.name,max(payments)                                |
  7368. |    |from order,customer                                                                   |
  7369. |    |where order.custid = customer.custid                                                  |
  7370. |    |GROUP BY order.custid;                                                                |
  7371. |    |La norme ANSI SQL impose d'ajouter customer.name dans la clause GROUP BY . Avec MySQL,|
  7372. |    |c'est redondant.                                                                      |
  7373. |    |Il ne faut pas utiliser cette particularit√© si les noms de colonnes ne sont pas unique|
  7374. |    |dans le groupe courant.                                                               |
  7375. |    |Dans certains cas, il est possible d'utiliser MIN() et MAX() pour obtenir la valeur   |
  7376. |    |d'une colonne sp√©cifique, m√™me si elle n'est pas unique. Par exemple, cette requ√™te   |
  7377. |    |retourne la valeur de column, de la ligne qui contient la colonne sort la plus courte.|
  7378. |    |                                                                                      |
  7379. |    |                                                                                      |
  7380. |    |substr(MIN(concat(sort,space(6-longueur(sort)),column),7,longueur(column)))           |
  7381. |    |Il faut noter que avec MySQL 3.22 (ou avant), ou en suivant la norme ANSI SQL, il ne  |
  7382. |    |faut pas utiliser d'expressions dans les clauses GROUP BY ou ORDER BY. Il faut alors  |
  7383. |    |contourner la difficult√© en utilisant un alias.                                       |
  7384. |    |                                                                                      |
  7385. |    |mysql> SELECT id,FLOOR(value/100) AS val FROM Nom_table                               |
  7386. |    |GROUP BY id,val ORDER BY val;                                                         |
  7387. |    |Avec MySQL 3.23, on peut √©crire :                                                     |
  7388. |    |                                                                                      |
  7389. |    |mysql> SELECT id,FLOOR(value/100) FROM Nom_table ORDER BY RAND();                     |
  7390. |    |7.4 CREATE DATABASE                                                                   |
  7391. |    |                                                                                      |
  7392. |    |CREATE DATABASE nom_base_de_donnees                                                   |
  7393. |    |CREATE DATABASE Nom_bdd                                                               |
  7394. |    |CREATE DATABASE cr√©e une base de donn√©e avec le nom Nom_bdd. Les r√®gles qui r√©gissent |
  7395. |    |les nom de base de donn√©es sont d√©taill√©es dans la section 7.1.5 Noms de base de      |
  7396. |    |donn√©es, table, index, column et alias. MySQL retourne une erreur si la base de       |
  7397. |    |donn√©es existe d√©j√†. Avec MySQL, les bases sont repr√©sent√©es sous la forme de dossiers|
  7398. |    |qui contiendront des fichiers, qui repr√©senteront les tables. Etant donn√© qu'√† la     |
  7399. |    |cr√©ation d'une base, cette derni√®re est vide, CREATE DATABASE se contente de cr√©er un |
  7400. |    |dossier dans le dossier donn√©es de MySQL. Il est aussi possible de cr√©er des bases    |
  7401. |    |avec la m√©thode mysqladmin. 12.1 Pr√©sentation des diff√©rents programmes MySQL.        |
  7402. |    |7.5 DROP DATABASE                                                                     |
  7403. |    |                                                                                      |
  7404. |    |DROP DATABASE [IF EXISTS] Nom_bdd                                                     |
  7405. |    |DROP DATABASE efface toutes les tables de la base , et efface aussi la base, i.e. le  |
  7406. |    |dossier. Il faut √™tre TRES prudent avec cette commande.                               |
  7407. |    |DROP DATABASE retourne le nombre de fichiers qui ont √©t√© effac√©s. Normalement, ce     |
  7408. |    |nombre correspond √† trois fois le nombre de table, √©tant donn√© que chaque table a     |
  7409. |    |trois fichier, un fichier ``.ISD',' un fichier ``.ISM'' et un fichier ``.frm''.       |
  7410. |    |MySQL 3.22 ou plus r√©cent autorise l'utilisation du mot cl√© IF NOT EXISTS, qui ne     |
  7411. |    |retourne pas d'erreur si la base √† effacer n'existe pas.                              |
  7412. |    |Il est aussi possible d'effacer des bases avec la m√©thode mysqladmin. 12.1            |
  7413. |    |Pr√©sentation des diff√©rents programmes MySQL.                                         |
  7414. |    |7.6 CREATE TABLE                                                                      |
  7415. |    |                                                                                      |
  7416. |    |CREATE [TEMPORARY] TABLE [IF NOT EXISTS] Nom_table (create_definition,...)            |
  7417. |    |[options_de_table] [commande_de_selection]                                            |
  7418. |    |                                                                                      |
  7419. |    |create_definition:                                                                    |
  7420. |    |Nom_col type [NOT NULL | NULL] [DEFAULT valeur_par_defaut] [AUTO_INCREMENT]           |
  7421. |    |[PRIMARY KEY] [reference_definition]                                                  |
  7422. |    |ou    PRIMARY KEY (index_Nom_col,...)                                                 |
  7423. |    |ou    KEY [Nom_index] KEY(index_Nom_col,...)                                          |
  7424. |    |ou    INDEX [Nom_index] (index_Nom_col,...)                                           |
  7425. |    |ou    UNIQUE [INDEX] [Nom_index] (index_Nom_col,...)                                  |
  7426. |    |ou    [CONSTRAINT symbole] FOREIGN KEY Nom_index(index_Nom_col,...)                   |
  7427. |    |[reference_definition]                                                                |
  7428. |    |ou    CHECK (expression )                                                             |
  7429. |    |                                                                                      |
  7430. |    |type:                                                                                 |
  7431. |    |TINYINT[(longueur)] [UNSIGNED] [ZEROFILL]                                             |
  7432. |    |ou    SMALLINT[(longueur)] [UNSIGNED] [ZEROFILL]                                      |
  7433. |    |ou    MEDIUMINT[(longueur)] [UNSIGNED] [ZEROFILL]                                     |
  7434. |    |ou    INT[(longueur)] [UNSIGNED] [ZEROFILL]                                           |
  7435. |    |ou    INTEGER[(longueur)] [UNSIGNED] [ZEROFILL]                                       |
  7436. |    |ou    BIGINT[(longueur)] [UNSIGNED] [ZEROFILL]                                        |
  7437. |    |ou    REAL[(longueur,d√©cimales)] [UNSIGNED] [ZEROFILL]                                |
  7438. |    |ou    DOUBLE[(longueur,d√©cimales)] [UNSIGNED] [ZEROFILL]                              |
  7439. |    |ou    FLOAT[(longueur,d√©cimales)] [UNSIGNED] [ZEROFILL]                               |
  7440. |    |ou    DECIMAL(longueur,d√©cimales) [UNSIGNED] [ZEROFILL]                               |
  7441. |    |ou    NUMERIC(longueur,d√©cimales) [UNSIGNED] [ZEROFILL]                               |
  7442. |    |ou    CHAR(longueur) [BINARY]                                                         |
  7443. |    |ou    VARCHAR(longueur) [BINARY]                                                      |
  7444. |    |ou    DATE                                                                            |
  7445. |    |ou    TIME                                                                            |
  7446. |    |ou    TIMESTAMP                                                                       |
  7447. |    |ou    DATETIME                                                                        |
  7448. |    |ou    TINYBLOB                                                                        |
  7449. |    |ou    BLOB                                                                            |
  7450. |    |ou    MEDIUMBLOB                                                                      |
  7451. |    |ou    LONGBLOB                                                                        |
  7452. |    |ou    TINYTEXT                                                                        |
  7453. |    |ou    TEXT                                                                            |
  7454. |    |ou    MEDIUMTEXT                                                                      |
  7455. |    |ou    LONGTEXT                                                                        |
  7456. |    |ou    ENUM(value1,value2,value3,...)                                                  |
  7457. |    |ou    SET(value1,value2,value3,...)                                                   |
  7458. |    |                                                                                      |
  7459. |    |index_Nom_col:                                                                        |
  7460. |    |Nom_col [(longueur)]                                                                  |
  7461. |    |                                                                                      |
  7462. |    |reference_definition:                                                                 |
  7463. |    |REFERENCES Nom_table [(index_Nom_col,...)]                                            |
  7464. |    |[MATCH FULL | MATCH PARTIAL]                                                          |
  7465. |    |[ON DELETE reference_option]                                                          |
  7466. |    |[ON UPDATE reference_option]                                                          |
  7467. |    |                                                                                      |
  7468. |    |reference_option:                                                                     |
  7469. |    |RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT                               |
  7470. |    |                                                                                      |
  7471. |    |options_de_table:                                                                     |
  7472. |    |type = [ISAM | MYISAM | HEAP]                                                         |
  7473. |    |                                                                                      |
  7474. |    |ouauto_increment = #                                                                  |
  7475. |    |ouavg_row_longueur = #                                                                |
  7476. |    |ouchecksum = [0 | 1]                                                                  |
  7477. |    |oucomment = "string"                                                                  |
  7478. |    |oulignes_max= #                                                                       |
  7479. |    |oulignes_min = #                                                                      |
  7480. |    |oupack_keys = [0 | 1]                                                                 |
  7481. |    |oupassword= "string"                                                                  |
  7482. |    |commande_de_selection:                                                                |
  7483. |    |[ | IGNORE | REPLACE] SELECT ...  (Un select valide)                                  |
  7484. |    |CREATE TABLE cr√©e une table, de nom Nom_table, dans la base de donn√©s courante. Les   |
  7485. |    |r√®gles qui r√©gissent les nom de table sont d√©taill√©es dans 7.1.5 Noms de base de      |
  7486. |    |donn√©es, table, index, column et alias. MySQL retourne une erreur si il n'y a pas de  |
  7487. |    |base de donn√©es courante, ou la table existe d√©j√†.                                    |
  7488. |    |Avec MySQL 3.22 ou plus r√©cent, on peut se r√©f√©rer √† la table en utilisant la         |
  7489. |    |structure Nom_bdd.Nom_table. Ceci fonctionne, qu'il y ait une base de donn√©es courante|
  7490. |    |ou pas.                                                                               |
  7491. |    |MySQL 3.23 autorise l'utilisation du mot cl√© TEMPORARY lors de la cr√©ation de table.  |
  7492. |    |Une table temporaire sera automatiquement effac√©e lorsque la connexion sera termin√©e. |
  7493. |    |Cela permet √† deux connexions diff√©rents d'utiliser le m√™me nom de table temporaire,  |
  7494. |    |sans conflit l'un avec l'autre, ou avec une table existante (la table permanente est  |
  7495. |    |cach√©e jusqu'√† ce que la table temporaire soit effac√©e).                              |
  7496. |    |MySQL 3.22 ou plus r√©cent autorise l'utilisation du mot cl√© IF NOT EXISTS, qui ne     |
  7497. |    |retourne pas d'erreur si la table √† cr√©er existe d√©j√†.                                |
  7498. |    |Chaque table est represent√©e par un ou plusieurs fichiers dans le dossier de la bas e |
  7499. |    |de donn√©es. Dans le cas ou la table est de type ISAM, il y aura :                     |
  7500. |    |Pour plus d'information sur les propri√©t√©s des diff√©rents type de colonne, 7.2 Types  |
  7501. |    |de colonnes.                                                                          |
  7502. |    |Si ni NULL ni NOT NULL n'a √©t√© pr√©cis√©, alors la colonne est consid√©r√© comme de type  |
  7503. |    |NULL.                                                                                 |
  7504. |    |Une colonne de type entier peut avoir l'attribut AUTO_INCREMENT. A chaque insertion de|
  7505. |    |la valeur ou de 0 dans une colonne de type AUTO_INCREMENT, la valeur de la colonne est|
  7506. |    |mise √† value+1, avec value qui est la plus grande valeur dans la colonne de la table  |
  7507. |    |courante. AUTO_INCREMENT commence √† 1. Si la ligne contenant la plus grande valeur de |
  7508. |    |la colonne est effac√©e, cette valeur sera r√©utilis√©e. Si toutes les lignes de la table|
  7509. |    |sont effac√©e, AUTO_INCREMENT recommence √† 1. Il ne peux y avoir qu'une seule colonne  |
  7510. |    |de type AUTO_INCREMENT par table, et cette colonne doit √™tre index√©e. Par souci de    |
  7511. |    |compatibilit√© avec ODBC, il est possible d'acc√©der √† la derni√®re ligne ins√©r√©e avec la|
  7512. |    |requ√™te suivante :                                                                    |
  7513. |    |                                                                                      |
  7514. |    |SELECT * FROM Nom_table WHERE auto_col IS NULL                                        |
  7515. |    |Les valeurs NULL sont g√©r√©es de mani√®re diff√©rentes pour les colonnes de type         |
  7516. |    |TIMESTAMP. Il n'est pas possible de stocker la valeur NULL dans une colonne de type   |
  7517. |    |TIMESTAMP, alors cette affectation conduit √† affecter la date et l'heure courante √† la|
  7518. |    |place. A cause de ce comportement, les attributs NULL et NOT NULL ne s'appliquent pas,|
  7519. |    |et sont ignor√©es. D'un autre cot√©, afin de rendre MySQL plus simple √† utiliser, le    |
  7520. |    |serveur autorise l'affectation de NULL aux colonnes de type TIMESTAMP (ce qui est     |
  7521. |    |vrai), m√™me si les colonnes de type TIMESTAMP ne contiendront jamais r√©ellement la    |
  7522. |    |valeur NULL. Cette information est accessible en utilisant la commande DESCRIBE       |
  7523. |    |Nom_table qui d√©taille les colonnes de la table. Il est bon de rappeler que la valeur |
  7524. |    |0 est une valeur valide de TIMESTAMP.                                                 |
  7525. |    |Si aucune valeur par d√©faut n'est pr√©cis√© avec l'attribut DEFAULT, MySQL en assignera |
  7526. |    |automatiquement une. Si la colonne peut prendre la valeur NULL, alors MySQL utilisera |
  7527. |    |cette valeur par d√©faut. Sinon, son comportement d√©pendra du type de colonne :        |
  7528. |    |Pour les types num√©riques autres que ceux ayant l'attribut AUTO_INCREMENT , la valeur |
  7529. |    |par d√©faut est 0 . Pour les colonnes ayant l'attribut AUTO_INCREMENT, la valeur par   |
  7530. |    |d√©faut est la prochaine valeur de la s√©quence.                                        |
  7531. |    |Pour les types date et heures, except√© TIMESTAMP, la valeur par d√©faut est le ``z√©ro''|
  7532. |    |. Pour la premi√®re colonne de type TIMESTAMP, la valeur par d√©faut est la date et     |
  7533. |    |l'heure courante. 7.2.6 Types date et heure.                                          |
  7534. |    |Pour les types cha√Ænes, autre que ENUM, la valeur par d√©faut est la cha√Æne vide. Pour |
  7535. |    |le type ENUM, la valeur par d√©faut est la premi√®re valeur de l'√©num√©ration.           |
  7536. |    |KEY est un synonyme pour INDEX.                                                       |
  7537. |    |Avec MySQL, l'attribut UNIQUE force la valeur √† toujours prendre une valeur distincte.|
  7538. |    |Une erreur surviendra lors de l'insertion d'une ligne qui doublera une ligne d√©j√†     |
  7539. |    |existante.                                                                            |
  7540. |    |Avec MySQL, l'attribut PRIMARY KEY est identique √† l'attribut KEY qui porterait le nom|
  7541. |    |de PRIMARY Une table ne peut avoir qu'une seule colonne avec l'attribut table PRIMARY |
  7542. |    |KEY. Si aucune colonne n'a de PRIMARY KEY et qu'une application requiert la colonne de|
  7543. |    |PRIMARY KEY, MySQL retournera la premi√®re colonne ayant l'attribut UNIQUE.            |
  7544. |    |Une PRIMARY KEY peut √™tre un index multi colonne. Mais il n'est pas possible de cr√©er |
  7545. |    |un index multi colonne qui aurait l'attribut PRIMARY KEY. Pour cela, il faut utiliser |
  7546. |    |la fonction PRIMARY KEY(index_Nom_col, ...) , sous peine de ne voir que la premi√®re   |
  7547. |    |colonne porter l'attribut PRIMARY KEY.                                                |
  7548. |    |Si aucun nom n'est affect√© √† un index, un nom sera automatiquement g√©n√©r√© et assign√©. |
  7549. |    |Ce nom sera constitu√© du nom de la premi√®re colonne, avec un suffixe optionnel,(_2,   |
  7550. |    |_3, ...), pour l rendre unique. La liste des noms d'index est accessible avec la      |
  7551. |    |requ√™te : SHOW INDEX FROM Nom_table.                                                  |
  7552. |    |Seule les tables de type MyISAM acceptent les index sur les colonnes qui contiennent  |
  7553. |    |la valeur NULL. Dans les autres cas, il faut absolument d√©clarer la colonne de type   |
  7554. |    |NOT NULL pour ne pas g√©n√©rer une erreur.                                              |
  7555. |    |Avec la syntaxe Nom_col(longueur), il est possible de sp√©cifier un index qui utilise  |
  7556. |    |seulement une partie de la colonne de type CHAR or VARCHAR. Cela rend l'index         |
  7557. |    |nettement plus petit et plus efficace. Indexes.                                       |
  7558. |    |Seules les tables de type MyISAM acceptent d'indexer les colonnes de type BLOB et TEXT|
  7559. |    |. mettre un index sur une telle colonne impose de pr√©ciser la longueur de la colonne  |
  7560. |    |dans l'index.                                                                         |
  7561. |    |                                                                                      |
  7562. |    |CREATE TABLE test (blob_col BLOB, index(blob_col(10)));                               |
  7563. |    |Lors de l'utilisation des clauses ORDER BY ou GROUP BY avec de colonnes de type TEXT  |
  7564. |    |ou BLOB, seuls les max_sort_longueur premiers octets sont pris en compte. BLOB.       |
  7565. |    |Les attributs FOREIGN KEY, CHECK et REFERENCES ne font en r√©alit√© rien de sp√©cial. Ils|
  7566. |    |sont uniquement fournis pour assurer la compatibilit√© et la portabilit√© de programme  |
  7567. |    |SQL et de les faire tourner avec MySQL.                                               |
  7568. |    |Les colonnes de type prennent un bit de plus, arrondi √† l'octet le plus proche.       |
  7569. |    |La taille maximale d'un enregistrement peut √™tre obtenue avec la requ√™te suivante :   |
  7570. |    |                                                                                      |
  7571. |    |row longueur = 1                                                                      |
  7572. |    |+ (sum of column longueurs)                                                           |
  7573. |    |+ (number of NULL columns + 7)/8                                                      |
  7574. |    |+ (number of variable-longueur columns)                                               |
  7575. |    |Les options options_de_table et SELECT ne sont disponibles qu'√† partir de MySQL 3.23. |
  7576. |    |Les diff√©rents types de tables sont :                                                 |
  7577. |    |Les options de table sont utilis√©es pour optimiser la gestion de la table. Dans la    |
  7578. |    |plus part des cas, ces options peuvent √™tre ignor√©es. Ces options fonctionnent pour   |
  7579. |    |toutes les types de table, sauf indication contraire.                                 |
  7580. |    |Lors de l'utilisation d'une tape de type MyISAM table, MySQL utilise le produit max*  |
  7581. |    |avg_row_longueur pour conna√Ætre la taille maximale de la table. Par d√©faut, la taille |
  7582. |    |maximale de la table est 4Go (4 Giga octets) (ou 2Go, si le syst√®me ne les supporte   |
  7583. |    |pas.                                                                                  |
  7584. |    |Si un CREATE STATEMENT est sp√©cifi√© apr√®s SELECT, MySQL va cr√©er de nouveaux champs   |
  7585. |    |pour chacun des √©l√©ments dans le SELECT . Par exemple                                 |
  7586. |    |                                                                                      |
  7587. |    |mysql> CREATE TABLE test (a int not null auto_increment, primary key (a), key(b))     |
  7588. |    |TYPE=HEAP SELECT b,c from test2;                                                      |
  7589. |    |Cette requ√™te va cr√©er une table de type HEAP table avec 3 colonnes. Cette table sera |
  7590. |    |automatiquement effac√©e si une erreur survient lors de la copie des donn√©es dans ma   |
  7591. |    |table.                                                                                |
  7592. |    |7.6.1 Modifications automatiques de type de colonne                                   |
  7593. |    |Dans certains cas, MySQL spontan√©ment les sp√©cifications d'une colonne lors d'une     |
  7594. |    |commande de CREATE TABLE (Cela peut aussi intervenir lors d'une commande with ALTER   |
  7595. |    |TABLE.)                                                                               |
  7596. |    |Les colonnes de type VARCHAR d'une longueur de moins de 4 caract√®res sont chang√©es en |
  7597. |    |CHAR.                                                                                 |
  7598. |    |Si l'une des colonne de la table a une longueur variable, alors la ligne compl√®te a   |
  7599. |    |aussi une longueur variable. Par cons√©quent, si la table contient une colonne de      |
  7600. |    |longueur variable(VARCHAR, TEXT or BLOB), toutes les colonnes de type CHAR et de      |
  7601. |    |longueur sup√©rieur √† 3 caract√®res sont chang√©es en colonne de type VARCHAR .Cela ne   |
  7602. |    |change en rien l'utilisation de ces colonnes, cela modifie simplement la fa√ßon dont   |
  7603. |    |les colonnes sont stock√©es. MySQL effectue cette conversion car cela √©conomise de la  |
  7604. |    |place, et rend les op√©rations sur la table plus rapides.                              |
  7605. |    |La taille d'affichage des colonnes de type TIMESTAMP doit √™tre pair et compris dans   |
  7606. |    |l'intervalle de 2 √† 14. En dehors de l'intervalle 2 √† 14, la taille de l'affichage est|
  7607. |    |ramen√©e √† 14. En cas de nombre impair, le nombre est arrondi au nombre pair           |
  7608. |    |directement sup√©rieur.                                                                |
  7609. |    |Il est impossible d'enregistrer une valeur NULL dans une colonne de type TIMESTAMP,   |
  7610. |    |car une telle affectation revient √† assigner la date et l'heure courante √† la colonne.|
  7611. |    |De ce fait, les attributs NULL et NOT NULL ne s'appliquent pas aux colonnes de type   |
  7612. |    |TIMESTAMP, et sont ignor√©s. Lors d'une requ√™te DESCRIBE Nom_table MySQL r√©pondra      |
  7613. |    |toujours que la colonne accepte les valeurs de type NULL.                             |
  7614. |    |MySQL effectue la correspondance entre certains types utilis√© par d'autres bases de   |
  7615. |    |donn√©es SQL vers des types MySQL. 7.2.11 Utiliser des types de colonnes d'autres bases|
  7616. |    |de donn√©es.                                                                           |
  7617. |    |Pour savoir si MySQL a modifi√© spontan√©ment le type d'une colonne, il faut utiliser la|
  7618. |    |requ√™te DESCRIBE Nom_table apr√®s la cr√©ation ou la modification de la table.          |
  7619. |    |Certaines autres modifications de type peuvent intervenir lors de la compression de   |
  7620. |    |table avec la commande pack_isam. 10.17 Quel sont les diff√©rents formats de lignes?   |
  7621. |    |Quand utiliser VARCHAR/CHAR?.                                                         |
  7622. |    |7.7 ALTER TABLE                                                                       |
  7623. |    |                                                                                      |
  7624. |    |ALTER [IGNORE] TABLE Nom_table alter_spec [, alter_spec ...]                          |
  7625. |    |alter_specification:                                                                  |
  7626. |    |ADD [COLUMN] create_definition [FIRST | AFTER column_name ]                           |
  7627. |    |ou    ADD INDEX [Nom_index] (index_Nom_col,...)                                       |
  7628. |    |ou    ADD PRIMARY KEY (index_Nom_col,...)                                             |
  7629. |    |ou    ADD UNIQUE [Nom_index] (index_Nom_col,...)                                      |
  7630. |    |ou    ALTER [COLUMN] Nom_col {SET DEFAULT literal | DROP DEFAULT}                     |
  7631. |    |ou    CHANGE [COLUMN] old_Nom_col create_definition                                   |
  7632. |    |ou    MODIFY [COLUMN] create_definition                                               |
  7633. |    |ou    DROP [COLUMN] Nom_col                                                           |
  7634. |    |ou    DROP PRIMARY KEY                                                                |
  7635. |    |ou    DROP INDEX key_name                                                             |
  7636. |    |ou    RENAME [AS] new_Nom_table                                                       |
  7637. |    |ou    table_option                                                                    |
  7638. |    |ALTER TABLE modifie la structure d'une table existante. Par exemple, il est possible  |
  7639. |    |d'ajouter ou d'effacer des colonnes, de cr√©er et d√©truire des index, de changer le    |
  7640. |    |type d'une colonne ou de la renommer, voire m√™me de renommer la table elle-m√™me. Il   |
  7641. |    |est aussi possible de changer le commentaire de la table et son type. Voir CREATE     |
  7642. |    |TABLE.                                                                                |
  7643. |    |Si, lors d'une modification de type de colonne, la commande DESCRIBE Nom_table indique|
  7644. |    |que la colonne n'a pas chang√© de type, il est possible que MySQL ait ignor√© la        |
  7645. |    |modification pour une des raisons d√©crites dans 7.6.1 Modifications automatiques de   |
  7646. |    |type de colonne. Par exemple, si il existe plusieurs colonne de type de longueur      |
  7647. |    |variable, rien de sert de tenter de forcer une colonne du type VARCHAR √† CHAR.        |
  7648. |    |ALTER TABLE fonctionne en effectuant une copie temporaire de la table originale. La   |
  7649. |    |modification est effectu√©e sur la copie, puis l'originale est remplac√©e par la copie  |
  7650. |    |modifi√©e. Toutes les mises √† jours sont automatiquement appel√©, et sont faites dans un|
  7651. |    |mode sans erreur. Pendant la modification, la table originale est toujours accessible |
  7652. |    |en lecture par les autres clients. Les mises √† jour et les √©critures sont report√©es   |
  7653. |    |jusqu'√† la fin de la modification.                                                    |
  7654. |    |Pour pouvoir utiliser la commande ALTER TABLE, il faut avoir les droits pour select,  |
  7655. |    |insert, delete, update, create et drop sur la table.                                  |
  7656. |    |IGNORE est une extension MySQL de la norme ANSI SQL92. Il permet de contr√¥ler la fa√ßon|
  7657. |    |avec laquelle r√©agit si il trouve des doublons dans une colonne de cl√©s uniques. Si   |
  7658. |    |n'est pas pr√©cis√©, la copie est annul√©e √† la premi√®re erreur, et la modification est  |
  7659. |    |annul√©e. Si est pr√©cis√©, alors la premi√®re occurrence d'une cl√©s en double sera       |
  7660. |    |utilis√©e, les autres occurrences √©tant ignor√©es et effac√©es.                          |
  7661. |    |Il est possible d'utiliser plusieurs clauses ADD, ALTER, DROP et CHANGE dans une      |
  7662. |    |commande ALTER TABLE. C'est une extension de MySQL √† la norme ANSI SQL92 : cette      |
  7663. |    |derni√®re ne permet qu'une seule de ces clauses √† chaque commande.                     |
  7664. |    |CHANGE Nom_col, DROP Nom_col et DROP INDEX sont des extensions de MySQL √† la norme    |
  7665. |    |ANSI SQL92                                                                            |
  7666. |    |CHANGE Nom_col, DROP Nom_col et DROP INDEX sont des extensions de MySQL √† la norme    |
  7667. |    |ANSI SQL92 .                                                                          |
  7668. |    |MODIFY est une extension Oracle √† ALTER TABLE.                                        |
  7669. |    |L'option COLUMN est simplement de la d√©coration et peut √™tre ignor√©.                  |
  7670. |    |La commande '' ALTER TABLE Nom_table RENAME AS new_name '' sans aucune autre option,  |
  7671. |    |permet de renommer la table. MySQL va simplement renommer les fichiers correspondant √†|
  7672. |    |la table Nom_table. Il n'y a pas de cr√©ation de table temporaire.                     |
  7673. |    |La clause create_definition utilise la m√™me syntaxe que les clauses ADD et CHANGE,    |
  7674. |    |ainsi que CREATE TABLE. Cette inclus le nom de la colonne, et pas seulement le type de|
  7675. |    |colonne. Voir CREATE TABLE.                                                           |
  7676. |    |La commande CHANGE old_Nom_col create_definition permet de changer le nom d'une       |
  7677. |    |colonne. Pour cela, il faut sp√©cifier l'ancien et le nouveau nom de la colonne, ainsi |
  7678. |    |que le type courant de la colonne. Par exemple, pour renommer une colonne de type     |
  7679. |    |INTEGER de 'a' en 'b', la commande suivante est valable :                             |
  7680. |    |                                                                                      |
  7681. |    |mysql> ALTER TABLE t1 CHANGE a b INTEGER;                                             |
  7682. |    |Pour changer le type de la colonne mais pas son nom, la syntaxe de CHANGE requiert    |
  7683. |    |deux noms de colonnes, m√™me si ils sont identiques. Par exemple :                     |
  7684. |    |                                                                                      |
  7685. |    |mysql> ALTER TABLE t1 CHANGE b b BIGINT NOT NULL;                                     |
  7686. |    |Cependant, √† partir de MySQL 3.22.16a, il est possible d'utiliser la clause MODIFY    |
  7687. |    |pour changer le type de la colonne sans le renommer:                                  |
  7688. |    |                                                                                      |
  7689. |    |mysql> ALTER TABLE t1 MODIFY b BIGINT NOT NULL;                                       |
  7690. |    |Lors de l'utilisation de CHANGE ou MODIFY pour r√©duire la taille d'une colonne qui    |
  7691. |    |poss√®de un index (par exemple, un index sur les 10 premiers caract√®res d'une colonne  |
  7692. |    |de type VARCHAR ), il est impossible de rendre la colonne plus petite que ne le       |
  7693. |    |requiert l'index.                                                                     |
  7694. |    |En changeant le type d'une colonne avec CHANGE ou MODIFY, MySQL essaie de convertir au|
  7695. |    |mieux les informations d'un type √† l'autre.                                           |
  7696. |    |A partir de MySQL 3.22, il est possible d'utiliser FIRST ou ADD ... AFTER Nom_col pour|
  7697. |    |ajouter une colonne √† une position donn√©e, dans une table. Par d√©faut, l'ajout de fait|
  7698. |    |apr√®s la derni√®re colonne.                                                            |
  7699. |    |ALTER COLUMN sp√©cifie une nouvelle valeur par d√©faut, ou bien efface l'ancienne       |
  7700. |    |valeur. Si la valeur par d√©faut de la colonne est effac√©e, et que la colonne peut √™tre|
  7701. |    |NULL, alors la nouvelle valeur par d√©faut est NULL.Si la colonne ne peut pas √™tre     |
  7702. |    |NULL, alors MySQL assigne une valeur par d√©faut arbitraire, comme d√©crit dans le      |
  7703. |    |paragraphe CREATE TABLE.                                                              |
  7704. |    |DROP INDEX efface un index. C'est une extension de MySQL √† la norme ANSI SQL92 .      |
  7705. |    |Lorsqu'une colonne est effac√©e d'une table, la colonne est aussi effac√©e de toutes les|
  7706. |    |index qui l'utilise. Si toutes les colonnes qui composent un index sont effac√©es,     |
  7707. |    |l'index dispara√Æt aussi.                                                              |
  7708. |    |DROP PRIMARY KEY efface la colonne qui porte l'attribut PRIMARY KEY . Si une telle    |
  7709. |    |colonne n'existe pas, la premi√®re colonne de type UNIQUE est effac√©e √† la place.      |
  7710. |    |(MySQL utilise la premi√®re colonne UNIQUE comme PRIMARY KEY si aucune PRIMARY KEY     |
  7711. |    |n'est sp√©cifi√©e.)                                                                     |
  7712. |    |Avec l'API C mysql_info(), il est possible de savoir combien de ligne ont √©t√© copi√©e, |
  7713. |    |et (quand l'option IGNORE √©tait mise), le nombre de lignes qui furent effac√©es, √†     |
  7714. |    |cause de la duplication de cl√©s.                                                      |
  7715. |    |                                                                                      |
  7716. |    |Les attributs FOREIGN KEY, CHECK et REFERENCES ne font en r√©alit√© rien de sp√©cial. Ils|
  7717. |    |sont uniquement fournis pour assurer la compatibilit√© et la portabilit√© de programme  |
  7718. |    |SQL et de les faire tourner avec MySQL.                                               |
  7719. |    |Voici quelques exemples d'utilisation de la commande ALTER TABLE. On supposera que la |
  7720. |    |table t1, cr√©√©e ci-dessous, existe :                                                  |
  7721. |    |                                                                                      |
  7722. |    |mysql> CREATE TABLE t1 (a INTEGER,b CHAR(10));                                        |
  7723. |    |Renomme la table de t1 et t2:                                                         |
  7724. |    |                                                                                      |
  7725. |    |mysql> ALTER TABLE t1 RENAME t2;                                                      |
  7726. |    |Change le type de la colonne a de INTEGER en TINYINT NOT NULL (mais ne change pas le  |
  7727. |    |nom), et change le type de la colonne b de CHAR(10) en CHAR(20) et renomme cette      |
  7728. |    |colonne en c.                                                                         |
  7729. |    |                                                                                      |
  7730. |    |mysql> ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE b c CHAR(20);                 |
  7731. |    |Ajoute une nouvelle colonne d, de type TIMESTAMP.                                     |
  7732. |    |                                                                                      |
  7733. |    |mysql> ALTER TABLE t2 ADD d TIMESTAMP;                                                |
  7734. |    |Ajoute un index sur la colonne d, et fait de la colonne a une PRIMARY KEY             |
  7735. |    |                                                                                      |
  7736. |    |mysql> ALTER TABLE t2 ADD INDEX (d), ADD PRIMARY KEY (a);                             |
  7737. |    |Efface la colonne c:                                                                  |
  7738. |    |                                                                                      |
  7739. |    |mysql> ALTER TABLE t2 DROP COLUMN c;                                                  |
  7740. |    |Ajoute une nouvelle colonne de type AUTO_INCREMENT integer , nomm√©e c:                |
  7741. |    |                                                                                      |
  7742. |    |mysql> ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT,                     |
  7743. |    |ADD INDEX (c);                                                                        |
  7744. |    |Il faut remarquer que la colonne c a √©t√© index√©e, car les colonnes de type            |
  7745. |    |AUTO_INCREMENT doivent √™tre index√©e, ce qui implique c doit avoir l'attribut NOT NULL,|
  7746. |    |puisque les colonnes index√©es ne peuvent pas avoir de valeur √† NULL.                  |
  7747. |    |7.8 OPTIMIZE TABLE                                                                    |
  7748. |    |                                                                                      |
  7749. |    |OPTIMIZE TABLE Nom_table                                                              |
  7750. |    |OPTIMZE TABLE est √† utiliser apr√®s avoir effacer de grandes parties d'une table, pour |
  7751. |    |apr√®s des modifications majeures sur une table √† longueur de ligne variable. Les index|
  7752. |    |des lignes effac√©es sont conserv√©s, et l'op√©ration INSERT les r√©utilise, et √©crase mes|
  7753. |    |anciennes lignes. La commande OPTIMIZE TABLE permet de r√©cup√©rer l'espace inutilis√©   |
  7754. |    |des tables.                                                                           |
  7755. |    |OPTIMIZE TABLE fonctionne en effectuant une copie temporaire de la table originale. La|
  7756. |    |modification est effectu√©e sur la copie, puis l'originale est remplac√©e par la copie  |
  7757. |    |modifi√©e. Toutes les mises √† jours sont automatiquement appel√©, et sont faites dans un|
  7758. |    |mode sans erreur. Pendant la modification, la table originale est toujours accessible |
  7759. |    |en lecture par les autres clients. Les mises √† jour et les √©critures sont report√©es   |
  7760. |    |jusqu'√† la fin de la modification.                                                    |
  7761. |    |7.9 DROP TABLE                                                                        |
  7762. |    |                                                                                      |
  7763. |    |DROP TABLE [IF EXISTS] Nom_table [, Nom_table,...]                                    |
  7764. |    |DROP TABLE efface une ou plusieurs tables. Toutes les donn√©es et le fichier de        |
  7765. |    |d√©finition sont effac√©s. Cette commande est irr√©versible                              |
  7766. |    |MySQL 3.22 ou plus r√©cent autorise l'utilisation du mot cl√© IF EXISTS, qui ne retourne|
  7767. |    |pas d'erreur si la table √† effacer n'existe pas.                                      |
  7768. |    |7.10 DELETE                                                                           |
  7769. |    |                                                                                      |
  7770. |    |DELETE [LOW_PRIORITY] FROM Nom_table                                                  |
  7771. |    |[WHERE where_definition] [LIMIT rows]                                                 |
  7772. |    |DELETE efface les lignes de la table Nom_table qui satisfont les conditions donn√©es   |
  7773. |    |par where_definition, et retourne le nombre de ligne effac√©es.                        |
  7774. |    |Une commande DELETE sans clause WHERE s'applique √† toutes les lignes, c'est √† dire que|
  7775. |    |la table est vid√©e de toutes ses donn√©es (mais elle n'est pas effac√©e). MySQL recr√©e  |
  7776. |    |alors la table, mais vide, ce qui est nettement plus rapide que d'effacer les lignes  |
  7777. |    |unes √† unes. Dans ce cas particulier, MySQL retourne 0 (. (MySQL ne peut pas conna√Ætre|
  7778. |    |le nombre de ligne de la table sans l'avoir ouverte, car la recr√©ation est faite sans |
  7779. |    |acc√©der √† la table), return the number of rows that were actually deleted, since the  |
  7780. |    |recreate is done without opening the data files). Tant que le fichier ``Nom_table.frm'|
  7781. |    |est valide, il est possible de recr√©er la table, m√™me si le fichier de donn√©es est    |
  7782. |    |corrompu).'                                                                           |
  7783. |    |Pour obtenir le nombre de ligne effac√©es lors de l'effacement de la table, il est     |
  7784. |    |toujours possible de sacrifier la vitesse d'ex√©cution, et d'utiliser la commande      |
  7785. |    |suivante :                                                                            |
  7786. |    |                                                                                      |
  7787. |    |mysql> DELETE FROM Nom_table WHERE 1>0;                                               |
  7788. |    |Cette requ√™te est particuli√®rement LENTE, car l'effacement se fait ligne √† ligne, √†   |
  7789. |    |cause de la clause WHERE                                                              |
  7790. |    |L'option LOW_PRIORITY permet de reporter l'effacement jusqu'au moment ou il ne reste  |
  7791. |    |plus personne qui lise la table.                                                      |
  7792. |    |Les ligne effac√©es sont conserv√©es dans une liste, et les insertions ult√©rieurs       |
  7793. |    |r√©utiliseront cette place. Pour forcer la r√©cup√©ration de cette place, il faut        |
  7794. |    |utiliser la commande OPTIMIZE TABLE ou bien l'utilitaire isamchk pour r√©organiser les |
  7795. |    |tables. OPTIMIZE TABLE est plus simple, mais isamchk plus rapide. OPTIMIZE TABLE.     |
  7796. |    |L'option LIMIT, sp√©cifique √† MySQL, permet d'indiquer au serveur le nombre maximum de |
  7797. |    |ligne √† effacer. Cela permet d'√©viter qu'une commande DELETE ne prenne trop de temps. |
  7798. |    |Il suffit alors de r√©p√©ter la commande jusqu'√† ce qu'elle ait effac√© moins de ligne   |
  7799. |    |que LIMIT.                                                                            |
  7800. |    |7.11 SELECT                                                                           |
  7801. |    |                                                                                      |
  7802. |    |SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [DISTINCT | DISTINCTROW | ALL]              |
  7803. |    |select_expression,...                                                                 |
  7804. |    |[INTO OUTFILE 'Nom_fichier' export_options]                                           |
  7805. |    |[FROM table_references                                                                |
  7806. |    |[WHERE where_definition]                                                              |
  7807. |    |[GROUP BY Nom_col,...]                                                                |
  7808. |    |[HAVING where_definition]                                                             |
  7809. |    |[ORDER BY {unsigned_integer | Nom_col | formula} [ASC | DESC] ,...]                   |
  7810. |    |[LIMIT [offset,] rows]                                                                |
  7811. |    |[PROCEDURE procedure_name] ]                                                          |
  7812. |    |SELECT est utilis√© pour obtenir des lignes √† partir d'une ou plusieurs tables.        |
  7813. |    |select_expression indique les colonnes √† lire. SELECT peut aussi √™tre utilis√© pour    |
  7814. |    |ex√©cuter des calculs sans rapport avec aucune table. Par exemple :                    |
  7815. |    |                                                                                      |
  7816. |    |mysql> SELECT 1 + 1;                                                                  |
  7817. |    |-> 2                                                                                  |
  7818. |    |Toutes les options doivent imp√©rativement √™tre dans l'ordre indiqu√© ci dessus. Par    |
  7819. |    |exemple, une clause HAVING doit √™tre apr√®s GROUP BY et avant la clause ORDER BY .     |
  7820. |    |Une clause SELECT peut utiliser des alias, introduit par le mot cl√© AS. L'alias est   |
  7821. |    |utilis√© comme un nom de colonne, et peut √™tre repris dans une clause ORDER BY ou      |
  7822. |    |HAVING. Par exemple:                                                                  |
  7823. |    |                                                                                      |
  7824. |    |mysql> select concat(last_name,', ',first_name) AS full_name                          |
  7825. |    |from maTable ORDER BY full_name;                                                      |
  7826. |    |La clause FROM table_references indique les noms des tables qu'il faut interroger. Si |
  7827. |    |il y a plusieurs tables, il vaut mieux utiliser la clause join. JOIN.                 |
  7828. |    |Il est possible d'appeler une colonne sous les formes Nom_col, Nom_table.Nom_col or   |
  7829. |    |Nom_bdd.Nom_table.Nom_col. Il n'y a pas besoin de pr√©ciser les pr√©fixes Nom_table ou  |
  7830. |    |Nom_bdd.Nom_table lors d'un SELECT √† moins que les noms soient ambigu√´s. 7.1.5 Noms de|
  7831. |    |base de donn√©es, table, index, column et alias, pour des exemples sur les ambigu√Øt√©s  |
  7832. |    |qui peuvent appara√Ætre.                                                               |
  7833. |    |Une r√©f√©rence sur une table peut √™tre alias√©e avec Nom_table [AS] Nom_alias.          |
  7834. |    |                                                                                      |
  7835. |    |mysql> select t1.name, t2.salary from employee AS t1, info AS t2                      |
  7836. |    |where t1.name = t2.name;                                                              |
  7837. |    |mysql> select t1.name, t2.salary from employee t1, info t2                            |
  7838. |    |where t1.name = t2.name;                                                              |
  7839. |    |Les colonnes demand√©es en sortie peuvent √™tre utilis√©es dans les clauses ORDER BY et  |
  7840. |    |GROUP BY en utilisant leur nom, leurs alias ou leur positions. Les colonnes sont      |
  7841. |    |positionn√©es √† partir de 1.                                                           |
  7842. |    |                                                                                      |
  7843. |    |mysql> select college, region, seed from tournament                                   |
  7844. |    |ORDER BY region, seed;                                                                |
  7845. |    |mysql> select college, region AS r, seed AS s from tournament                         |
  7846. |    |ORDER BY r, s;                                                                        |
  7847. |    |mysql> select college, region, seed from tournament                                   |
  7848. |    |ORDER BY 2, 3;                                                                        |
  7849. |    |Pour trier dans l'ordre descendant, il faut ajouter le mot cl√© DESC apr√®s le nom de la|
  7850. |    |colonne, dans la clause ORDER BY . Par d√©faut, l'ordre ascendant est utilis√©, et peut |
  7851. |    |√™tre explicitement demand√© en utilisant le mot cl√© ASC                                |
  7852. |    |La clause HAVING peut faire r√©f√©rence √† n'importe quelle colonne ou alias pr√©sent dans|
  7853. |    |select_expression. Cette clause est √©valu√©e en dernier, juste avant que les lignes    |
  7854. |    |soient envoy√©es au client, sans aucune optimisation. Il ne faut pas utiliser HAVING l√†|
  7855. |    |WHERE o√π est plus efficace. Par exemple, il ne faut pas √©crire :                      |
  7856. |    |                                                                                      |
  7857. |    |mysql> select Nom_col from Nom_table HAVING Nom_col > 0;                              |
  7858. |    |A la place, il vaut mieux √©crire :                                                    |
  7859. |    |                                                                                      |
  7860. |    |mysql> select Nom_col from Nom_table WHERE Nom_col > 0;                               |
  7861. |    |A partir de MySQL 3.22.5, on peut √©crire des requ√™tes telles que:                     |
  7862. |    |                                                                                      |
  7863. |    |mysql> select user,max(salary) from users                                             |
  7864. |    |group by user HAVING max(salary)>10;                                                  |
  7865. |    |Dans les versions anciennes de MySQL , il √©tait possible d'√©crire :                   |
  7866. |    |                                                                                      |
  7867. |    |mysql> select user,max(salary) AS sum from users                                      |
  7868. |    |group by user HAVING sum>10;                                                          |
  7869. |    |L'option STRAIGHT_JOIN force l'optimiseur √† regrouper les tables dans l'ordre dans    |
  7870. |    |lequel elles sont sp√©cifi√©es dans la FROM . Cela permet d'acc√©l√©rer le traitement     |
  7871. |    |d'une requ√™te. EXPLAIN.                                                               |
  7872. |    |L'option SQL_SMALL_RESULT peut √™tre utilis√© avec les clauses GROUP BY ou DISTINCT pour|
  7873. |    |indiquer √† l'optimiseur que le r√©sultat sera de petite taille. Dans ce cas, MySQL va  |
  7874. |    |utiliser des tables temporaires d'acc√®s rapide, pour enregistrer les tables de        |
  7875. |    |r√©sultat, plutot que de faire des tries. SQL_SMALL_RESULT est une extension MySQL de  |
  7876. |    |ANSI SQL92.                                                                           |
  7877. |    |L'option LIMIT peut √™tre utilis√©e pour restreindre le nombre de lign retourn√©e SELECT |
  7878. |    |. LIMIT a un ou deux arguments num√©riques.. Le premier indique l'index de la ligne de |
  7879. |    |d√©but, et le deuxi√®me indique le nombre de ligne √† retourner. L'indexe de la ligne    |
  7880. |    |initiale est 0.                                                                       |
  7881. |    |                                                                                      |
  7882. |    |mysql> select * from table LIMIT 5,10;  # retourne les lignes 6-15                    |
  7883. |    |Si un seul argument est fourni √† LIMIT, il indique le nombre de ligne √† retourner.    |
  7884. |    |                                                                                      |
  7885. |    |mysql> select * from table LIMIT 5;     # retourne les 5 premiere lignes              |
  7886. |    |LIMIT n et LIMIT 0,n sont √©quivalents.                                                |
  7887. |    |La forme SELECT ... INTO OUTFILE 'Nom_fichier' de la syntaxe de SELECT √©crit les      |
  7888. |    |lignes selectionn√©es dans un fichier. Les fichiers cr√©√©s sont √©crit sur le serveur, et|
  7889. |    |ne doit pas exister au moment de l'√©criture (cela √©vite d'√©craser le fichier          |
  7890. |    |/etc/passwd, par exemple). Il faut avoir les droits d'√©criture. SELECT ... INTO       |
  7891. |    |OUTFILE est le contraire de la commande LOAD DATA INFILE; qui importe les lignes √†    |
  7892. |    |partir d'un fichier. L'expression export_options est constitu√©e des m√™me champs FIELDS|
  7893. |    |et LINES que dans la commande LOAD DATA INFILE . section LOAD DATA. Dans le fichier   |
  7894. |    |texte r√©sultant de la commande SELECT ... INTO OUTFILE , seuls, les caract√®res        |
  7895. |    |suivants sont pr√©c√©d√© du caract√®re d'√©chappement, pr√©cis√© avec ESCAPED BY:            |
  7896. |    |Le caract√®re ESCAPED BY                                                               |
  7897. |    |Le premier caract√®re dans la clause FIELDS TERMINATED BY                              |
  7898. |    |Le premier caract√®re dans la clause LINES TERMINATED BY                               |
  7899. |    |De plus, le caract√®re ASCII 0 est converti en ESCAPED BY suivi de 0 (ASCII 48). La    |
  7900. |    |raison de l'ajout du caract√®re d'√©chappement apr√®s les caract√®res FIELDS TERMINATED   |
  7901. |    |BY, ESCAPED BY ou LINES TERMINATED BY ,est que cela permet la relecture du fichier. Le|
  7902. |    |caract√®re ASCII 0 est √©chapp√© pour le rendre plus lisible par les √©diteurs. Et comme  |
  7903. |    |le fichier r√©sultant n'a pas √† se conformer √† la norme SQL, ce sont les seuls         |
  7904. |    |caract√®res √† √™tre √©chapp√©s.                                                           |
  7905. |    |7.12 JOIN                                                                             |
  7906. |    |MySQL utilise les syntaxes suivantes pour les commandes de JOIN:                      |
  7907. |    |                                                                                      |
  7908. |    |table_reference, table_reference                                                      |
  7909. |    |table_reference [CROSS] JOIN table_reference                                          |
  7910. |    |table_reference INNER JOIN table_reference                                            |
  7911. |    |table_reference STRAIGHT_JOIN table_reference                                         |
  7912. |    |table_reference LEFT [OUTER] JOIN table_reference ON conditional_expression           |
  7913. |    |table_reference LEFT [OUTER] JOIN table_reference USING (column_list)                 |
  7914. |    |table_reference NATURAL LEFT [OUTER] JOIN table_reference                             |
  7915. |    |{ oj table_reference LEFT OUTER JOIN table_reference ON conditional_expression  }     |
  7916. |    |La derni√®re syntaxe LEFT OUTER JOIN n'existe que pour assurer la compatibilit√© avec   |
  7917. |    |ODBC.                                                                                 |
  7918. |    |Les r√©f√©rences sur les tables peuvent √™tre des alias.                                 |
  7919. |    |                                                                                      |
  7920. |    |mysql> select t1.name, t2.salary from employee AS t1, info AS t2                      |
  7921. |    |where t1.name = t2.name;                                                              |
  7922. |    |INNER JOIN et , (comma) sont √©quivalents. Les deux effectuent un regroupement des     |
  7923. |    |tables utilis√©es. Normalement, il faut pr√©ciser comment les tables sont reli√©es avec  |
  7924. |    |la condition WHERE .                                                                  |
  7925. |    |La condition ON est identique √† WHERE.                                                |
  7926. |    |Si il n'y a pas de lignes qui correspondent √† la table de gauche, dans la clause LEFT |
  7927. |    |JOIN, une ligne dont toutes les colonnes sont mises √† NULL est g√©n√©r√©e. Ceci permet de|
  7928. |    |rechercher les lignes d'une table qui n'ont pas de contrepartie dans une autre table. |
  7929. |    |                                                                                      |
  7930. |    |mysql> select table1.* from table1                                                    |
  7931. |    |LEFT JOIN table2 ON table1.id=table2.id                                               |
  7932. |    |where table2.id is NULL;                                                              |
  7933. |    |Cet exemple recherche toutes les lignes dans la table1 avec une colonne id qui n'est  |
  7934. |    |pas pr√©sent dans la table table2 (i.e., toutes les lignes de la table table1 qui n'ont|
  7935. |    |pas de ligne correspondantes dans la table table2). Cela implique que a √©t√© d√©clar√©   |
  7936. |    |table1.id, bien entendu !                                                             |
  7937. |    |La clause USING column_list sp√©cifie une liste de nom de colonne qui doivent exister  |
  7938. |    |dans toutes les tables. Une utilisation telle que                                     |
  7939. |    |                                                                                      |
  7940. |    |A LEFT JOIN B USING (C1,C2,C3,...)                                                    |
  7941. |    |Correspond √† l'utilisation d'une clause ON comme ceci :                               |
  7942. |    |                                                                                      |
  7943. |    |A.C1=B.C1 AND A.C2=B.C2 AND A.C3=B.C3,...                                             |
  7944. |    |La clause NATURAL LEFT JOIN de deux tables est √©quivalent √† utilisation de la clause  |
  7945. |    |LEFT JOIN avec USING, en pr√©cisant les noms de toutes les colonnes qui existent dans  |
  7946. |    |les deux tables.                                                                      |
  7947. |    |STRAIGHT_JOIN est identique √† JOIN, √† l'exception du fait que la table de gauche est  |
  7948. |    |lue avant la table de droite. Cela est pratique pour les (rares) cas o√π l'optimiseur  |
  7949. |    |de regroupement utilise les tables dans le mauvais ordre .                            |
  7950. |    |Quelques exemples                                                                     |
  7951. |    |                                                                                      |
  7952. |    |mysql> select * from table1,table2 where table1.id=table2.id;                         |
  7953. |    |mysql> select * from table1 LEFT JOIN table2 ON table1.id=table2.id;                  |
  7954. |    |mysql> select * from table1 LEFT JOIN table2 USING (id);                              |
  7955. |    |mysql> select * from table1 LEFT JOIN table2 ON table1.id=table2.id                   |
  7956. |    |LEFT JOIN table3 ON table2.id=table3.id;                                              |
  7957. |    |LEFT JOIN optimization.                                                               |
  7958. |    |7.13 INSERT                                                                           |
  7959. |    |                                                                                      |
  7960. |    |INSERT [LOW_PRIORITY | DELAYED] [IGNORE]                                              |
  7961. |    |[INTO] Nom_table [(Nom_col,...)]                                                      |
  7962. |    |VALUES (expression,...),(...),...                                                     |
  7963. |    |ou  INSERT [LOW_PRIORITY | DELAYED] [IGNORE]                                          |
  7964. |    |[INTO] Nom_table [(Nom_col,...)]                                                      |
  7965. |    |SELECT ...                                                                            |
  7966. |    |ou  INSERT [LOW_PRIORITY | DELAYED] [IGNORE]                                          |
  7967. |    |[INTO] Nom_table                                                                      |
  7968. |    |SET Nom_col=expression, Nom_col=expression, ...                                       |
  7969. |    |INSERT ins√®re une nouvelle ligne dans une table existante.. La forme de INSERT ...    |
  7970. |    |VALUES est bas√©e sur des colonnes explicitement pr√©cis√©e. forme de INSERT ... SELECT  |
  7971. |    |ins√®re des donn√©es depuis une autre table. La forme de INSERT ... VALUES avec         |
  7972. |    |plusieurs valeurs est accept√©e MySQL √† partir de la version 3.22.5 . La syntaxe       |
  7973. |    |Nom_col=expression est accept√© par MySQL √† partir de la version 3.22.10.              |
  7974. |    |Nom_table est le nom de la table dans laquelle les lignes vont √™tre ins√©r√©e. La liste |
  7975. |    |de nom de colonne ou la clause SET indique quelles colonnes vont √™tre assign√©es.      |
  7976. |    |Si aucun nom de colonne n'est pr√©cis√© dans la commande, INSERT ... VALUES or INSERT   |
  7977. |    |... SELECT, alors des valeurs doivent √™tre fournies pour toutes les colonnes dans la  |
  7978. |    |liste de VALUES(). Pour conna√Ætre l'ordre des colonnes, il faut utiliser la commande  |
  7979. |    |DESCRIBE Nom_table.                                                                   |
  7980. |    |Toute colonne qui n'a pas de valeur explicitement fournie est mise √† sa valeur par    |
  7981. |    |d√©faut. Par exemple, il est possible de fournir une liste de colonne en omettant      |
  7982. |    |certains noms : les valeurs de ces colonnes seront les valeurs par d√©faut. Pour avoir |
  7983. |    |les d√©tails sur les valeurs par d√©faut, CREATE TABLE.                                 |
  7984. |    |Une expression peut faire r√©f√©rence √† n'importe quelle colonne d√©j√† nomm√©e dans la    |
  7985. |    |liste des colonnes. Par exemple :                                                     |
  7986. |    |                                                                                      |
  7987. |    |mysql> INSERT INTO Nom_table (col1,col2) VALUES(15,col1*2);                           |
  7988. |    |Mais pas ceci :                                                                       |
  7989. |    |                                                                                      |
  7990. |    |mysql> INSERT INTO Nom_table (col1,col2) VALUES(col2*2,15);                           |
  7991. |    |L'option LOW_PRIORITY permet de diff√©rer une ex√©cution jusqu'√† ce qu'il n'y ait plus  |
  7992. |    |de client qui lisent la table.                                                        |
  7993. |    |L'option permet, lors de l'insertion dans une table qui a une colonne de type PRIMARY |
  7994. |    |or UNIQUE , de ne pas renvoyer d'erreur si une insertion essaie de doubler une cl√©    |
  7995. |    |d√©j√† existante. Si cette option n'est pas pr√©cis√©e, l'insertion est annul√©e √† partir  |
  7996. |    |de la ligne erron√©e. Le nombre de ligne correctement ins√©r√©es est accessible avec     |
  7997. |    |mysql_info() .                                                                        |
  7998. |    |Si MySQL a √©t√© configur√© avec l'option DONT_USE_DEFAULT_FIELDS , une commande INSERT  |
  7999. |    |devra avoir la liste compl√®te des colonnes qui requi√®re une valeur non-NULL.          |
  8000. |    |Les conditions suivantes s'appliquent aux commandes de type INSERT INTO ... SELECT    |
  8001. |    |La requ√™te ne peut pas contenir de clause ORDER BY                                    |
  8002. |    |La table cible de l'insertion ne peut pas appara√Ætre dans la clause FROM du SELECT,   |
  8003. |    |car la norme ANSI SQL l'interdit (en effet, le SELECT pourrait trouver des lignes qui |
  8004. |    |viennent juste d'√™tre ins√©r√©e. Utiliser des sous-selections serait encore pire).      |
  8005. |    |Les colonnes de type AUTO_INCREMENT fonctionnent de la m√™me fa√ßon.                    |
  8006. |    |Lors de l'utilisation de INSERT ... SELECT ou INSERT ... VALUES avec des listes de    |
  8007. |    |plusieurs lignes, la fonction mysql_info() permet d'obtenir des informations sur la   |
  8008. |    |requ√™te. Le format de la r√©ponse est comme suite :                                    |
  8009. |    |                                                                                      |
  8010. |    |Records: 100 Duplicates: 0 Warnings: 0                                                |
  8011. |    |Duplicates indique le nombre de lignes qui n'a pas pus √™tre ins√©r√©es car elles        |
  8012. |    |tentaient de doubler une cl√© primaire.. Warnings indique le nombre d'insertions qui   |
  8013. |    |ont g√©n√©rer une erreur lors de l'insertion. Warnings surviennent lorsqu'il y a une    |
  8014. |    |tentative:                                                                            |
  8015. |    |Insertion d'une valeur NULL dans une colonne d√©clar√©e NOT NULL.                       |
  8016. |    |Assignation d'une valeur num√©rique qui est hors de l'intervalle de validit√© de la     |
  8017. |    |colonne. Cette valeur est ramen√©e √† la valeur valide la plus proche.                  |
  8018. |    |Assignation d'une valeur telle que '10.34 a'. Dans ce cas, les r√©sidus inutiles sont  |
  8019. |    |√©limin√©s. Si la valeur ne peut pas √™tre interpr√©t√©e, la valeur 0 est assign√©e √† la    |
  8020. |    |place.                                                                                |
  8021. |    |Insertion d'une cha√Æne dans une colonne de type CHAR, VARCHAR, TEXT ou BLOB qui exc√®de|
  8022. |    |la longueur maximale. La valeur est alors tronqu√©e √† la taille maximale de la colonne.|
  8023. |    |                                                                                      |
  8024. |    |Insertion d'une valeur invalide dans une date ou heure. La valeur est alors fix√©e au  |
  8025. |    |``z√©ro'' du type de la colonne.                                                       |
  8026. |    |L'option DELAYED pour la commande INSERT est une caract√©ristique MySQL qui est tr√®s   |
  8027. |    |utile lorsque les clients ne peuvent pas attendre la fin de l'insertion. C'est utilis√©|
  8028. |    |habituellement par MySQL pour remplir des historiques, et que p√©riodiquement, une     |
  8029. |    |longue commande SELECT est effectu√©e. DELAYED a √©t√© introduit √† partir de MySQL       |
  8030. |    |3.22.15. C'est une extension MySQL √† la norme ANSI SQL92.                             |
  8031. |    |Un autre avantage majeur de l'utilisation de la commande INSERT DELAYED est que les   |
  8032. |    |insertions sont regroup√©es et trait√©es en m√™me temps. C'est une mani√®re plus rapide   |
  8033. |    |que d'effectuer autant d'insertions unitaires.                                        |
  8034. |    |Il faut noter que les insertions en attente sont gard√©es en m√©moire vive, jusqu'√† ce  |
  8035. |    |qu'elles soient ins√©r√©es dans la table. Cela signifie que si le processus mysqld est  |
  8036. |    |brutalement interrompu (kill -9) ou si mysqld se termine inopin√©ment, les lignes ne   |
  8037. |    |seront pas √©crites sur le disque, et ainsi perdues !                                  |
  8038. |    |Les √©v√©nements suivants surviennent lors de l'utilisation de l'option DELAYED des     |
  8039. |    |commandes INSERT ou REPLACE. Dans la description qui suit, le ``thread'' est le thread|
  8040. |    |qui a recu la commande INSERT DELAYED et ``handler'' est le thread qui va g√©rer les   |
  8041. |    |INSERT DELAYED pour une table particuli√®re.                                           |
  8042. |    |Quand un thread ex√©cute la commande DELAYED pour une table, le thread handler est cr√©e|
  8043. |    |pour g√©rer toutes les commandes DELAYED pour la table, si un tel thread n'existe pas. |
  8044. |    |Le thread v√©rifie si le handler a bien pos√© un verrou DELAYED, et si non, il lui dit  |
  8045. |    |de le faire. Le verrou DELAYED peut √™tre obtenu m√™me si d'autres threads ont d√©j√†     |
  8046. |    |obtenu un verrou de READ ou WRITE sur la table. Cependant, le handler va attendre que |
  8047. |    |tous les verrous ALTER TABLE ou FLUSH TABLES soient lib√©r√©s, afin de s'assurer que la |
  8048. |    |table est bien √† jour.                                                                |
  8049. |    |Le thread ex√©cute l'insertion mais, au lieu d'√©crire la ligne dans la table, il       |
  8050. |    |transmet une copie de la ligne finale au handler, qui l'ajoute dans la queue          |
  8051. |    |d'attente. Toutes les erreurs d'insertions sont not√©es par le thread, et rapport√©es au|
  8052. |    |client.                                                                               |
  8053. |    |Le client ne re√ßoit pas le nombre de doublons, ou la valeur d' AUTO_INCREMENT qu'il   |
  8054. |    |pourrait attendre, car ces informations ne sont connues qu'apr√®s l'insertion          |
  8055. |    |proprement dite. De la m√™me fa√ßon, mysql_info()risque de retourner des informations   |
  8056. |    |incoh√©rentes.                                                                         |
  8057. |    |L'historique de mise √† jour est modifi√© par le handler quand la ligne est             |
  8058. |    |effectivement ins√©r√©e dans la table. Si il y a plusieurs lignes ins√©r√©es              |
  8059. |    |simultan√©ment, l'historique de mise √† jour est modifi√© lors de l'insertion de la      |
  8060. |    |premi√®re ligne.                                                                       |
  8061. |    |Apr√®s chaque bloc de delayed_insert_limit lignes √©crites, le handler v√©rifie si il n'y|
  8062. |    |a pas de commande SELECT en attente. Si c'est le cas, il s'arr√™te, et l'ex√©cute avant |
  8063. |    |de continuer.                                                                         |
  8064. |    |Quand le handler n'a plus de ligne dans la queue, la table est d√©verrouill√©e. Si      |
  8065. |    |aucune autre commandes INSERT DELAYED n'est re√ßue dans un d√©lai de                    |
  8066. |    |delayed_insert_timeout secondes, le handler se termine.                               |
  8067. |    |Si il reste plus de delayed_queue_size lignes en attente d'insertion, le thread attend|
  8068. |    |jusqu'√† ce qu'il y ait de la place dans la queue. Ce permet de contr√¥ler la quantit√©  |
  8069. |    |de m√©moire utilis√© pour les queues d'attentes.                                        |
  8070. |    |Le handler appara√Ætra dans la liste des processus MySQL avec le mot delayed_insert    |
  8071. |    |dans la colonne de Command . Il sera automatiquement effac√© lors d'une commande FLUSH |
  8072. |    |TABLES ou KILL thread_id. Cependant, il enregistrera les lignes dans la table avant de|
  8073. |    |quitter. Durant cette p√©riode, le handler n'acceptera plus aucune nouvelle commande   |
  8074. |    |INSERT d'un autre thread. Si une nouvelle commande an INSERT DELAYED est √©x√©cut√©e, un |
  8075. |    |nouveau handler sera cr√©√©.                                                            |
  8076. |    |Il faut bien noter que les commandes INSERT DELAYED ont une priorit√© sup√©rieure aux   |
  8077. |    |commandes INSERT, si un handler est d√©j√† en fonctionnement. Toutes les autres         |
  8078. |    |commandes doivent attendre que la queue d'attente du handler soit vide (m√™me par un   |
  8079. |    |kill).                                                                                |
  8080. |    |Les statuts suivants fournissent des informations sur l'√©tat des commandes INSERT     |
  8081. |    |DELAYED :                                                                             |
  8082. |    |Ces variables sont accessibles avec la commande SHOW STATUS ou, en ligne, avec        |
  8083. |    |mysqladmin extended-status.                                                           |
  8084. |    |7.14 REPLACE                                                                          |
  8085. |    |                                                                                      |
  8086. |    |REPLACE [LOW_PRIORITY | DELAYED]                                                      |
  8087. |    |[INTO] Nom_table [(Nom_col,...)]                                                      |
  8088. |    |VALUES (expression,...)                                                               |
  8089. |    |ou  REPLACE [LOW_PRIORITY | DELAYED]                                                  |
  8090. |    |[INTO] Nom_table [(Nom_col,...)]                                                      |
  8091. |    |SELECT ...                                                                            |
  8092. |    |ou  REPLACE [LOW_PRIORITY | DELAYED]                                                  |
  8093. |    |[INTO] Nom_table                                                                      |
  8094. |    |SET Nom_col=expression, Nom_col=expression,...                                        |
  8095. |    |REPLACE fonctionne exactement comme INSERT, mais si une ligne d'une table a une       |
  8096. |    |colonne qui porte l'attribut unique , REPLACE pourra remplacer cette ligne par une    |
  8097. |    |nouvelle ligne, tout en gardant la m√™me valeur dans la colonne de type unique. Pour   |
  8098. |    |plus de d√©tails, voir INSERT.                                                         |
  8099. |    |7.15 LOAD DATA INFILE                                                                 |
  8100. |    |                                                                                      |
  8101. |    |LOAD DATA [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE]                           |
  8102. |    |INTO TABLE nom_table                                                                  |
  8103. |    |[FIELDS                                                                               |
  8104. |    |[TERMINATED BY '\t']                                                                  |
  8105. |    |[OPTIONALLY] ENCLOSED BY '']                                                          |
  8106. |    |[ESCAPED BY '\\' ]]                                                                   |
  8107. |    |[LINES TERMINATED BY '\n']                                                            |
  8108. |    |[IGNORE number LINES]                                                                 |
  8109. |    |[(nom_colonne,...)]                                                                   |
  8110. |    |La commande LOAD DATA INFILE lit des lignes √† partir d'un fichier, et le transforme en|
  8111. |    |table, √† tr√®s grande vitesse. Si l'option LOCAL est pr√©cis√©e, le fichier est lu depuis|
  8112. |    |le client (cette fonction est disponible √† partir la version 3.22.6 de MySQL.)        |
  8113. |    |Pour des raisons de s√©curit√©, lors de la lecture de fichier situ√© sur le serveur, les |
  8114. |    |fichiers doivent √™tre disponibles dans le dossier de MySQL, ou bien lisible par tous. |
  8115. |    |De plus, pour utiliser LOAD DATA INFILE sur des fichiers serveurs, il faut avoir les  |
  8116. |    |droits fichiers.                                                                      |
  8117. |    |Utiliser l'option LOCAL est un peu plus lente que l'option par d√©faut, car le contenu |
  8118. |    |des fichiers doit du client vers le serveur. D'un autre cot√©, il n'y plus de probl√®me |
  8119. |    |de droits d'acc√®s.                                                                    |
  8120. |    |L'utilitaire mysqlimport assure aussi l'importation de fichier. Il le fait en envoyant|
  8121. |    |une requ√™te LOAD DATA INFILE au serveur. L'option ‚Äìlocal force mysqlimport √† lire le  |
  8122. |    |fichier depuis l'h√¥te client. Si le client et le serveur supporte le protocole        |
  8123. |    |compress√©, l'option --compress donnera de meilleures performances sur des r√©seaux     |
  8124. |    |charg√©s.                                                                              |
  8125. |    |Pour retrouver les fichiers sur le serveur, le serveur utilise les r√®gles suivantes : |
  8126. |    |Si un chemin absolu est fourni, le serveur utilise le chemin tel quel.                |
  8127. |    |Si un chemin relatif est fourni, avec un ou plusieurs composant, le serveur recherche |
  8128. |    |le fichier dans le dossier donn√©es de la base de donn√©es.                             |
  8129. |    |Si un nom de fichier est fourni, le serveur va le rechercher dans le dossier de la    |
  8130. |    |base de donn√©es courante.                                                             |
  8131. |    |Il faut noter que ces r√®gles signifie que le fichier ``./monFichier.txt'' sera lu     |
  8132. |    |depuis le dossier donn√©es du serveur, tandis que ``myfile.txt'' sera lu depuis le     |
  8133. |    |dossier de la base de donn√©es courante. Il faut aussi noter qu'avec la commande       |
  8134. |    |ci-dessous, le fichier est lu depuis le dossier de la base db1, et non pas db2 :      |
  8135. |    |                                                                                      |
  8136. |    |mysql> USE db1;                                                                       |
  8137. |    |mysql> LOAD DATA INFILE "./data.txt" INTO TABLE db2.my_table;                         |
  8138. |    |Les options REPLACE et IGNORE r√®glent la gestion index redondants, dans les colonnes  |
  8139. |    |de type unique. Avec REPLACE, la nouvelle ligne remplacera l'ancienne, avec la m√™me   |
  8140. |    |valeur d'index. Avec IGNORE, la nouvelle ligne sera ignor√©e. Si rien n'est pr√©cis√©,   |
  8141. |    |une erreur surviendra lors de la tentative d'insertion du doublon, et le reste du     |
  8142. |    |fichier sera ignor√©.                                                                  |
  8143. |    |Lors du chargement de lignes √† partir d'un fichier local et avec l'option LOCAL, le   |
  8144. |    |serveur n'a aucun moyen d'interrompre la transmission du fichier durant l'op√©ration,  |
  8145. |    |alors le comportement par d√©faut est IGNORE.                                          |
  8146. |    |DATA INFILE est la commande compl√©mentaire de SELECT ... INTO OUTFILE. SELECT. Pour   |
  8147. |    |√©crire des lignes depuis une base de donn√©es vers un fichier, il faut utiliser SELECT |
  8148. |    |... INTO OUTFILE. Pour lire des lignes depuis un fichier vers une base, il faut       |
  8149. |    |utiliser LOAD DATA INFILE. La syntaxe des clauses FIELDS et LINES est la m√™me pour les|
  8150. |    |deux commandes. Ces deux clauses sont optionnelles, mais FIELDS doit imp√©rativement   |
  8151. |    |pr√©c√©der LINES si les deux sont pr√©sents.                                             |
  8152. |    |Si la clause est FIELDS pr√©sente, alors chacune des sous clauses (TERMINATED BY,      |
  8153. |    |[OPTIONALLY] ENCLOSED BY t ESCAPED BY) sont optionnelles, mais il faut au moins en    |
  8154. |    |sp√©cifier une.                                                                        |
  8155. |    |Si la clause FIELDS n'est pas sp√©cifi√©e, les valeurs par d√©faut sont les suivantes :  |
  8156. |    |                                                                                      |
  8157. |    |FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\'                              |
  8158. |    |Si la clause LINES n'est pas sp√©cifi√©e, les valeurs par d√©faut sont les suivantes :   |
  8159. |    |                                                                                      |
  8160. |    |LINES TERMINATED BY '\n'                                                              |
  8161. |    |En bref, les options par d√©faut de LOAD DATA INFILE fonctionnent comme suit :         |
  8162. |    |Recherche de la limite de ligne                                                       |
  8163. |    |Segmenter la ligne en champs, gr?ce aux tabulations                                   |
  8164. |    |Ne pas s'attendre √† ce que les champs soient entour√©s de guillemets                   |
  8165. |    |Interpr√©ter les occurrences de tabulation, nouvelle ligne, ou backslash ``\'' pr√©c√©d√©s|
  8166. |    |par ``\'' comme des caract√®res √† part enti√®res                                        |
  8167. |    |Dans le sens inverse, les options par d√©faut de SELECT ... INTO OUTFILE fonctionnent  |
  8168. |    |comme suit :                                                                          |
  8169. |    |Ecrire des tabulations entre les champs                                               |
  8170. |    |Ne pas entourer les champs avec des guillemets                                        |
  8171. |    |Ajouter un backslash ``\'' avant toutes les occurrences de tabulation, nouvelle ligne,|
  8172. |    |ou backslash ``\'.'                                                                   |
  8173. |    |Ecrire une nouvelle ligne √† chaque fin de ligne.                                      |
  8174. |    |Il faut noter que pour √©crire write FIELDS ESCAPED BY '\\', il faut √©crire 2 backslash|
  8175. |    |pour en avoir un de lu.                                                               |
  8176. |    |L'option IGNORE number LINES permet d'ignorer les premi√®res lignes, qui contiendrait  |
  8177. |    |un ent√™te, par exemple.                                                               |
  8178. |    |                                                                                      |
  8179. |    |mysql> LOAD DATA INFILE "/tmp/Nom_fichier" into table test IGNORE 1 LINES;            |
  8180. |    |Pour pouvoir √©crire un fichier avec SELECT ... INTO OUTFILE, puis le relire LOAD DATA |
  8181. |    |INFILE ult√©rieurement avec, il est imp√©ratif que les options de lecture et d'√©criture |
  8182. |    |soient les m√™mes. Sinon, l'interpr√©tation du fichier √† la relecture sera erron√©e. Par |
  8183. |    |exemple, un fichier est √©crit avec SELECT ... INTO OUTFILE avec des virgules comme    |
  8184. |    |d√©limiteur de champs :                                                                |
  8185. |    |                                                                                      |
  8186. |    |mysql> SELECT * FROM table1 INTO OUTFILE 'data.txt'                                   |
  8187. |    |FIELDS TERMINATED BY ','                                                              |
  8188. |    |FROM ...                                                                              |
  8189. |    |Pour relire ce fichier, la bonne commande est :                                       |
  8190. |    |                                                                                      |
  8191. |    |mysql> LOAD DATA INFILE 'data.txt' INTO TABLE table2                                  |
  8192. |    |FIELDS TERMINATED BY ',';                                                             |
  8193. |    |Si, au contraire, le fichier est relu avec la commande ci-dessous, la relecture sera  |
  8194. |    |erron√©e, car les d√©limiteurs attendus sont des tabulations :                          |
  8195. |    |                                                                                      |
  8196. |    |mysql> LOAD DATA INFILE 'data.txt' INTO TABLE table2                                  |
  8197. |    |FIELDS TERMINATED BY '\t';                                                            |
  8198. |    |Il est probable que le fichier soit interpr√©t√© comme un seul champs.                  |
  8199. |    |LOAD DATA INFILE peut aussi lire des fichiers issues d'autres sources. Par exemple, un|
  8200. |    |fichier au format dBase a des champs s√©par√©s par des virgules, et ins√©r√©s dans des    |
  8201. |    |doubles guillemets. Si les lignes dans le fichier sont termin√©es par des nouvelles    |
  8202. |    |lignes, la commande suivante permettra d'acqu√©rir un fichier au format.               |
  8203. |    |                                                                                      |
  8204. |    |mysql> LOAD DATA INFILE 'data.txt' INTO TABLE Nom_table                               |
  8205. |    |FIELDS TERMINATED BY ',' ENCLOSED BY '"'                                              |
  8206. |    |LINES TERMINATED BY '\n';                                                             |
  8207. |    |Les options FIELDS ou LINES peuvent √™tre des cha√Ænes vides. Si ils ne sont pas vides, |
  8208. |    |les options FIELDS [OPTIONALLY] ENCLOSED BY et FIELDS ESCAPED BY doivent √™tre une     |
  8209. |    |cha√Æne d'un seul caract√®re. Les options FIELDS TERMINATED BY et LINES TERMINATED BY   |
  8210. |    |peuvent avoir un ou plusieurs caract√®res. Par exemple, si les lignes sont termin√©es   |
  8211. |    |par la paire retour-chariot/nouvelle-ligne, il est possible d'utiliser l'option LINES |
  8212. |    |TERMINATED BY '\r\n'.                                                                 |
  8213. |    |Contr√¥le les caract√®res qui entoure les champs. Lors de l'exportation(SELECT ... INTO |
  8214. |    |OUTFILE), l'absence de l'option OPTIONALLY force tous les champs √† √™tre entour√© par le|
  8215. |    |caract√®re ENCLOSED BY. Par exemple, en utilisant la virgule comme d√©limiteur de champs|
  8216. |    |:                                                                                     |
  8217. |    |                                                                                      |
  8218. |    |"1","une cha√Æne","100.20"                                                             |
  8219. |    |"2"," une cha√Æne contenant une , virgule","102.20"                                    |
  8220. |    |"3"," une cha√Æne contenant un \" guillemet","102.20"                                  |
  8221. |    |"4"," une cha√Æne contenant un \", guillemet et une virgule","102.20"                  |
  8222. |    |L'option OPTIONALLY force l'utilisation du caract√®re ENCLOSED BY seulement pour les   |
  8223. |    |champs de type CHAR et VARCHAR.                                                       |
  8224. |    |                                                                                      |
  8225. |    |1," une cha√Æne ",100.20                                                               |
  8226. |    |2," une cha√Æne contenant une , virgule ",102.20                                       |
  8227. |    |3," une cha√Æne contenant un \" guillemet ",102.20                                     |
  8228. |    |4," une cha√Æne contenant un \", guillemet et une virgule ",102.20                     |
  8229. |    |On peut noter que les occurrences du caract√®re ENCLOSED BY situ√©s dans une cha√Æne sont|
  8230. |    |toujours √©chapp√©e, gr?ce au caract√®re ENCLOSED BY. On peut aussi noter que si le      |
  8231. |    |caract√®re d'√©chappement est une cha√Æne vide, le fichier ne pourra pas √™tre relu       |
  8232. |    |correctement par LOAD DATA INFILE. Par exemple, le fichier de sortie ci-dessus, va    |
  8233. |    |devenir le fichier de sortie ci-dessous, si le caract√®re d'√©chappement est vide. Lors |
  8234. |    |de la relecture, un probl√®me surviendra surement durant la deuxi√®me ligne :           |
  8235. |    |                                                                                      |
  8236. |    |1," une cha√Æne ",100.20                                                               |
  8237. |    |2," une cha√Æne contenant une , virgule ",102.20                                       |
  8238. |    |3," une cha√Æne contenant un " guillemet ",102.20                                      |
  8239. |    |4," une cha√Æne contenant un \", guillemet et une virgule ",102.20                     |
  8240. |    |En entr√©e, le caract√®re est √©limin√© √† la fin de chaque champs. (ceci est vrai, qu'il y|
  8241. |    |ai l'option OPTIONALLY ou pas. OPTIONALLY n'a pas d'impact sur la proc√©dure           |
  8242. |    |d'acquisition). Les occurrences du caract√®re ENCLOSED BY pr√©c√©d√©s du caract√®re        |
  8243. |    |d'√©chappement ESCAPED BY sont consid√©r√©s comme une partie du champs. De plus, les     |
  8244. |    |caract√®res ENCLOSED BY doubl√©s sont consid√©r√©s comme une seule occurrence. Par        |
  8245. |    |exemple, le caract√®re ENCLOSED BY est '"' alors, les lignes suivantes deviennent :    |
  8246. |    |                                                                                      |
  8247. |    |"Le ""GRAND"" chef"  -> Le "GRAND" chef                                               |
  8248. |    |Le "GRAND" chef -> Le "GRAND" chef                                                    |
  8249. |    |Le ""GRAND"" chef -> Le ""GRAND"" chef                                                |
  8250. |    |FIELDS ESCAPED BY contr√¥le l'√©criture et la lecture des caract√®res sp√©ciaux . Si      |
  8251. |    |l'option FIELDS ESCAPED BY n'est pas une cha√Æne vide, il sert de pr√©fixe dans les cas |
  8252. |    |suivants                                                                              |
  8253. |    |Pour le caract√®re FIELDS ESCAPED BY                                                   |
  8254. |    |Pour le caract√®re FIELDS [OPTIONALLY] ENCLOSED BY                                     |
  8255. |    |Pour le premier caract√®re FIELDS TERMINATED BY et LINES TERMINATED BY                 |
  8256. |    |Pour le caract√®re ASCII 0 (qui sera en fait √©crit avec la s√©quence caract√®re          |
  8257. |    |d'√©chappement suivi de 0 )                                                            |
  8258. |    |Si le caract√®re FIELDS ESCAPED BY est une cha√Æne vide, aucun caract√®re ne sera        |
  8259. |    |√©chapp√©. Ce n'est pas une tr√®s bonne id√©e, surtout si certains champs contiennent l'un|
  8260. |    |des caract√®res de la liste ci-dessus.                                                 |
  8261. |    |En lecture, si le caract√®re FIELDS ESCAPED BY n'est pas une cha√Æne vide, les          |
  8262. |    |occurrences de ce caract√®re seront √©limin√©es, et le caract√®re suivant sera lu         |
  8263. |    |litt√©ralement, comme une partie du champs. Exceptions faites de ``0'' et ``N'' (i.eI.,|
  8264. |    |\0 ou \N avec ``\' 'comme caract√®re d'√©chappement). Ces s√©quences seront interpr√©t√©es |
  8265. |    |comme ASCII 0 (le caract√®re nul) et NULL. Voir ci dessous pour les r√®gles de          |
  8266. |    |sauvegarde NULL .                                                                     |
  8267. |    |Pour plus d'informations √† propos des s√©quences d'√©chappement, Literals.              |
  8268. |    |Dans certains cas, les options FIELDS et LINES de interagissent :                     |
  8269. |    |Si LINES TERMINATED BY est une cha√Æne vide, et FIELDS TERMINATED BY est une cha√Æne non|
  8270. |    |vide, les lignes seront aussi termin√©es FIELDS TERMINATED BY.                         |
  8271. |    |Si FIELDS TERMINATED BY et FIELDS ENCLOSED BY sont tous les deux des cha√Ænes vides    |
  8272. |    |(''), un format √† longueur fixe est utilis√©. Avec le format √† longueur fixe, il n'y a |
  8273. |    |plus besoin de d√©limiteurs. A la place, les colonnes et les lignes sont √©crites en    |
  8274. |    |utilisant la taille d'affichage des colonnes. Par exemple, si une colonne est d√©clar√©e|
  8275. |    |de type INT(7), les valeurs seront √©crite en utilisant des colonne de 7 caract√®res. En|
  8276. |    |lecture, les donn√©es sont obtenues en lisant 7 caract√®res. Les fichiers sans          |
  8277. |    |d√©limiteurs ont un impact sur la fa√ßon avec laquelle la valeur NULL est enregistr√©e.  |
  8278. |    |La gestion de la valeur NULL d√©pends des options FIELDS et LINES utilis√©es :          |
  8279. |    |Par pour les valeurs par d√©faut de FIELDS and LINES, NULL est symbolis√© par as \N en  |
  8280. |    |lecture et en √©criture. (en supposant que le caract√®re ESCAPED BY est ``\'').         |
  8281. |    |Si FIELDS ENCLOSED BY n'est pas vide, un champs contenant litt√©ralement la cha√Æne NULL|
  8282. |    |est utilis√©, en √©criture et en lecture. (Ceci est diff√©rent du mot 'NULL', entour√© de |
  8283. |    |caract√®res FIELDS ENCLOSED BY et lu comme la cha√Æne 'NULL').                          |
  8284. |    |Si FIELDS ESCAPED BY est vide, NULL est directement √©crit NULL.                       |
  8285. |    |Avec le format √† largueur de colonne fix√©e, (ce qui arrive lorsque FIELDS TERMINATED  |
  8286. |    |BY et FIELDS ENCLOSED BY sont tous les deux vides), NULL s'√©crit comme une cha√Æne     |
  8287. |    |vide. Il faut noter que cela entra√Æne l'identit√© de la valeur NULL et des cha√Ænes     |
  8288. |    |vides. Il ne sera alors pas possible d'en faire la diff√©rence.                        |
  8289. |    |Certains cas ne sont pas accept√© par LOAD DATA INFILE:                                |
  8290. |    |Lignes de taille fixe (FIELDS TERMINATED BY et FIELDS ENCLOSED BY tous les deux vides)|
  8291. |    |et des colonnes de type BLOB ou TEXT.                                                 |
  8292. |    |Si deux s√©parateurs sont identiques, LOAD DATA INFILE ne seront pas capable           |
  8293. |    |d'interpr√©ter le fichier. Par exemple, le champs FIELDS va poser probl√®me:            |
  8294. |    |                                                                                      |
  8295. |    |FIELDS TERMINATED BY '"' ENCLOSED BY '"'                                              |
  8296. |    |Si FIELDS ESCAPED BY est vide, un champs qui contient une occurrence de FIELDS        |
  8297. |    |ENCLOSED BY ou LINES TERMINATED BY suivi FIELDS TERMINATED BY va provoquer une erreur,|
  8298. |    |et l'arret de la lecture du fichier. Ceci, car LOAD DATA INFILE ne peut pas determiner|
  8299. |    |correctement la fin de la valeur, ou du champs.                                       |
  8300. |    |Les exemples suivants charge toutes les colonnes de la tables persondata:             |
  8301. |    |                                                                                      |
  8302. |    |mysql> LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata;                       |
  8303. |    |Aucun champs n'est pr√©cis√©, alors LOAD DATA INFILE s'attend √† trouver une valeur pour |
  8304. |    |chaque colonne. Les valeurs par d√©faut FIELDS et LINES sont suppos√©s.                 |
  8305. |    |Pour ne charger qu'une partie des colonnes, on peut utiliser :                        |
  8306. |    |                                                                                      |
  8307. |    |mysql> LOAD DATA INFILE 'persondata.txt'                                              |
  8308. |    |INTO TABLE persondata (col1,col2,...);                                                |
  8309. |    |Il faut aussi pr√©ciser la liste des champs dans l'ordre d'apparition de celles ci dans|
  8310. |    |le fichier, surtout si elles apparaissent dans un autre ordre que celui de la table.  |
  8311. |    |Si il manque des champs, les colonnes qui n'ont pas de valeurs seront mises √† leur    |
  8312. |    |valeur par d√©faut. Les valeurs par d√©faut sont d√©crites dans la section CREATE TABLE. |
  8313. |    |La valeur d'un champs vide est interpr√©t√© diff√©remment, suivant le champs manquant :  |
  8314. |    |Pour les champs de type cha√Æne, la colonne prend la valeur de la cha√Æne vide.         |
  8315. |    |Pour les types num√©riques, la colonne prend la valeur 0.                              |
  8316. |    |Pour les types date et heures, la colonne prend la valeur ``z√©ro'' ad√©quate. 7.2.6    |
  8317. |    |Types date et heure.                                                                  |
  8318. |    |Les colonnes de type TIMESTAMP prennent la valeur de l'heure et la date courante si   |
  8319. |    |une NULL leur est affect√©e. ou (pour la premi√®re colonne de type TIMESTAMP) si la     |
  8320. |    |colonne est omise de la liste de champs √† lire.                                       |
  8321. |    |Si une ligne √† trop de champs, les champs suppl√©mentaires sont ignor√©s, et le nombre  |
  8322. |    |d'alerte est augment√©.                                                                |
  8323. |    |LOAD DATA INFILE consid√®re toutes les valeurs en entr√©es comme des cha√Ænes, donc il   |
  8324. |    |n'est pas possible d'utiliser les formes num√©riques, notamment pour les types ENUM ou |
  8325. |    |SET . . Toutes les √©num√©rations doivent √™tre sp√©cifi√©e comme des cha√Ænes              |
  8326. |    |Lors de l'utilisation de LOAD DATA INFILE, la fonction mysql_info() permet d'obtenir  |
  8327. |    |des informations sur la requ√™te. Le format de la r√©ponse est comme suite :            |
  8328. |    |                                                                                      |
  8329. |    |Records: 100 Duplicates: 0 Warnings: 0                                                |
  8330. |    |Duplicates indique le nombre de lignes qui n'a pas pus √™tre ins√©r√©es car elles        |
  8331. |    |tentaient de doubler une cl√© primaire.. Warnings indique le nombre d'insertions qui   |
  8332. |    |ont g√©n√©rer une erreur lors de l'insertion. Warnings surviennent lorsqu'il y a une    |
  8333. |    |tentative incorrecte d'insertion de ligne.                                            |
  8334. |    |7.16 UPDATE                                                                           |
  8335. |    |                                                                                      |
  8336. |    |UPDATE [LOW_PRIORITY] nom_table SET nom_colonne1=expr1,nom_colonne2=expr2,...         |
  8337. |    |[WHERE where_definition] [LIMIT #]                                                    |
  8338. |    |UPDATE met √† jour une ligne √©xistante dans une table. La clause SET indique quelles   |
  8339. |    |colonnes modifier, et quelles valeurs mettre dans ces colonnes. La conditions WHERE   |
  8340. |    |permet de choisir quelles lignes sont √† mettre √† jour. Sinon, toutes les lignes sont  |
  8341. |    |mises √† jour                                                                          |
  8342. |    |L'option LOW_PRIORITY, permet de retarder l'ex√©cution de la requ√™te jusqu'au moment o√π|
  8343. |    |il n'y a plus de client qui lisent la table                                           |
  8344. |    |Lors de l'acc√®s √† une colonne de la table Nom_table dans une expression, UPDATE       |
  8345. |    |utilise la valeur courante de la colonne. Par exemple, la requ√™te suivante ajoute 1 √† |
  8346. |    |la colonne age.                                                                       |
  8347. |    |                                                                                      |
  8348. |    |mysql> UPDATE persondata SET age=age+1;                                               |
  8349. |    |Les commandes UPDATE sont √©valu√©es de gauche √† droite. Par exemple, la requ√™te        |
  8350. |    |suivante double la colonne age, puis l'incr√©mente d'une unit√© :                       |
  8351. |    |                                                                                      |
  8352. |    |mysql> UPDATE persondata SET age=age*2, age=age+1;                                    |
  8353. |    |Affecter la valeur courante d'une colonne lors d'une commande UPDATE conduit MySQL √†  |
  8354. |    |ignore cette mise √† jour.                                                             |
  8355. |    |La commande UPDATE retourne le nombre de ligne qui ont √©t√© effectivement modifi√©es.. A|
  8356. |    |partir de MySQL 3.22, la fonction C API mysql_info()nombre de ligne qui ont √©t√©       |
  8357. |    |trouv√©es et effectivement modifi√©es, puis le nombre de warnings de la commande UPDATE.|
  8358. |    |                                                                                      |
  8359. |    |7.17 USE                                                                              |
  8360. |    |                                                                                      |
  8361. |    |USE Nom_bdd                                                                           |
  8362. |    |La commande USE Nom_bdd statement indique √† MySQL le nom de la base de donn√©es par    |
  8363. |    |d√©faut pour les requ√™te suivantes. Cette base restera courante jusqu'√† la fin de la   |
  8364. |    |session, ou jusqu'√† la prochaine utilisation de la commande USE:                      |
  8365. |    |                                                                                      |
  8366. |    |mysql> USE db1;                                                                       |
  8367. |    |mysql> SELECT count(*) FROM maTable;      # selects from db1.maTable                  |
  8368. |    |mysql> USE db2;                                                                       |
  8369. |    |mysql> SELECT count(*) FROM maTable;      # selects from db2.maTable                  |
  8370. |    |L'utilisation d'une base de donn√©es par d√©faut n'emp√™che pas l'acc√®s aux autres bases.|
  8371. |    |Par exemple, il est toujours possible d'acc√©der √† la table editeur de la base db2,    |
  8372. |    |m√™me apr√®s l'utilisation de USE db1                                                   |
  8373. |    |                                                                                      |
  8374. |    |mysql> USE db1;                                                                       |
  8375. |    |mysql> SELECT author_name,editor_name FROM author,db2.editor                          |
  8376. |    |WHERE author.editor_id = db2.editor.editor_id;                                        |
  8377. |    |La commande USE est fournie pour assurer la compatibilit√© avec Sybase.                |
  8378. |    |7.18 FLUSH (vider les caches)                                                         |
  8379. |    |                                                                                      |
  8380. |    |FLUSH flush_option [,flush_option]                                                    |
  8381. |    |La commande FLUSH permet d'effacer les caches internes de MySQL uses. Pour l'ex√©cuter,|
  8382. |    |il faut avoir les droits de rechargement (reload ).                                   |
  8383. |    |flush_option peut prendre les valeurs suivantes :                                     |
  8384. |    |Ces commandes sont disponibles avec l'utilitaire mysqladmin, en utilisant les options |
  8385. |    |flush-hosts, flush-logs, reload ou flush-tables.                                      |
  8386. |    |7.19 KILL                                                                             |
  8387. |    |                                                                                      |
  8388. |    |KILL thread_id                                                                        |
  8389. |    |                                                                                      |
  8390. |    |KILL thread_id                                                                        |
  8391. |    |Chaque connection √† mysqld g√©n√©re un thread s√©par√©. La liste des threads est          |
  8392. |    |accessible avec la SHOW PROCESSLIST et la fonction KILL thread_id, permet de terminer |
  8393. |    |imm√©diatement ces threads.                                                            |
  8394. |    |Il faut avoir les droits de process pour voir et terminer tous les threads. Sinon,    |
  8395. |    |seul les threads utilisateurs sont visibles et terminables.                           |
  8396. |    |Ces commandes sont disponibles avec l'utilitaire mysqladmin en utilisant les options  |
  8397. |    |mysqladmin processlist and mysqladmin kill.                                           |
  8398. |    |7.20 SHOW (Informations sur les tables, colonnes,...)                                 |
  8399. |    |                                                                                      |
  8400. |    |SHOW DATABASES [LIKE wild]                                                            |
  8401. |    |ou SHOW TABLES [FROM Nom_bdd] [LIKE wild]                                             |
  8402. |    |ou SHOW COLUMNS FROM Nom_table [FROM Nom_bdd] [LIKE wild]                             |
  8403. |    |ou SHOW INDEX FROM Nom_table [FROM Nom_bdd]                                           |
  8404. |    |ou SHOW STATUS                                                                        |
  8405. |    |ou SHOW VARIABLES [LIKE wild]                                                         |
  8406. |    |ou SHOW PROCESSLIST                                                                   |
  8407. |    |ou SHOW TABLE STATUS [FROM Nom_bdd] [LIKE wild]                                       |
  8408. |    |SHOW fourni les caract√©ristiques des bases de donn√©es, tables et colonnes sur le      |
  8409. |    |serveur. Si l'option LIKE wild est utilis√©e, la cha√Æne wild peut utiliser les         |
  8410. |    |caract√®res sp√©ciaux ``%'' et ``_''.                                                   |
  8411. |    |Il y a deux possibilit√©s pour r√©f√©rencer une table : Nom_bdd.Nom_table ou Nom_table   |
  8412. |    |FROM Nom_bdd syntax. Les deux requ√™tes suivantes sont √©quivalentes :                  |
  8413. |    |                                                                                      |
  8414. |    |mysql> SHOW INDEX FROM maTable FROM maBase;                                           |
  8415. |    |mysql> SHOW INDEX FROM maBase.maTable;                                                |
  8416. |    |SHOW DATABASES fait la liste des bases de donn√©s sur le serveur MySQL. mysqlshow      |
  8417. |    |fournit les m√™mes renseignements.                                                     |
  8418. |    |SHOW TABLES fait la liste des tables sur une base donn√©e. mysqlshow Nom_bdd fournit   |
  8419. |    |les m√™mes renseignements.                                                             |
  8420. |    |Note: Si un utilisateur n'a aucun droit pour une table, la table n'apparaitra pas dans|
  8421. |    |les SHOW TABLES ou mysqlshow Nom_bdd.                                                 |
  8422. |    |SHOW COLUMNS fait la liste des colonnes d'une table. Si les types des colonnes sont   |
  8423. |    |diff√©rens de ce qui ont √©t√© sp√©cifi√©s √† la cr√©ation, avec la CREATE TABLE, il faut    |
  8424. |    |savoir que parfois, MySQL change spontan√©ment le type de colonnes. 7.6.1 Modifications|
  8425. |    |automatiques de type de colonne.                                                      |
  8426. |    |La commande DESCRIBE fournit les m√™mes informations que SHOW COLUMNS. DESCRIBE.       |
  8427. |    |SHOW TABLE STATUS (nouveaut√© de la version 3.23) fonctionne comme SHOW STATUS, mais   |
  8428. |    |fournit beaucoup plus d'informations sur chaque table. L'utilitaire mysqlshow avec    |
  8429. |    |l'option --status Nom_bdd effectue la m√™me requ√™te. Les colonnes suivantes sont       |
  8430. |    |renvoy√©es :                                                                           |
  8431. |    |Name                                                                                  |
  8432. |    |Name of the table                                                                     |
  8433. |    |                                                                                      |
  8434. |    |Type                                                                                  |
  8435. |    |Type of table (NISAM, MyISAM or HEAP)                                                 |
  8436. |    |                                                                                      |
  8437. |    |Rows                                                                                  |
  8438. |    |Number of rows                                                                        |
  8439. |    |                                                                                      |
  8440. |    |Avg_row_length                                                                        |
  8441. |    |Average row length                                                                    |
  8442. |    |                                                                                      |
  8443. |    |Data_length                                                                           |
  8444. |    |Length of the data file                                                               |
  8445. |    |                                                                                      |
  8446. |    |Max_data_length                                                                       |
  8447. |    |Max length of the data file                                                           |
  8448. |    |                                                                                      |
  8449. |    |Index_length                                                                          |
  8450. |    |Length of the index file                                                              |
  8451. |    |                                                                                      |
  8452. |    |Data_free                                                                             |
  8453. |    |Number of allocated but not used bytes                                                |
  8454. |    |                                                                                      |
  8455. |    |Auto_increment                                                                        |
  8456. |    |Next autoincrement value                                                              |
  8457. |    |                                                                                      |
  8458. |    |Create_time                                                                           |
  8459. |    |When the table was created                                                            |
  8460. |    |                                                                                      |
  8461. |    |Update_time                                                                           |
  8462. |    |When the data file was last updated                                                   |
  8463. |    |                                                                                      |
  8464. |    |Check_time                                                                            |
  8465. |    |When one last run a check on the table                                                |
  8466. |    |                                                                                      |
  8467. |    |Create_options                                                                        |
  8468. |    |Extra options used with CREATE TABLE                                                  |
  8469. |    |                                                                                      |
  8470. |    |Comment                                                                               |
  8471. |    |The comment used when creating the table (or some information why MySQL couldn't      |
  8472. |    |access the table information).                                                        |
  8473. |    |                                                                                      |
  8474. |    |SHOW FIELDS est un synonyme de SHOW COLUMNS et SHOW KEYS est un synonyme de SHOW INDEX|
  8475. |    |Ces commandes sont disponibles avec l'utilitaire mysqlshow Nom_bdd Nom_table ou       |
  8476. |    |mysqlshow -k Nom_bdd Nom_table.                                                       |
  8477. |    |SHOW INDEX retourne les informations dans un format proche de SQLStatistics sous ODBC.|
  8478. |    |Les informations suivantes sont disponibles :                                         |
  8479. |    |Table                                                                                 |
  8480. |    |Name of the table                                                                     |
  8481. |    |                                                                                      |
  8482. |    |Non_unique                                                                            |
  8483. |    |0 if the index can't contain duplicates.                                              |
  8484. |    |                                                                                      |
  8485. |    |Key_name                                                                              |
  8486. |    |Name of the index                                                                     |
  8487. |    |                                                                                      |
  8488. |    |Seq_in_index                                                                          |
  8489. |    |Column sequence number in index, starting with 1.                                     |
  8490. |    |                                                                                      |
  8491. |    |Column_name                                                                           |
  8492. |    |Column name.                                                                          |
  8493. |    |                                                                                      |
  8494. |    |Collation                                                                             |
  8495. |    |How the column is sorted in the index. In MySQL, this can have values A (Ascending) or|
  8496. |    |NULL (Not sorted).                                                                    |
  8497. |    |                                                                                      |
  8498. |    |Cardinality                                                                           |
  8499. |    |Number of unique values in the index. This is updated by running isamchk -a.          |
  8500. |    |                                                                                      |
  8501. |    |Sub_part                                                                              |
  8502. |    |Number of indexed characters if the column is only partly indexed. NULL if the entire |
  8503. |    |key is indexed.                                                                       |
  8504. |    |                                                                                      |
  8505. |    |SHOW STATUS fournit des informations sur le serveur (tout comme mysqladmin            |
  8506. |    |extended-status). Les informations fournies sont pr√©sent√©es ci-dessous. Le format et  |
  8507. |    |les nombres peuvent varier :                                                          |
  8508. |    |                                                                                      |
  8509. |    |+--------------------------+--------+                                                 |
  8510. |    || Variable_name            | Value  |                                                 |
  8511. |    |+--------------------------+--------+                                                 |
  8512. |    || Aborted_clients          | 0      |                                                 |
  8513. |    || Aborted_connects         | 0      |                                                 |
  8514. |    || Created_tmp_tables       | 0      |                                                 |
  8515. |    || Delayed_insert_threads   | 0      |                                                 |
  8516. |    || Delayed_writes           | 0      |                                                 |
  8517. |    || Delayed_errors           | 0      |                                                 |
  8518. |    || Flush_commands           | 2      |                                                 |
  8519. |    || Handler_delete           | 2      |                                                 |
  8520. |    || Handler_read_first       | 0      |                                                 |
  8521. |    || Handler_read_key         | 1      |                                                 |
  8522. |    || Handler_read_next        | 0      |                                                 |
  8523. |    || Handler_read_rnd         | 35     |                                                 |
  8524. |    || Handler_update           | 0      |                                                 |
  8525. |    || Handler_write            | 2      |                                                 |
  8526. |    || Key_blocks_used          | 0      |                                                 |
  8527. |    || Key_read_requests        | 0      |                                                 |
  8528. |    || Key_reads                | 0      |                                                 |
  8529. |    || Key_write_requests       | 0      |                                                 |
  8530. |    || Key_writes               | 0      |                                                 |
  8531. |    || Max_used_connections     | 1      |                                                 |
  8532. |    || Not_flushed_key_blocks   | 0      |                                                 |
  8533. |    || Not_flushed_delayed_rows | 0      |                                                 |
  8534. |    || Open_tables              | 1      |                                                 |
  8535. |    || Open_files               | 2      |                                                 |
  8536. |    || Open_streams             | 0      |                                                 |
  8537. |    || Opened_tables            | 11     |                                                 |
  8538. |    || Questions                | 14     |                                                 |
  8539. |    || Running_threads          | 1      |                                                 |
  8540. |    || Slow_requ√™tes            | 0      |                                                 |
  8541. |    || Uptime                   | 149111 |                                                 |
  8542. |    |+--------------------------+--------+                                                 |
  8543. |    |Les variables ci-dessus ont les significations suivantes :                            |
  8544. |    |Aborted_clients                                                                       |
  8545. |    |Number of connections that has been aborted because the client has died without       |
  8546. |    |closing the connection properly.                                                      |
  8547. |    |                                                                                      |
  8548. |    |Aborted_connects                                                                      |
  8549. |    |Number of tries to connect to the MySQL server that has failed.                       |
  8550. |    |                                                                                      |
  8551. |    |Created_tmp_tables                                                                    |
  8552. |    |Number of implicit temporary tables that has been created while executing statements. |
  8553. |    |                                                                                      |
  8554. |    |Delayed_insert_threads                                                                |
  8555. |    |Number of delayed insert handler threads in use.                                      |
  8556. |    |                                                                                      |
  8557. |    |Delayed_writes                                                                        |
  8558. |    |Number of rows written with INSERT DELAYED.                                           |
  8559. |    |                                                                                      |
  8560. |    |Delayed_errors                                                                        |
  8561. |    |Number of rows written with INSERT DELAYED for which some error occurred (probably    |
  8562. |    |duplicate key).                                                                       |
  8563. |    |                                                                                      |
  8564. |    |Flush_commands                                                                        |
  8565. |    |Number of executed FLUSH commands.                                                    |
  8566. |    |                                                                                      |
  8567. |    |Handler_delete                                                                        |
  8568. |    |Number of requests to delete a row from a table.                                      |
  8569. |    |                                                                                      |
  8570. |    |Handler_read_first                                                                    |
  8571. |    |Number of request to read first the row in a table.                                   |
  8572. |    |                                                                                      |
  8573. |    |Handler_read_key                                                                      |
  8574. |    |Number of request to read a row based on a key.                                       |
  8575. |    |                                                                                      |
  8576. |    |Handler_read_next                                                                     |
  8577. |    |Number of request to read next row in key order.                                      |
  8578. |    |                                                                                      |
  8579. |    |Handler_read_rnd                                                                      |
  8580. |    |Number of request to read a row based on a fixed position.                            |
  8581. |    |                                                                                      |
  8582. |    |Handler_update                                                                        |
  8583. |    |Number of requests to update a row in a table.                                        |
  8584. |    |                                                                                      |
  8585. |    |Handler_write                                                                         |
  8586. |    |Number of requests to insert a row in a table.                                        |
  8587. |    |                                                                                      |
  8588. |    |Key_blocks_used                                                                       |
  8589. |    |The number of used blocks in the key cache.                                           |
  8590. |    |                                                                                      |
  8591. |    |Key_read_requests                                                                     |
  8592. |    |The number of request to read a key block from the cache.                             |
  8593. |    |                                                                                      |
  8594. |    |Key_reads                                                                             |
  8595. |    |The number of physical reads of a key block from disk.                                |
  8596. |    |                                                                                      |
  8597. |    |Key_write_requests                                                                    |
  8598. |    |The number of request to write a key block to the cache.                              |
  8599. |    |                                                                                      |
  8600. |    |Key_writes                                                                            |
  8601. |    |The number of physical writes of a key block to disk.                                 |
  8602. |    |                                                                                      |
  8603. |    |Max_used_connections                                                                  |
  8604. |    |The maximum number of connections that has been in use simultaneously.                |
  8605. |    |                                                                                      |
  8606. |    |Not_flushed_key_blocks                                                                |
  8607. |    |Keys blocks in the key cache that has changed but hasn't yet been flushed to disk.    |
  8608. |    |                                                                                      |
  8609. |    |Not_flushed_delayed_rows                                                              |
  8610. |    |Number of rows waiting to be written in INSERT DELAY queues.                          |
  8611. |    |                                                                                      |
  8612. |    |Open_tables                                                                           |
  8613. |    |Number of tables that are open.                                                       |
  8614. |    |                                                                                      |
  8615. |    |Open_files                                                                            |
  8616. |    |Number of files that are open.                                                        |
  8617. |    |                                                                                      |
  8618. |    |Open_streams                                                                          |
  8619. |    |Number of streams that are open (used mainly for logging)                             |
  8620. |    |                                                                                      |
  8621. |    |Opened_tables                                                                         |
  8622. |    |Number of tables that has been opened.                                                |
  8623. |    |                                                                                      |
  8624. |    |Questions                                                                             |
  8625. |    |Number of questions asked from to the server.                                         |
  8626. |    |                                                                                      |
  8627. |    |Running_threads                                                                       |
  8628. |    |Number of currently open connections.                                                 |
  8629. |    |                                                                                      |
  8630. |    |Slow_queries                                                                          |
  8631. |    |Number of requ√™testhat has taken more than long_query_time                            |
  8632. |    |                                                                                      |
  8633. |    |Uptime                                                                                |
  8634. |    |How many seconds the server has been up.                                              |
  8635. |    |                                                                                      |
  8636. |    |Commentaires :                                                                        |
  8637. |    |Si Opened_tables est grand, alors table_cache est probablement trop petit.            |
  8638. |    |Si key_reads est trop grand, alors key_cache est probablement trop petit. Le taux     |
  8639. |    |d'acc√®s au cache est calcul√© avec la key_reads/key_read_requests.                     |
  8640. |    |Si Handler_read_rnd est grand, alors il y a probablement trop de requ√™tes qui obligent|
  8641. |    |MySQL a scanner des tables enti√®res, ou il y a des commandes join qui n'utilisent pas |
  8642. |    |les cl√©s √† bon escient.                                                               |
  8643. |    |SHOW VARIABLES affiche quelques variables syst√®me de MySQL. Cette commande est        |
  8644. |    |disponible avec l'utilitaire mysqladmin variables command. Si les valeurs par d√©faut  |
  8645. |    |ne conviennent pas, il faut faire les r√©glages au d√©marrage, dans la commande de      |
  8646. |    |mysqld . Les informations fournit sont les suivantes, et ressemble fort au tableau    |
  8647. |    |ci-dessous :                                                                          |
  8648. |    |                                                                                      |
  8649. |    |+------------------------+--------------------------+                                 |
  8650. |    || Variable_name          | Value                    |                                 |
  8651. |    |+------------------------+--------------------------+                                 |
  8652. |    || back_log               | 5                        |                                 |
  8653. |    || connect_timeout        | 5                        |                                 |
  8654. |    || basedir                | /my/monty/               |                                 |
  8655. |    || datadir                | /my/monty/data/          |                                 |
  8656. |    || delayed_insert_limit   | 100                      |                                 |
  8657. |    || delayed_insert_timeout | 300                      |                                 |
  8658. |    || delayed_queue_size     | 1000                     |                                 |
  8659. |    || join_buffer_size       | 131072                   |                                 |
  8660. |    || flush_time             | 0                        |                                 |
  8661. |    || key_buffer_size        | 1048540                  |                                 |
  8662. |    || language               | /my/monty/share/english/ |                                 |
  8663. |    || log                    | OFF                      |                                 |
  8664. |    || log_update             | OFF                      |                                 |
  8665. |    || long_query_time        | 10                       |                                 |
  8666. |    || low_priority_updates   | OFF                      |                                 |
  8667. |    || max_allowed_packet     | 1048576                  |                                 |
  8668. |    || max_connections        | 100                      |                                 |
  8669. |    || max_connect_errors     | 10                       |                                 |
  8670. |    || max_delayed_threads    | 20                       |                                 |
  8671. |    || max_heap_table_size    | 16777216                 |                                 |
  8672. |    || max_join_size          | 4294967295               |                                 |
  8673. |    || max_sort_longueur      | 1024                     |                                 |
  8674. |    || max_tmp_tables         | 32                       |                                 |
  8675. |    || net_buffer_longueur    | 16384                    |                                 |
  8676. |    || port                   | 3306                     |                                 |
  8677. |    || protocol-version       | 10                       |                                 |
  8678. |    || record_buffer          | 131072                   |                                 |
  8679. |    || skip_locking           | ON                       |                                 |
  8680. |    || socket                 | /tmp/mysql.sock          |                                 |
  8681. |    || sort_buffer            | 2097116                  |                                 |
  8682. |    || table_cache            | 64                       |                                 |
  8683. |    || thread_stack           | 131072                   |                                 |
  8684. |    || tmp_table_size         | 1048576                  |                                 |
  8685. |    || tmpdir                 | /machine/tmp/            |                                 |
  8686. |    || version                | 3.23.0-alpha-debug       |                                 |
  8687. |    || wait_timeout           | 28800                    |                                 |
  8688. |    |+------------------------+--------------------------+                                 |
  8689. |    |Server parameters.                                                                    |
  8690. |    |SHOW PROCESSLIST affiche la liste des processus en ligne. Cette commande est aussi    |
  8691. |    |disponible avec la mysqladmin processlist. Avec les droits de process, tous les       |
  8692. |    |threads sont visibles. Sinon, seuls les threads utilisateurs sont visibles . KILL.    |
  8693. |    |KILL.                                                                                 |
  8694. |    |7.21 EXPLAIN (D√©tails sur SELECT)                                                     |
  8695. |    |                                                                                      |
  8696. |    |EXPLAIN SELECT select_options                                                         |
  8697. |    |L'option EXPLAIN force MySQL √† expliquer la fa√ßon avec laquelle il va traiter la      |
  8698. |    |requ√™te SELECT, en d√©taillant les op√©rations de regroupement.                         |
  8699. |    |Avec ces informations, il est possible de determiner les tables qui requi√®rent des    |
  8700. |    |indexes pour acc√©lerer les SELECT, ainsi que l'ordre optimal dans lequel les tables   |
  8701. |    |reseront regroup√©es. Pour obliger l'optimiseur √† respecter l'ordre de regroupement, il|
  8702. |    |suffit d'ajouter l'option STRAIGHT_JOIN.                                              |
  8703. |    |Pour les regroupements complexes, EXPLAIN retourne une ligne d'informations pour      |
  8704. |    |chaque table utilis√©e par la commande SELECT. Les tables sont list√©es dans l'ordre de |
  8705. |    |lecture. MySQL r√©soud les regroupements en utilisant une m√©thode d'aggr√©gation en un  |
  8706. |    |seul passage. Cela signifie que MySQL lit une ligne de la premi√®re table, puis il     |
  8707. |    |recherche les lignes correspondantes dans la seconde table, et ainsi de suite jusqu'√† |
  8708. |    |la derni√®re table. Quand toutes les tables ont √©t√© trait√©es, il retourne la ligne     |
  8709. |    |selectionn√©e, et remonte progressivement jusqu'√† la table initiale. Puis, la ligne    |
  8710. |    |suivante est selectionn√©e, et le processus continue avec la ligne suivante.           |
  8711. |    |La r√©ponse de EXPLAIN inclus les colonnes suivantes :                                 |
  8712. |    |‚Ä¢  table La table qui est utilis√©e par la commande.                                   |
  8713. |    |‚Ä¢  type Le type de regroupement. Le d√©tails sur les diff√©rents types est donn√©s plus  |
  8714. |    |bas.                                                                                  |
  8715. |    |‚Ä¢  possible_keys Les possible_keys indiques quels index MySQL peut utiliser pour      |
  8716. |    |rechercher des lignes dans la table. Si la colonne est vide, il n'y a pas d'index.    |
  8717. |    |Dans ce cas, il est surement possible d'am√©liorer les performances de la requ√™te en   |
  8718. |    |√©xaminant la clause WHERE pour voir quelles colonnes sont utilis√©es, et quelles       |
  8719. |    |colonnes m√©riteraient un indexage. Dans ce cas, il suffit de cr√©er l'index ad√©quat, et|
  8720. |    |de reverifier la requ√™te avec EXPLAIN . Pour voir quels sont les index disponibles    |
  8721. |    |pour une table, il faut utiliser la commande SHOW INDEX FROM Nom_table.               |
  8722. |    |‚Ä¢  key La colonne cl√© indique quelle cl√© MySQL a d√©cid√© d'utiliser. La cl√© est NULLsi |
  8723. |    |aucun index n'est choisi.                                                             |
  8724. |    |‚Ä¢  key_len key_len indique la longueur de la cl√© que a d√©cid√© d'utiliser. La longueur |
  8725. |    |sera NULL si la cl√© est NULL.                                                         |
  8726. |    |‚Ä¢  ref ref est le ou les num√©ros de colonne ou constantes utilis√©e avec la cl√© pour   |
  8727. |    |rechercher les lignes dans la table.                                                  |
  8728. |    |‚Ä¢  rows rows indique le nmbre de ligne que MySQL doit examiner pour √©x√©cuter la       |
  8729. |    |requ√™te.                                                                              |
  8730. |    |‚Ä¢  Extra Si la colonne inclus le texte Only index , cela signifie que les informaions |
  8731. |    |sont renvoy√©es par la table en utilisant uniquement l'index. G√©n√©ralement, c'est      |
  8732. |    |beaucoup plus rapide que de scanner la table enti√®re. Si cette colonne contient le    |
  8733. |    |texte where used, cela signifie que la clause WHERE a √©t√© utilis√©e pour restreindre le|
  8734. |    |nombre de ligne √† retourner au client.                                                |
  8735. |    |Voici maintenant la liste des diff√©rents types de regroupement, du plus efficace au   |
  8736. |    |moins efficace :                                                                      |
  8737. |    |‚Ä¢  system La table n'a qu'une seule ligne (= table syst√®me). C'est un cas sp√©cial de  |
  8738. |    |regroupement de type const.                                                           |
  8739. |    |‚Ä¢  const La table a au maximum une ligne √† traiter, qui sera lue au d√©but de la       |
  8740. |    |requ√™te. Etant donn√© qu'il n'y a qu'une seule ligne, les valeurs de cette ligne       |
  8741. |    |peuvent √™tre consid√©r√©es comme des constantes pour l'optimisateur. Les tables de type |
  8742. |    |const sont extr√™mement rapide √† lire!                                                 |
  8743. |    |‚Ä¢  eq_ref Une ligne sera lue de cette table pour chaque combinaisons de ligne des     |
  8744. |    |tables pr√©c√©dentes. C'est le meilleur type de regroupement possible, en dehors du type|
  8745. |    |const. Il sera utiliss√© lorsque toutes les colonnes d'un index sont utilis√©es par un  |
  8746. |    |regroupement, et que l'index est UNIQUE ou PRIMARY KEY.                               |
  8747. |    |‚Ä¢  ref Toutes les lignes qui correspondent aux valeurs de l'index seront lues dans    |
  8748. |    |cette table, pour chaque combinaison de lignes des tables pr√©c√©dentes. ref est utilis√©|
  8749. |    |si le regroupement utilise un pr√©fixe comme cl√©, ou si la cl√© n'est pas UNIQUE ou     |
  8750. |    |PRIMARY KEY( en d'autres termes, si le regroupement ne peut pas sectionner une ligne  |
  8751. |    |unique √† partir de la cl√©). Si la cl√© qui est utilis√©e ne rassemble que tr√®s peu de   |
  8752. |    |lignes, le regroupement est bon.                                                      |
  8753. |    |‚Ä¢  range Seules les lignes dans l'intervalle consid√©r√© seront renvoy√©e, en utilisant  |
  8754. |    |un index pour selectionner les lignes. La colonne ref indiquera quelles index sera    |
  8755. |    |utilis√©.                                                                              |
  8756. |    |‚Ä¢  index Ce type est indentique √† ALL, sauf que seul l'index est scann√©. C'est        |
  8757. |    |g√©n√©ralement plus rapide que le type ALL, car un fichier d'index est g√©n√©ralement plus|
  8758. |    |petit que le fichier de donn√©es.                                                      |
  8759. |    |‚Ä¢  ALL Une recherche sur la table compl√®te va √™tre faite, pour chaque combinaison des |
  8760. |    |tables pr√©c√©dentes. C'est g√©n√©ralement tr√®s mauvais si la premi√®re table n'est pas    |
  8761. |    |marqu√©e const, et encore plus mauvais dans les autres cas. On peut √©viter d'utiliser  |
  8762. |    |ce mode de recherche en ajoutant des index, afin de transformer les lignes en         |
  8763. |    |constantes.                                                                           |
  8764. |    |Un bon crit√®re pour evaluer l'efficacit√© d'un regroupement est de multiplier toutes   |
  8765. |    |les valeurs dans la colonne rows d'une requ√™te avec EXPLAIN. Cela mesure              |
  8766. |    |approximativement le nombre de ligne que MySQL doit examiner pour r√©soudre la requ√™te.|
  8767. |    |Ce nombre sera aussi utilis√© pour restreindre la taille du regroupement, avec         |
  8768. |    |max_join_size.                                                                        |
  8769. |    |L'exemple suivant montre comme une clause peut √™tre optimis√©e progressivement gr?ce   |
  8770. |    |aux informations fournies par EXPLAIN. On supposera que l'on souhaite ex√©cuter la     |
  8771. |    |commande SELECTci-dessous, et qu'on l'examine avec EXPLAIN:                           |
  8772. |    |                                                                                      |
  8773. |    |EXPLAIN SELECT tt.TicketNumber, tt.TimeIn,                                            |
  8774. |    |tt.ProjectReference, tt.EstimatedShipDate,                                            |
  8775. |    |tt.ActualShipDate, tt.ClientID,                                                       |
  8776. |    |tt.ServiceCodes, tt.RepetitiveID,                                                     |
  8777. |    |tt.CurrentProcess, tt.CurrentDPPerson,                                                |
  8778. |    |tt.RecordVolume, tt.DPPrinted, et.COUNTRY,                                            |
  8779. |    |et_1.COUNTRY, do.CUSTNAME                                                             |
  8780. |    |FROM tt, et, et AS et_1, do                                                           |
  8781. |    |WHERE tt.SubmitTime IS NULL                                                           |
  8782. |    |AND tt.ActualPC = et.EMPLOYID                                                         |
  8783. |    |AND tt.AssignedPC = et_1.EMPLOYID                                                     |
  8784. |    |AND tt.ClientID = do.CUSTNMBR;                                                        |
  8785. |    |Pour cet exemple, on supposera par hypoth√®se :                                        |
  8786. |    |Les colonnes compar√©es sont d√©clar√©es comme suit :                                    |
  8787. |    |Table                                                                                 |
  8788. |    |Column                                                                                |
  8789. |    |Column type                                                                           |
  8790. |    |                                                                                      |
  8791. |    |tt                                                                                    |
  8792. |    |ActualPC                                                                              |
  8793. |    |CHAR(10)                                                                              |
  8794. |    |                                                                                      |
  8795. |    |tt                                                                                    |
  8796. |    |AssignedPC                                                                            |
  8797. |    |CHAR(10)                                                                              |
  8798. |    |                                                                                      |
  8799. |    |tt                                                                                    |
  8800. |    |ClientID                                                                              |
  8801. |    |CHAR(10)                                                                              |
  8802. |    |                                                                                      |
  8803. |    |et                                                                                    |
  8804. |    |EMPLOYID                                                                              |
  8805. |    |CHAR(15)                                                                              |
  8806. |    |                                                                                      |
  8807. |    |do                                                                                    |
  8808. |    |CUSTNMBR                                                                              |
  8809. |    |CHAR(15)                                                                              |
  8810. |    |                                                                                      |
  8811. |    |Les tables ont les index suivants :                                                   |
  8812. |    |Table                                                                                 |
  8813. |    |Index                                                                                 |
  8814. |    |                                                                                      |
  8815. |    |tt                                                                                    |
  8816. |    |ActualPC                                                                              |
  8817. |    |                                                                                      |
  8818. |    |tt                                                                                    |
  8819. |    |AssignedPC                                                                            |
  8820. |    |                                                                                      |
  8821. |    |tt                                                                                    |
  8822. |    |ClientID                                                                              |
  8823. |    |                                                                                      |
  8824. |    |et                                                                                    |
  8825. |    |EMPLOYID (primary key)                                                                |
  8826. |    |                                                                                      |
  8827. |    |do                                                                                    |
  8828. |    |CUSTNMBR (primary key)                                                                |
  8829. |    |                                                                                      |
  8830. |    |Les valeurs de tt.ActualPC n'ont pas encore √©t√© assign√©es.                            |
  8831. |    |Au d√©marrage, avant la moindre optimisation, la clause produit la r√©ponse suivante :  |
  8832. |    |                                                                                      |
  8833. |    |table type possible_keys                key  key_len ref  rows  Extra                 |
  8834. |    |et    ALL  PRIMARY                      NULL NULL    NULL 74                          |
  8835. |    |do    ALL  PRIMARY                      NULL NULL    NULL 2135                        |
  8836. |    |et_1  ALL  PRIMARY                      NULL NULL    NULL 74                          |
  8837. |    |tt    ALL  AssignedPC,ClientID,ActualPC NULL NULL    NULL 3872                        |
  8838. |    |range checked for each record (key map: 35)                                           |
  8839. |    |Etant donn√© que le type de regroupement est ALL pour toutes les tables, ces           |
  8840. |    |informations indique que MySQLfait un regroupement sur toutes les tables! Cela va     |
  8841. |    |prendre un temps √©norme, vu le nombre de lignes √† √©tudier dans chaque table. Pour le  |
  8842. |    |cas pr√©sent, cela repr√©sente 74 * 2135 * 74 * 3872 = 45,268,558,720 rows. Et encore,  |
  8843. |    |ces tables pourraient √™tre encore plus grosses...                                     |
  8844. |    |Un des probl√®mes pos√©s ici est que MySQL ne peut pas encore (encore) utiliser d'index |
  8845. |    |pour des colonnes d√©clar√©es de mani√®re diff√©rentes. Dans l'exemple, VARCHAR et CHAR   |
  8846. |    |sont identiques, √† moins qu'ils ne soient d√©clar√©s sur des longueurs diff√©rentes. Or, |
  8847. |    |tt.ActualPC est de type CHAR(10) et et.EMPLOYID est de type CHAR(15) : les longueur ne|
  8848. |    |concordent pas.                                                                       |
  8849. |    |Pour consolider la base, on utilise la commande ALTER TABLE pour rallonger le champs  |
  8850. |    |ActualPC de 10 caract√®res √† 15 caract√®res:                                            |
  8851. |    |                                                                                      |
  8852. |    |mysql> ALTER TABLE tt MODIFY ActualPC VARCHAR(15);                                    |
  8853. |    |Maintenant, tt.ActualPC et et.EMPLOYID sont tous les deux de type VARCHAR(15).        |
  8854. |    |L'√©xecution de la commande EXPLAIN produit maintenant le r√©sultat suivant :           |
  8855. |    |                                                                                      |
  8856. |    |table type   possible_keys   key     key_len ref         rows    Extra                |
  8857. |    |tt    ALL    AssignedPC,ClientID,ActualPC NULL NULL NULL 3872    where used           |
  8858. |    |do    ALL    PRIMARY         NULL    NULL    NULL        2135                         |
  8859. |    |range checked for each record (key map: 1)                                            |
  8860. |    |et_1  ALL    PRIMARY         NULL    NULL    NULL        74                           |
  8861. |    |range checked for each record (key map: 1)                                            |
  8862. |    |et    eq_ref PRIMARY         PRIMARY 15      tt.ActualPC 1                            |
  8863. |    |Ce n'est pas parfait, mais c'est nettement mieux (le produit des colonnes rows a √©t√©  |
  8864. |    |r√©duit d'un facteur 74). Cette version s'√©xecute maintenant en quelques secondes.     |
  8865. |    |Une autre am√©lioration peut √™tre apport√©e en √©liminant les disparit√©s de longueur     |
  8866. |    |entre les colonnes tt.AssignedPC et et_1.EMPLOYID, et d'autres part , tt.ClientID et  |
  8867. |    |do.CUSTNMBR comparisons:                                                              |
  8868. |    |                                                                                      |
  8869. |    |mysql> ALTER TABLE tt MODIFY AssignedPC VARCHAR(15),                                  |
  8870. |    |MODIFY ClientID   VARCHAR(15);                                                        |
  8871. |    |Maintenant EXPLAIN produit maintenant le r√©sultat suivant :                           |
  8872. |    |                                                                                      |
  8873. |    |table type   possible_keys   key     key_len ref            rows     Extra            |
  8874. |    |et    ALL    PRIMARY         NULL    NULL    NULL           74                        |
  8875. |    |tt    ref    AssignedPC,ClientID,ActualPC ActualPC 15 et.EMPLOYID 52 where used       |
  8876. |    |et_1  eq_ref PRIMARY         PRIMARY 15      tt.AssignedPC  1                         |
  8877. |    |do    eq_ref PRIMARY         PRIMARY 15      tt.ClientID    1                         |
  8878. |    |C'est d√©j√† tr√®s bien.                                                                 |
  8879. |    |Le probl√®me final est que, par d√©faut, MySQL suppose que les valeurs dans la colonne  |
  8880. |    |tt.ActualPC sont r√©parties uniform√©ment. Or, ce n'est pas le cas de la table tt.      |
  8881. |    |Heureusement, il est facile de le pr√©ciser √† MySQL :                                  |
  8882. |    |                                                                                      |
  8883. |    |shell> isamchk --analyze PATH_TO_MYSQL_DATABASE/tt                                    |
  8884. |    |shell> mysqladmin refresh                                                             |
  8885. |    |Le r√©sultat est maintenant parfait, et maintenant EXPLAIN produit maintenant le       |
  8886. |    |r√©sultat suivant :                                                                    |
  8887. |    |                                                                                      |
  8888. |    |table type   possible_keys   key     key_len ref            rows    Extra             |
  8889. |    |tt    ALL    AssignedPC,ClientID,ActualPC NULL NULL NULL    3872    where used        |
  8890. |    |et    eq_ref PRIMARY         PRIMARY 15      tt.ActualPC    1                         |
  8891. |    |et_1  eq_ref PRIMARY         PRIMARY 15      tt.AssignedPC  1                         |
  8892. |    |do    eq_ref PRIMARY         PRIMARY 15      tt.ClientID    1                         |
  8893. |    |On peut noter que la colonne rows est une estimation de la part de l'optimisateur de  |
  8894. |    |regroupement de MySQL : pour optimiser une commande, il faudrait maintenant v√©rifier  |
  8895. |    |qu'elle a des chiffres proche de la v√©rit√©. Si non, il faudrait am√©liorer les         |
  8896. |    |performances avec la clause STRAIGHT_JOIN dans la commande SELECT, et essayer de      |
  8897. |    |proposer diff√©rents ordres pour la liste des tables .                                 |
  8898. |    |7.22 DESCRIBE (Informations sur les colonnes)                                         |
  8899. |    |                                                                                      |
  8900. |    |{DESCRIBE | DESC} Nom_table {Nom_col | wild}                                          |
  8901. |    |DESCRIBE fournit des informations √† propos des colonnes d'une table. Nom_col peut √™tre|
  8902. |    |un nom de colonne, ou une cha√Æne qui contenant le caract√®re sp√©cial SQL ``%'' et ``_''|
  8903. |    |.                                                                                     |
  8904. |    |DESCRIBE fait la liste des colonnes d'une table. Si les types des colonnes sont       |
  8905. |    |diff√©rens de ce qui ont √©t√© sp√©cifi√©s √† la cr√©ation, avec la CREATE TABLE, il faut    |
  8906. |    |savoir que parfois, MySQL change spontan√©ment le type de colonnes. 7.6.1 Modifications|
  8907. |    |automatiques de type de colonne.                                                      |
  8908. |    |La commande USE est fournie pour assurer la compatibilit√© avec Oracle.                |
  8909. |    |La commande SHOW fournit les m√™mes informations. SHOW.                                |
  8910. |    |7.23 LOCK TABLES/UNLOCK TABLES                                                        |
  8911. |    |                                                                                      |
  8912. |    |LOCK TABLES Nom_table [AS alias] {READ | [LOW_PRIORITY] WRITE}                        |
  8913. |    |[, Nom_table {READ | [LOW_PRIORITY] WRITE} ...]                                       |
  8914. |    |...                                                                                   |
  8915. |    |UNLOCK TABLES                                                                         |
  8916. |    |LOCK TABLES verrouille une table dans le thread courant. UNLOCK TABLES ouvre tous les |
  8917. |    |verrous pos√© par le thread courant. Toutes les tables verrouill√© par un thread sont   |
  8918. |    |automatiquement d√©verrouill√©e quand le thread √©met un autre LOCK TABLES, ou √† la fin  |
  8919. |    |de la connexion au serveur.                                                           |
  8920. |    |Si un thread obtiens le verrou de lecture (READ) sur une table, le thread (et tous les|
  8921. |    |autres threads) ne peut que lire dans la table. Si un thread obtiens e verrou de      |
  8922. |    |lecture (READ) sur une table, le thread qui a le verrous est le seul √† pouvoir lire ou|
  8923. |    |√©crire dans la table.                                                                 |
  8924. |    |Les autres threads attendent (sans limite) que le verrous se lib√®re.                  |
  8925. |    |Le verrous d'√©criture a une priorit√© sup√©rieure au verrou de lecture, afin que les    |
  8926. |    |processus de mise √† jour puisse se faire d√®s que possible. Cela signifie que si un    |
  8927. |    |thread obtiens un verrou de lecture, et qu'un autre thread obtiens un verrou          |
  8928. |    |d'√©criture, alors le thread au verrou de lecture devra attendre la lib√©ration du      |
  8929. |    |verrou d'√©criture. Il est possible d'utiliser des verrous d'√©criture de basse priorit√©|
  8930. |    |(LOW_PRIORITY WRITE), mais il faut √™tre sur qu'il y aura un moment ou aucun thread ne |
  8931. |    |sera en train de lire la table.                                                       |
  8932. |    |Lors de l'utilisation de la commande LOCK TABLES, il faut verrouiller toutes les      |
  8933. |    |tables qui vont √™tre utilis√©es. Si il y a des alias dans une requ√™te, il faut aussi   |
  8934. |    |avoir les verrous pour les alias! Cette politique assure que la table ne se verrouille|
  8935. |    |jamais, sans pouvoir √™tre d√©verrouill√©e.                                              |
  8936. |    |Il ne faut jamais verrouiller une table qui va accepter une insertion report√©e (INSERT|
  8937. |    |DELAYED). Car, dans ce cas, l'insertion sera faite dans un autre thread, qui n'aura   |
  8938. |    |pas le verrou.                                                                        |
  8939. |    |G√©n√©ralement, il n'y a pas besoin de verrouiller les tables, car les mise √† jour      |
  8940. |    |UPDATE sont atomiques : aucun autre thread ne peut interf√©rer avec la commande en     |
  8941. |    |cours d'√©x√©cution. Il y a toutes fois, quelques cas o√π il est bon de verrouiller une  |
  8942. |    |table :                                                                               |
  8943. |    |Si un grand nombre d'op√©ration vont √™tre men√©e sur un bon nombre de table, il est plus|
  8944. |    |rapide de verrouiller les tables utilis√©es. L'inconv√©nient, bien sur, est qu'aucun    |
  8945. |    |autre thread ne pourra acc√®der aux informations, ni les modifier.                     |
  8946. |    |MySQL ne supporte pas d'environnement transactionnel, donc il faut absolument         |
  8947. |    |verrouiller une table, pour s'assurer qu'au autre thread n'intervient entre une       |
  8948. |    |commande SELECT et une commande UPDATE . L'exemple ci-dessous montre comment ex√©cuter |
  8949. |    |une transaction :                                                                     |
  8950. |    |                                                                                      |
  8951. |    |                                                                                      |
  8952. |    |mysql> LOCK TABLES trans READ, customer WRITE;                                        |
  8953. |    |mysql> select sum(value) from trans where customer_id= some_id;                       |
  8954. |    |mysql> update customer set total_value=sum_from_previous_statement                    |
  8955. |    |where customer_id=some_id;                                                            |
  8956. |    |mysql> UNLOCK TABLES;                                                                 |
  8957. |    |Sans la commande LOCK TABLES, il se peut qu'un autre thread ins√®re une nouvelle ligne |
  8958. |    |dans la table trans entre les deux commandes SELECT et UPDATE .                       |
  8959. |    |En utilisant des modifications incr√©mentales (UPDATE customer SET                     |
  8960. |    |value=value+new_value) ou avec la commande LAST_INSERT_ID(), on peut g√©n√©ralement     |
  8961. |    |√©viter l'utilisation des LOCK TABLES.                                                 |
  8962. |    |Il est aussi possible de r√©soudre quelques cas en utilisant les verrous utilisateurs  |
  8963. |    |GET_LOCK() et RELEASE_LOCK(). Ces verrous sont sauv√©s dans une table du serveur, et   |
  8964. |    |programm√© avec pthread_mutex_lock() et pthread_mutex_unlock() pour plus de rapidit√©.n |
  8965. |    |Miscellaneous functions. 10.11 Comment MySQL verrouille les tables.                   |
  8966. |    |7.24 SET OPTION                                                                       |
  8967. |    |                                                                                      |
  8968. |    |SET [OPTION] SQL_VALUE_OPTION= value, ...                                             |
  8969. |    |SET OPTION selectionne diff√©rentes options qui affecteront le mode op√©ratoire du      |
  8970. |    |client ou du serveur. Toute option reste valable jusqu'√† la fin de la session, ou     |
  8971. |    |jusqu'√† la prochaine modification.                                                    |
  8972. |    |‚Ä¢  ‚Ä¢  CHARACTER SET character_set_name | DEFAULT Cette option permet de choisir la    |
  8973. |    |table des caract√®res utilis√©e par MySQL. Actuellement, la seule option possible est   |
  8974. |    |cp1251_koi8, mais il est tr√®s simple d'ajouter de nouvelles tables en √©ditant le      |
  8975. |    |fichier ``sql/convert.cc'' dans le code source de MySQL . La table par d√©faut peut    |
  8976. |    |√™tre rappel√©e en utilisant la valeur DEFAULT. Il faut noter que la syntaxe pour       |
  8977. |    |choisir la table de caract√®re est diff√©rente des autres.                              |
  8978. |    |‚Ä¢  PASSWORD = PASSWORD('some password') Choisit un nouveau mot de passe pour          |
  8979. |    |l'utilisateur courant. Tout utilisateur non-anonyme peut changer son mot de passe!    |
  8980. |    |‚Ä¢  PASSWORD FOR user = PASSWORD('some password') Assigne un nouveau mot de passe pour |
  8981. |    |un utilisateur du serveur courant. Seul, un utilisateur avec des droits d'acc√®s √†     |
  8982. |    |mysql database peut le faire. L'utilisateur modifi√© doit √™tre d√©sign√© par             |
  8983. |    |utilisateur@nom_hote , avec utilisateur et nom_hote qui prennent les valeurs qui      |
  8984. |    |apparaissent dans la tablemysql.user, sous les colonnes User et Host columns of the   |
  8985. |    |table entry. Par exemple, si il existe une ligne avec User et Host qu valent          |
  8986. |    |respectivement 'bob' et '%.loc.gov', il faudra √©crire:                                |
  8987. |    |                                                                                      |
  8988. |    |mysql> SET PASSWORD FOR bob@"%.loc.gov" = PASSWORD("newpass");                        |
  8989. |    |‚Ä¢  SQL_BIG_TABLES = 0 | 1 Si mis √† un, toutes les tables temporaires sont stock√©s sur |
  8990. |    |le disque dur, plut√¥t qu'en m√©moire. Cela rend le processus un peu plus lent, mais il |
  8991. |    |g√©n√®re pas d'erreur du type The table Nom_table is full (la table Nom_table est       |
  8992. |    |pleine), si de grosses commandes SELECT demandes de grandes tables temporaires. Par   |
  8993. |    |d√©faut, cette option est √† 0.                                                         |
  8994. |    |‚Ä¢  SQL_BIG_SELECTS = 0 | 1 Si mis √† 1, MySQL annulera une commande SELECT qui va      |
  8995. |    |prendre un temps trop long. Ceci est tr√®s utile quand une clause WHERE complexe a √©t√© |
  8996. |    |sp√©cifi√©e. Une requ√™te trop long est une commande SELECT qui va avoir √† √©tudier plus  |
  8997. |    |de max_join_size rows lignes. Par d√©faut, cette valeur est √† 0 (Toutes les commandes  |
  8998. |    |SELECT autoris√©es).                                                                   |
  8999. |    |‚Ä¢  SQL_LOW_PRIORITY_UPDATES = 0 | 1 Si mis √† 1, toutes les commandes INSERT, UPDATE et|
  9000. |    |DELETE attendent qu'il n'y ait plus de commande SELECT en attente sur la table        |
  9001. |    |affect√©e.                                                                             |
  9002. |    |‚Ä¢  SQL_SELECT_LIMIT = value | DEFAULT Le nombre maximal de ligne √† retourner dans une |
  9003. |    |commande SELECT. Si une commande SELECT a une clause de limite LIMIT, LIMIT est       |
  9004. |    |prioritaire sur SQL_SELECT_LIMIT. La valeur par d√©faut pour cette option est "sans    |
  9005. |    |limite". Si la limite a √©t√© chang√©e, il est toujours possible de restaurer la         |
  9006. |    |configuration initiale avec DEFAULT.                                                  |
  9007. |    |‚Ä¢  SQL_LOG_OFF = 0 | 1 Si mis √† 1, aucun historique ne sera transmis au client, si le |
  9008. |    |client a les droits de process . Ceci n'affecte pas l'historique de mise √† jour.      |
  9009. |    |‚Ä¢  SQL_LOG_UPDATE = 0 | 1 Si mis √† 0, aucun historique de modification ne sera tenu,  |
  9010. |    |si le client a les droits de process privilege. Ceci n'affecte pas l'historique du    |
  9011. |    |client.                                                                               |
  9012. |    |‚Ä¢  TIMESTAMP = timestamp_value | DEFAULT Met √† l'heure le client. Cette fonction est  |
  9013. |    |g√©n√©ralement utilis√©e pour fixer la valeur initiale du timestamp, lors de             |
  9014. |    |l'utilisation de l'historique pour recr√©er des lignes.                                |
  9015. |    |‚Ä¢  LAST_INSERT_ID = # Fixe la valeur qui sera retourn√©e par la prochaine fonction     |
  9016. |    |LAST_INSERT_ID(). Elle est stock√©e dans l'historique de modification.                 |
  9017. |    |‚Ä¢  INSERT_ID = # Fixe la prochaine valeur √† utiliser lors d'une insertion dans une    |
  9018. |    |table avec une colonne de type AUTO_INCREMENT value. Cela sert surtout avec           |
  9019. |    |l'historique de modifications.                                                        |
  9020. |    |7.25 GRANT et REVOKE                                                                  |
  9021. |    |                                                                                      |
  9022. |    |GRANT priv_type [(column_list)] [, priv_type [(column_list)] ...]                     |
  9023. |    |ON {Nom_table | * | *.* | Nom_bdd.*}                                                  |
  9024. |    |TO user_name [IDENTIFIED BY 'password']                                               |
  9025. |    |[, user_name [IDENTIFIED BY 'password'] ...]                                          |
  9026. |    |[WITH GRANT OPTION]                                                                   |
  9027. |    |REVOKE priv_type [(column_list)] [, priv_type [(column_list)] ...]                    |
  9028. |    |ON {Nom_table | * | *.* | Nom_bdd.*}                                                  |
  9029. |    |FROM user_name [, user_name ...]                                                      |
  9030. |    |GRANT est impl√©ment√© depuis la version 3.22.11de MySQL. Pour les ancienne versions, la|
  9031. |    |commande GRANT ne fait rien.                                                          |
  9032. |    |Les commandes GRANT et REVOKE permettent aux administrateurs syst√®me de donner et     |
  9033. |    |enlever des droits aux utilisateurs :                                                 |
  9034. |    |‚Ä¢  niveau g√©n√©ral (Global level) : Les droits de niveau g√©n√©ral s'applique √† toutes   |
  9035. |    |les bases de donn√©es du serveur. Ces droits sont stock√© dans la table mysql.user.     |
  9036. |    |‚Ä¢  Niveau base de donn√©es (Database level): Les droits de niveau base de donn√©es      |
  9037. |    |s'applique aux tables d'une base de donn√©es. Ces droits sont stock√©s dans les tables  |
  9038. |    |mysql.db et mysql.host.                                                               |
  9039. |    |‚Ä¢  Niveau table (Table level) : Les droits de niveau table s'appliquent aux colonnes  |
  9040. |    |d'une table donn√©e. apply to all columns in a given table. Ces droits sont stock√©s    |
  9041. |    |dans la table mysql.tables_priv .                                                     |
  9042. |    |‚Ä¢  Niveu colonne (Column level) : Les droits de niveau colonne s'appliquent √† une     |
  9043. |    |colonn donn√©e d'une table donn√©e. to single columns in a given table. Ces droits sont |
  9044. |    |stock√©s dans la table mysql.columns_priv .                                            |
  9045. |    |Les commandes GRANT et REVOKE peuvent s'appliquer aux droits suivants, pr√©cis√©s dans  |
  9046. |    |priv_type:                                                                            |
  9047. |    |                                                                                      |
  9048. |    |ALL PRIVILEGES      FILE                RELOAD                                        |
  9049. |    |ALTER               INDEX               SELECT                                        |
  9050. |    |CREATE              INSERT              SHUTDOWN                                      |
  9051. |    |DELETE              PROCESS             UPDATE                                        |
  9052. |    |DROP                REFERENCES          USAGE                                         |
  9053. |    |ALL est un synonyme de for ALL PRIVILEGES. REFERENCES n'est pas encore impl√©ment√©.    |
  9054. |    |USAGE est actuellement synonyme de ``aucun droits''.Il peut √™tre utilis√© pour cr√©er un|
  9055. |    |utilisateur sans droits.                                                              |
  9056. |    |Pour enlever le droit de grant d'un utilisateur, il faut utiliser la valeur suivante  |
  9057. |    |dans priv_type :                                                                      |
  9058. |    |                                                                                      |
  9059. |    |                                                                                      |
  9060. |    |REVOKE GRANT OPTION ON ... FROM ...;                                                  |
  9061. |    |Les seules valeurs de priv_type qu'il est possible de sp√©cifier sont SELECT, INSERT,  |
  9062. |    |UPDATE, DELETE, CREATE, DROP, GRANT, INDEX et ALTER.                                  |
  9063. |    |Les seules valeurs de priv_type qu'il est possible de sp√©cifier pour une colonne      |
  9064. |    |(c'est √† dire, en utilisant la clause column_list) sont SELECT, INSERT et UPDATE.     |
  9065. |    |Il est possible de donner les droits g√©n√©raux en utilisant la syntaxe ON *.* . Il est |
  9066. |    |possible de donner des droits sur une base de donn√©es en utilisant la syntaxe ON      |
  9067. |    |Nom_bdd.* syntax. Si il y a une base de donn√©es courante, et que l'on sp√©cifie ON *,  |
  9068. |    |cela revient √† donner tous les droits pour la base de donn√©es courante . (Attention:  |
  9069. |    |Si il n'y a pas de base de donn√©es courante, cela revient √† donner des droits sur le  |
  9070. |    |serveur entier! )                                                                     |
  9071. |    |Afin de pouvoir donner des droits √† des utilisateurs d'hotes divers et vari√©s, MySQL  |
  9072. |    |accepte la sp√©cification de l'utilisateur sous la forme user@host. Pour pouvoir       |
  9073. |    |sp√©cifier des noms d'utilisateur ou d'hotes ayant des caract√®res sp√©ciaux dans le nom |
  9074. |    |(comme ``-''), il suffit d'entourer le nom de l'utilisateur ou de l'hote de guillemets|
  9075. |    |simples (i.e., 'test-user''test-hostname').                                           |
  9076. |    |Les noms d'hotes peuvent avoir des caract√®res jokers : Par exemple, user@"%.loc.gov"  |
  9077. |    |s'applique √† tous les utilisateurs user pour tous les hotes du domaine loc.gov et     |
  9078. |    |user@"144.155.166.%" s'appliquera √† tous les user pour des hotes dans le domaine      |
  9079. |    |144.155.166 .                                                                         |
  9080. |    |La forme simplifi√© user est un synonyme de user@"%". Note: pour autoriser des         |
  9081. |    |utilisateurs anonymes sur le serveur MySQL (ce qui est le comportement par d√©faut), il|
  9082. |    |faut aussi ajouter les utilisateurs locaux, gr?ce √† la forme user@localhost car sinon,|
  9083. |    |la ligne pour l'utilisateur anonyme dans la table mysql.user sera utilis√©e quand      |
  9084. |    |l'utilisateur essaiera de se connecter √† MySQL depuis la machine locale! Les          |
  9085. |    |utilisateurs anonymes sont d√©finis en ins√©rant une ligne User='' dans la table        |
  9086. |    |mysql.user . On peut v√©rifier si cela s'applique en ex√©cutant la ligne suivante :     |
  9087. |    |                                                                                      |
  9088. |    |mysql> SELECT Host,User FROM mysql.user WHERE User='';                                |
  9089. |    |Pour le moment, la commande GRANT n'accepte que des hotes, tables, bases et colonnes  |
  9090. |    |dont le nom ne d√©passe pas 60 caract√®res. Un nom d'utilisateur peut aller jusqu'√† 16  |
  9091. |    |caract√®res.                                                                           |
  9092. |    |Les privil√®ges pour une table ou une colonne sont constitu√©s du OU logique de chacun  |
  9093. |    |des droits. Par exemple, si la table mysql.user pr√©cise que un utilisateur a un droit |
  9094. |    |de select gloabal, cela ne peut pas √™tre interdit par une entr√©e dans une base, une   |
  9095. |    |table ou une colonne.                                                                 |
  9096. |    |Les droits pour une colonne sont calcul√©s comme suit :                                |
  9097. |    |                                                                                      |
  9098. |    |global privileges                                                                     |
  9099. |    |OR (database privileges AND host privileges)                                          |
  9100. |    |OR table privileges                                                                   |
  9101. |    |OR column privileges                                                                  |
  9102. |    |Dans la plupart des cas, les droits sont donn√©s aux utilisateurs avec les niveaux de  |
  9103. |    |droits, ce qui simplifie grandement la vie.                                           |
  9104. |    |Si des droits sont donn√©s √† un couple user/hostname qui n'existe pas dans la table    |
  9105. |    |mysql.user, une entr√©e est ins√©r√©e dans la table des droits, et elle reste valide     |
  9106. |    |jusqu'√† ce qu'une commande DELETE l'efface. En d'autres termes, GRANT peut cr√©er un   |
  9107. |    |utilisateur, mais REVOKE ne l'effacera pas. Il faut le faire explicitement avec       |
  9108. |    |DELETE.                                                                               |
  9109. |    |A partir de MySQL 3.22.12 , lors de la cr√©ation d'un nouvel utilisateur ou avec les   |
  9110. |    |droits globaux, un mot de passe sera affect√© avec la clause IDENTIFIED BY . Si        |
  9111. |    |l'utilisateur √† d√©j√† un mot de passe, il sera remplac√© par le nouveau.                |
  9112. |    |Attention: Lors de la cr√©ation d'un utilisateur, il aucun mot de passe n'est          |
  9113. |    |sp√©cifi√©e, cet utilisateur n'aura pas de mot de passe. C'est tr√®s imprudent.          |
  9114. |    |Les mots de passe peuvent √™tre assign√©s et modifi√©s avec la commande : SET PASSWORD . |
  9115. |    |SET OPTION.                                                                           |
  9116. |    |Lors de l'attribution de droit de niveau base , une entr√©e est ajout√©e dans la table  |
  9117. |    |mysql.db, si n√©cessaire. Quand toutes les privil√®ges poue la base de donn√©es sont     |
  9118. |    |supprim√©s avec REVOKE, l'entr√©e est effac√©e.                                          |
  9119. |    |Si un utilisateur n'a aucun droit sur uen table, la table n'est pas affich√©e quand    |
  9120. |    |l'utilisateur fait une requ√™te sur cette table. La table ne sera m√™me pas visible avec|
  9121. |    |une commandes SHOW TABLES.                                                            |
  9122. |    |La clause WITH GRANT OPTION donne √† l'utilisateur la capacit√© de donner √† d'autres    |
  9123. |    |utilisateurs des droits, d'un niveau √©gal √† ceux qu'il a d√©j√†. Il faut √™tre tr√®s      |
  9124. |    |prudent quand on attribue ce droit, car deux utilisateurs avec des droits diff√©rents  |
  9125. |    |peuvent rassembler leurs droits.                                                      |
  9126. |    |Il faut bien savoir que lorsqu'on donne √† un utilisateur le droit de grant, tous les  |
  9127. |    |droits que poss√®de cet utilisateur sont transmissible par cet utilisateur. Supposons  |
  9128. |    |que l'on ait donn√© des droits d'insertion √† un utilisateur. Si on lui ajoute le droit |
  9129. |    |de select sur une base, et qu'on lui ajoute en plus WITH GRANT OPTION, l'utilisateur  |
  9130. |    |peut donner les droits de selection et d'insertion √† tout autre utilisateur. Et si on |
  9131. |    |lui ajoute encore le droit de update, il pourra aussi donner ce droit.                |
  9132. |    |Il ne vaut mieux pas donner des droits de alter √† un utilisateur normal. Dans ce cas, |
  9133. |    |l'utilisateur peut essayer de pirater le syst√®me en renommant les tables de droits du |
  9134. |    |syst√®me.                                                                              |
  9135. |    |Lors de l'utilisation des droits de table ou de colonne pour un utilisateur, le       |
  9136. |    |serveur examine les droits de table et de colonne pour tous les utilisateurs, et cela |
  9137. |    |ralentit l√©g√©rement MySQL.                                                            |
  9138. |    |Quand mysqld d√©marre, tous les droits sont charg√©s en m√©moire. Les droits de table,   |
  9139. |    |base et colonnes prennent effet aussit√¥t, et les droits d'utilisateur prennent effet √†|
  9140. |    |la premi√®re connexion. Les modifications des tables de droits sont faites avec les    |
  9141. |    |fonctions GRANT et REVOKE et sont repercut√©es par le serveur imm√©diatement.Si les     |
  9142. |    |tables de droits sont modifi√©es √† la main (avec INSERT, UPDATE, etc.), il faut        |
  9143. |    |ex√©cuter une commande FLUSH PRIVILEGES ou lancer l'utilitaire mysqladmin              |
  9144. |    |flush-privileges pour faire prendre en compte des nouveaux droits.                    |
  9145. |    |Les diff√©rences les plus notables entre ANSI SQL et MySQL pour la commande GRANT sont:|
  9146. |    |                                                                                      |
  9147. |    |ANSI SQL n' pas de droit de nvieau global ou base de donn√©es, et ANSI SQL ne supporte |
  9148. |    |pas tous les types de droits de MySQL.                                                |
  9149. |    |Lors de l'effacement d'une table en ANSI SQL, tous les privil√®ges de cette table sont |
  9150. |    |r√©voqu√©s. Lors de la r√©vocation d'un droit avec ANSI SQL, tous les privil√®ges qui ont |
  9151. |    |√©t√© octroy√©s avec ce droits sont aussi r√©voqu√©s. Avec MySQL, les droits peuvent √™tre  |
  9152. |    |abandonn√©s uniquement avec la commande REVOKE ou en manipulant (avec pr√©cautions) les |
  9153. |    |tables de droits.                                                                     |
  9154. |    |7.26 CREATE INDEX                                                                     |
  9155. |    |                                                                                      |
  9156. |    |CREATE [UNIQUE] INDEX Nom_indexON Nom_table (Nom_col[(longueur]),... )                |
  9157. |    |The CREATE INDEX n'est disponible qu'√† partir de la version 3.22. CREATE INDEX est un |
  9158. |    |raccourci de ALTER TABLE qui cr√©e des index. ALTER TABLE                              |
  9159. |    |G√©n√©ralement, il est possible de cr√©er des tous les index d'une table au moment de la |
  9160. |    |cr√©ation de la table, avec CREATE TABLE. CREATE TABLECREATE INDEX permettra alors     |
  9161. |    |d'ajouter de nouveaux index.                                                          |
  9162. |    |Une liste de nom de colonne de format (col1,col2,...) cr√©er un index de multiples     |
  9163. |    |colonnes. Les index sont form√©s en concat√©nant les diff√©rentes valeurs en une ligne.  |
  9164. |    |Pour les valeurs de type CHAR et VARCHAR , les index peuvent ne prendre en compte     |
  9165. |    |qu'une partie de la colonne, en pr√©cisant Nom_col(longueur) . (Avec les types BLOB et |
  9166. |    |TEXT, cette longueur est obligatoire. ). La commande suivante montre comment cr√©er un |
  9167. |    |index sur les 10 premiers caract√®res d'une colonne :                                  |
  9168. |    |                                                                                      |
  9169. |    |mysql> CREATE INDEX part_of_name ON customer (name(10));                              |
  9170. |    |Etant donn√© que la plus part des mots diff√®rent les uns des autres dans les 10        |
  9171. |    |premi√®res lettres, l'index cr√©e ne devrait pas √™tre moins efficace que la colonne,    |
  9172. |    |tout en √©tant nettement plus rapide. Faire des index √† valeur partiel permet de       |
  9173. |    |r√©duire la taille des index, et d'acc√©l√©rer les op√©ration de tris et d'insertion.     |
  9174. |    |Il faut noter que l'on peut ajouter √† un index une colonne qui accepte les types NULL,|
  9175. |    |que depuis la version 3.23.2 de MySQL. De m√™me pour les colonnes de type BLOB/TEXT.   |
  9176. |    |Cela impose l'utilisation du format de table MyISAM.                                  |
  9177. |    |7.27 DROP INDEX                                                                       |
  9178. |    |                                                                                      |
  9179. |    |DROP INDEX Nom_index                                                                  |
  9180. |    |The DROP INDEX n'est disponible qu'√† partir de la version 3.22. DROP INDEX est un     |
  9181. |    |raccourci de ALTER TABLE qui efface des index. ALTER TABLE ALTER TABLE.               |
  9182. |    |7.28 Commentaires                                                                     |
  9183. |    |Le serveur MySQL accepte les commentaires qui commencent par # jusqu'√† la fin de la   |
  9184. |    |ligne, et les commentaires multi-lignes de type C/C++ /*........... */ :              |
  9185. |    |                                                                                      |
  9186. |    |mysql> select 1+1;     # This comment continues to the end of line                    |
  9187. |    |mysql> select 1 /* this is an in-line comment */ + 1;                                 |
  9188. |    |mysql> select 1+                                                                      |
  9189. |    |/*                                                                                    |
  9190. |    |this is a                                                                             |
  9191. |    |multiple-line comment                                                                 |
  9192. |    |*/                                                                                    |
  9193. |    |1;                                                                                    |
  9194. |    |Bien que le serveur comprennent les commentaires multi lignes, il y a quelques        |
  9195. |    |restrictions :                                                                        |
  9196. |    |Le guillemets, simple et doubles, sont consid√©s comme indiquant le d√©but d'une cha√Æne,|
  9197. |    |m√™me √† l'int√©rieur d'un commentaire. Si le guillement n'est pas doubl√©, l'analyseur ne|
  9198. |    |r√©alise par que le commentaires est termin√©. Sous mysql , l'invite de commande passe  |
  9199. |    |de mysql> √† '> or ">.                                                                 |
  9200. |    |Un point virgule est consid√©r√© comme une fin de commande SQL, et tout ce qui est apr√®s|
  9201. |    |est la prochaine commande.                                                            |
  9202. |    |Ces limitations s'applique aussi bien lors de l'utilsation de mysql que lors de la    |
  9203. |    |lecture d'un fichier dans une table.                                                  |
  9204. |    |MySQL n'accepte pas les commentaires de type ``--'' ANSI SQL. 5.3.7 `--' comme d√©but  |
  9205. |    |de commentaire.                                                                       |
  9206. |    |7.29 CREATE FUNCTION/DROP FUNCTION                                                    |
  9207. |    |                                                                                      |
  9208. |    |CREATE FUNCTION function_name RETURNS {STRING|REAL|INTEGER}                           |
  9209. |    |SONAME shared_library_name                                                            |
  9210. |    |DROP FUNCTION function_name                                                           |
  9211. |    |Une fonction d√©finie par l'utilisateur est un bon moyen d'ajouter de nouvelles        |
  9212. |    |fonctionnalit√©s √† MySQL avec de nouvelles fonctions natives, comme par exemple ABS()  |
  9213. |    |et CONCAT().                                                                          |
  9214. |    |CREATE FUNCTION sauve le nom de la fonction, le type et le point d'entr√©e de la       |
  9215. |    |fonction dans la table syst√®me mysql.func . Il faut avoir les droit insert et delete  |
  9216. |    |pour pouvoir cr√©er et effacer des fonctions.                                          |
  9217. |    |Toutes les fonctions actives sont recharg√©es √† chaque d√©marrage du serveur, √† moins de|
  9218. |    |lancer mysqld avec l'option --skip-grant-tables . Dans ce cas, l'initialisation des   |
  9219. |    |fonctions utilisateurs est oubli√©e, et les fonctions sont inutilisables. (Une fonction|
  9220. |    |active est une fonction cr√©√©e par CREATE FUNCTION et pas effac√©e avec DROP FUNCTION.) |
  9221. |    |7.30 Mots reserv√©s par MySQL                                                          |
  9222. |    |Un probl√®me commun est la cr√©ation d'une table avec des noms de colonne qui sont aussi|
  9223. |    |des nom de type de donn√©es, ou de fonction natives MySQL. Ceci est parfaitement       |
  9224. |    |possible (par exemple, ABS peut √™tre un nom de colonne), mais aucun espace n'est      |
  9225. |    |autoris√© entre le nom d'une fonction est la parenth√®se ouvrante lorsque ces noms sont |
  9226. |    |utilis√© comme des fonctions .                                                         |
  9227. |    |Les mots suivants sont explicitement reserv√©s par MySQL. La plus part sont interdits  |
  9228. |    |pas ANSI SQL92 comme nom de colonne ou nom de table (par exemple, group). Quelques uns|
  9229. |    |sont reserv√©s par MySQL qui en a besoin pour utiliser un analyseur syntaxique yacc    |
  9230. |    |Les noms suivants (issus de la table ci-dessus) sont interdits pas ANSI SQL, mais     |
  9231. |    |accept√©s apr MySQL comme nom de table/colonne. Ceci, car ces noms sont tr√®s courants, |
  9232. |    |et de nombreuses personnes les utilisent d√©j√† :                                       |
  9233. |    |action                                                                                |
  9234. |    |add                                                                                   |
  9235. |    |all                                                                                   |
  9236. |    |alter                                                                                 |
  9237. |    |                                                                                      |
  9238. |    |after                                                                                 |
  9239. |    |and                                                                                   |
  9240. |    |as                                                                                    |
  9241. |    |asc                                                                                   |
  9242. |    |                                                                                      |
  9243. |    |auto_increment                                                                        |
  9244. |    |between                                                                               |
  9245. |    |bigint                                                                                |
  9246. |    |bit                                                                                   |
  9247. |    |                                                                                      |
  9248. |    |binary                                                                                |
  9249. |    |blob                                                                                  |
  9250. |    |bool                                                                                  |
  9251. |    |both                                                                                  |
  9252. |    |                                                                                      |
  9253. |    |by                                                                                    |
  9254. |    |cascade                                                                               |
  9255. |    |char                                                                                  |
  9256. |    |character                                                                             |
  9257. |    |                                                                                      |
  9258. |    |change                                                                                |
  9259. |    |check                                                                                 |
  9260. |    |column                                                                                |
  9261. |    |columns                                                                               |
  9262. |    |                                                                                      |
  9263. |    |constraint                                                                            |
  9264. |    |create                                                                                |
  9265. |    |cross                                                                                 |
  9266. |    |current_date                                                                          |
  9267. |    |                                                                                      |
  9268. |    |current_time                                                                          |
  9269. |    |current_timestamp                                                                     |
  9270. |    |data                                                                                  |
  9271. |    |database                                                                              |
  9272. |    |                                                                                      |
  9273. |    |databases                                                                             |
  9274. |    |date                                                                                  |
  9275. |    |datetime                                                                              |
  9276. |    |day                                                                                   |
  9277. |    |                                                                                      |
  9278. |    |day_hour                                                                              |
  9279. |    |day_minute                                                                            |
  9280. |    |day_second                                                                            |
  9281. |    |dayofmonth                                                                            |
  9282. |    |                                                                                      |
  9283. |    |dayofweek                                                                             |
  9284. |    |dayofyear                                                                             |
  9285. |    |dec                                                                                   |
  9286. |    |decimal                                                                               |
  9287. |    |                                                                                      |
  9288. |    |default                                                                               |
  9289. |    |delete                                                                                |
  9290. |    |desc                                                                                  |
  9291. |    |describe                                                                              |
  9292. |    |                                                                                      |
  9293. |    |distinct                                                                              |
  9294. |    |distinctrow                                                                           |
  9295. |    |double                                                                                |
  9296. |    |drop                                                                                  |
  9297. |    |                                                                                      |
  9298. |    |escaped                                                                               |
  9299. |    |enclosed                                                                              |
  9300. |    |enum                                                                                  |
  9301. |    |explain                                                                               |
  9302. |    |                                                                                      |
  9303. |    |exists                                                                                |
  9304. |    |fields                                                                                |
  9305. |    |first                                                                                 |
  9306. |    |float                                                                                 |
  9307. |    |                                                                                      |
  9308. |    |float4                                                                                |
  9309. |    |float8                                                                                |
  9310. |    |foreign                                                                               |
  9311. |    |from                                                                                  |
  9312. |    |                                                                                      |
  9313. |    |for                                                                                   |
  9314. |    |full                                                                                  |
  9315. |    |function                                                                              |
  9316. |    |grant                                                                                 |
  9317. |    |                                                                                      |
  9318. |    |group                                                                                 |
  9319. |    |having                                                                                |
  9320. |    |hour                                                                                  |
  9321. |    |hour_minute                                                                           |
  9322. |    |                                                                                      |
  9323. |    |hour_second                                                                           |
  9324. |    |ignore                                                                                |
  9325. |    |in                                                                                    |
  9326. |    |index                                                                                 |
  9327. |    |                                                                                      |
  9328. |    |infile                                                                                |
  9329. |    |insert                                                                                |
  9330. |    |int                                                                                   |
  9331. |    |integer                                                                               |
  9332. |    |                                                                                      |
  9333. |    |interval                                                                              |
  9334. |    |int1                                                                                  |
  9335. |    |int2                                                                                  |
  9336. |    |int3                                                                                  |
  9337. |    |                                                                                      |
  9338. |    |int4                                                                                  |
  9339. |    |int8                                                                                  |
  9340. |    |into                                                                                  |
  9341. |    |if                                                                                    |
  9342. |    |                                                                                      |
  9343. |    |is                                                                                    |
  9344. |    |join                                                                                  |
  9345. |    |key                                                                                   |
  9346. |    |keys                                                                                  |
  9347. |    |                                                                                      |
  9348. |    |last_insert_id                                                                        |
  9349. |    |leading                                                                               |
  9350. |    |left                                                                                  |
  9351. |    |like                                                                                  |
  9352. |    |                                                                                      |
  9353. |    |lines                                                                                 |
  9354. |    |limit                                                                                 |
  9355. |    |load                                                                                  |
  9356. |    |lock                                                                                  |
  9357. |    |                                                                                      |
  9358. |    |long                                                                                  |
  9359. |    |longblob                                                                              |
  9360. |    |longtext                                                                              |
  9361. |    |low_priority                                                                          |
  9362. |    |                                                                                      |
  9363. |    |match                                                                                 |
  9364. |    |mediumblob                                                                            |
  9365. |    |mediumtext                                                                            |
  9366. |    |mediumint                                                                             |
  9367. |    |                                                                                      |
  9368. |    |middleint                                                                             |
  9369. |    |minute                                                                                |
  9370. |    |minute_second                                                                         |
  9371. |    |month                                                                                 |
  9372. |    |                                                                                      |
  9373. |    |monthname                                                                             |
  9374. |    |natural                                                                               |
  9375. |    |numeric                                                                               |
  9376. |    |no                                                                                    |
  9377. |    |                                                                                      |
  9378. |    |not                                                                                   |
  9379. |    |null                                                                                  |
  9380. |    |on                                                                                    |
  9381. |    |option                                                                                |
  9382. |    |                                                                                      |
  9383. |    |optionally                                                                            |
  9384. |    |or                                                                                    |
  9385. |    |order                                                                                 |
  9386. |    |outer                                                                                 |
  9387. |    |                                                                                      |
  9388. |    |outfile                                                                               |
  9389. |    |partial                                                                               |
  9390. |    |password                                                                              |
  9391. |    |precision                                                                             |
  9392. |    |                                                                                      |
  9393. |    |primary                                                                               |
  9394. |    |procedure                                                                             |
  9395. |    |processlist                                                                           |
  9396. |    |privileges                                                                            |
  9397. |    |                                                                                      |
  9398. |    |quarter                                                                               |
  9399. |    |read                                                                                  |
  9400. |    |real                                                                                  |
  9401. |    |references                                                                            |
  9402. |    |                                                                                      |
  9403. |    |rename                                                                                |
  9404. |    |regexp                                                                                |
  9405. |    |reverse                                                                               |
  9406. |    |repeat                                                                                |
  9407. |    |                                                                                      |
  9408. |    |replace                                                                               |
  9409. |    |restrict                                                                              |
  9410. |    |returns                                                                               |
  9411. |    |rlike                                                                                 |
  9412. |    |                                                                                      |
  9413. |    |second                                                                                |
  9414. |    |select                                                                                |
  9415. |    |set                                                                                   |
  9416. |    |show                                                                                  |
  9417. |    |                                                                                      |
  9418. |    |smallint                                                                              |
  9419. |    |soname                                                                                |
  9420. |    |sql_big_tables                                                                        |
  9421. |    |sql_big_selects                                                                       |
  9422. |    |                                                                                      |
  9423. |    |sql_select_limit                                                                      |
  9424. |    |sql_low_priority_updates                                                              |
  9425. |    |sql_log_off                                                                           |
  9426. |    |sql_log_update                                                                        |
  9427. |    |                                                                                      |
  9428. |    |straight_join                                                                         |
  9429. |    |starting                                                                              |
  9430. |    |status                                                                                |
  9431. |    |string                                                                                |
  9432. |    |                                                                                      |
  9433. |    |table                                                                                 |
  9434. |    |tables                                                                                |
  9435. |    |terminated                                                                            |
  9436. |    |text                                                                                  |
  9437. |    |                                                                                      |
  9438. |    |time                                                                                  |
  9439. |    |timestamp                                                                             |
  9440. |    |tinyblob                                                                              |
  9441. |    |tinytext                                                                              |
  9442. |    |                                                                                      |
  9443. |    |tinyint                                                                               |
  9444. |    |trailing                                                                              |
  9445. |    |to                                                                                    |
  9446. |    |use                                                                                   |
  9447. |    |                                                                                      |
  9448. |    |using                                                                                 |
  9449. |    |unique                                                                                |
  9450. |    |unlock                                                                                |
  9451. |    |unsigned                                                                              |
  9452. |    |                                                                                      |
  9453. |    |update                                                                                |
  9454. |    |usage                                                                                 |
  9455. |    |values                                                                                |
  9456. |    |varchar                                                                               |
  9457. |    |                                                                                      |
  9458. |    |variables                                                                             |
  9459. |    |varying                                                                               |
  9460. |    |varbinary                                                                             |
  9461. |    |with                                                                                  |
  9462. |    |                                                                                      |
  9463. |    |write                                                                                 |
  9464. |    |where                                                                                 |
  9465. |    |year                                                                                  |
  9466. |    |year_month                                                                            |
  9467. |    |                                                                                      |
  9468. |    |zerofill                                                                              |
  9469. |    |                                                                                      |
  9470. |    |                                                                                      |
  9471. |    |                                                                                      |
  9472. |    |                                                                                      |
  9473. |    |Les valeurs suivantes issues de la table ci dessus) sont interdites par ANSI SQL, mais|
  9474. |    |autoris√©es par MySQL comme nom de table ou de colonne. Ceci, car ce sont des noms     |
  9475. |    |naturels, et de nombreuses personnes les utilisent d√©j√†.                              |
  9476. |    |ACTION                                                                                |
  9477. |    |BIT                                                                                   |
  9478. |    |DATE                                                                                  |
  9479. |    |ENUM                                                                                  |
  9480. |    |NO                                                                                    |
  9481. |    |TEXT                                                                                  |
  9482. |    |TIME                                                                                  |
  9483. |    |TIMESTAMP                                                                             |
  9484. |    |8 Exemple MySQL                                                                       |
  9485. |    |Ce chapitre est une introduction √† MySQL qui montre comment utiliser le client mysql  |
  9486. |    |pour cr√©er et utiliser une base de donn√©es simple. mysql est un client (parfois       |
  9487. |    |appel√©e ``terminal'' ou aussi ``moniteur'') qui permet √† un utilisateur de se         |
  9488. |    |connecter √† un serveur MySQL, de lancer quelques requ√™tes, et de voir les r√©sultats.  |
  9489. |    |mysql peut aussi √™tre lanc√© en mode automatique, en lui pr√©cisant un fichier qui      |
  9490. |    |contient les commandes √† ex√©cuter. Cette pr√©sentation de mysql couvre les deux        |
  9491. |    |aspects.                                                                              |
  9492. |    |Pour avoir la liste des options disponibles sur mysql, il suffit d'utiliser l'option :|
  9493. |    |--help.                                                                               |
  9494. |    |                                                                                      |
  9495. |    |shell> mysql --help                                                                   |
  9496. |    |Ce chapitre supposera que mysql est install√© sur votre machine, et qu'un serveur MySQL|
  9497. |    |est accessible. Si ce n'est pas le cas, contactez votre administrateur MySQL (Si vous |
  9498. |    |etes l'administrateur, vous aurez certainement besoin de consulter d'autres sections  |
  9499. |    |de ce manuel).                                                                        |
  9500. |    |Ce chapitre couvre la constitution et l'utilisation d'une base de donn√©es. Si vous    |
  9501. |    |√™tes simplement interess√© par la lecture de bases de donn√©es d√©j√† existantes, vous    |
  9502. |    |pouvez √©viter les premi√®res sections qui montre la cr√©ation d'une base de donn√©es et  |
  9503. |    |de tables.                                                                            |
  9504. |    |Etant donn√© que ce chapitre n'est qu'un exemple d'introduction, de nombreux d√©tails   |
  9505. |    |sont laiss√©s de cot√©. N'h√©sitez pas √† vous reportez aux autres sections du manuel,    |
  9506. |    |pour toute information compl√©mentaire.                                                |
  9507. |    |8.1 Connection et d√©connection du serveur                                             |
  9508. |    |Pour se connecter au serveur MySQL, il vous faut un nom d'utilisateur, et, le plus    |
  9509. |    |probablement, un mot de passe. Si le serveur tourne sur une autre machine, il vous    |
  9510. |    |faudra aussi un nom d'hote. Contactez l'administrateur de la machine pour conna√Ætre   |
  9511. |    |les param√®tres de connexion (i.e. le nom d'hote, le nom d'utilisateur, et le mot de   |
  9512. |    |passe). Une fois que vous conna√Ætrez tous ces param√®tres, vous pourrez vous connecter |
  9513. |    |comme ceci :                                                                          |
  9514. |    |                                                                                      |
  9515. |    |shell> mysql -h host -u user -p                                                       |
  9516. |    |Enter password: ********                                                              |
  9517. |    |Les ******** repr√©sentent votre mot de passe : saisissez le lorsque mysql affiche the |
  9518. |    |Enter password (Entrez votre mot de passe): invite.                                   |
  9519. |    |Si tout a bien fonctionn√©, vous devriez voir s'afficher des informations              |
  9520. |    |d'introduction, suivies d'une invite de commande : mysql> prompt:                     |
  9521. |    |                                                                                      |
  9522. |    |shell> mysql -h host -u user -p                                                       |
  9523. |    |Enter password: ********                                                              |
  9524. |    |Welcome to the MySQL monitor.  Commands end with ; or \g.                             |
  9525. |    |Your MySQL connection id is 459 to server version: 3.22.20a-log                       |
  9526. |    |                                                                                      |
  9527. |    |Type 'help' for help.                                                                 |
  9528. |    |mysql>                                                                                |
  9529. |    |L'invite de commande vous indique que mysql est pr√™t √† recevoir des commandes.        |
  9530. |    |Certaines installations de MySQL permettent l'acc√®s anonyme au serveur. Si c'est le   |
  9531. |    |cas de votre machine, vous devriez pouvoir vous connecter sans fournir aucune         |
  9532. |    |information.                                                                          |
  9533. |    |                                                                                      |
  9534. |    |shell> mysql                                                                          |
  9535. |    |Apr√®s s'√™tre correctement connect√©, vous pouvez vous d√©connecter √† tout moment, en    |
  9536. |    |tapant QUIT √† l'invite de mysql.                                                      |
  9537. |    |                                                                                      |
  9538. |    |mysql> QUIT                                                                           |
  9539. |    |Bye                                                                                   |
  9540. |    |Vous pouvez aussi vous d√©connecter en tapant les touches contr√¥le-D.                  |
  9541. |    |Par la suite, nous supposerons que vous vous √™tes correctement connect√© au serveur.   |
  9542. |    |8.2 Soumettre une requ√™te                                                             |
  9543. |    |Assurez vous que vous √™tes correctement connect√©. Dans le cas contraire, reportez vous|
  9544. |    |√† la section pr√©c√©dente. Ce faisant, vous ne vous √™tes en fait connect√© √† aucune base |
  9545. |    |de donn√©es, mais c'est bien comme √ßa. A ce stade ; il est important de savoir comment |
  9546. |    |envoyer une requ√™te, avant de savoir cr√©er une table, charger des donn√©es, et         |
  9547. |    |interroger la base. Cette section d√©crit les principes de base de saisie des          |
  9548. |    |commandes, en utilisant des commandes qui vous familiariseront avec le fonctionnement |
  9549. |    |de MySQL.                                                                             |
  9550. |    |Voici une commande simple qui demande au serveur la version et la date courante.      |
  9551. |    |Saisissez la comme ci-dessous, puis appuyez sur la touche entr√©e.                     |
  9552. |    |                                                                                      |
  9553. |    |mysql> SELECT VERSION(), CURRENT_DATE;                                                |
  9554. |    |+--------------+--------------+                                                       |
  9555. |    || version()    | CURRENT_DATE |                                                       |
  9556. |    |+--------------+--------------+                                                       |
  9557. |    || 3.22.20a-log | 1999-03-19   |                                                       |
  9558. |    |+--------------+--------------+                                                       |
  9559. |    |1 row in set (0.01 sec)                                                               |
  9560. |    |mysql>                                                                                |
  9561. |    |Cette premi√®re requ√™te montre beaucoup de caract√©ristiques de mysql                   |
  9562. |    |Une commande consiste g√©n√©ralement d'une commande SQL, suivie d'un point-virgule (Il y|
  9563. |    |a quelques exceptions, ou les point-virgules ne sont pas n√©cessaires, comme la        |
  9564. |    |commande QUIT , vue pr√©c√©dement. Nous y reviendrons plus loin).                       |
  9565. |    |Quand une requ√™te a √©t√© saisie, mysql l'envoie au serveur pour qu'il l'ex√©cute, puis  |
  9566. |    |affiche le r√©sultat, et repropose une nouvelle invite de commande : mysql>.           |
  9567. |    |Mysql> affiche la r√©ponse du serveur sous forme de table (lignes et colonnes). La     |
  9568. |    |premi√®re ligne contient les titres des colonnes. Les lignes suivantes pr√©sentent les  |
  9569. |    |r√©sultats de la requ√™te. G√©n√©ralement, les noms de colonnes sont les noms des colonnes|
  9570. |    |des tables utilis√©es. Si la valeur retourn√©e est une expression plut√¥t qu'une table,  |
  9571. |    |(comme dans l'exemple ci-dessus), mysql cr√©e une colonne avec comme titre l'expression|
  9572. |    |√©valu√©e.                                                                              |
  9573. |    |mysql affiche le nombre de ligne retourn√©, et le temps de traitement de la requ√™te, ce|
  9574. |    |qui donne une id√©e de la performance globale du serveur. Ces valeurs sont impr√©cises, |
  9575. |    |car elle repr√©sente le temps pass√© entre l'envoi de la commande et la r√©ception de la |
  9576. |    |r√©ponse, et ne montre pas quelle quantit√© de processeur a √©t√© utilis√©e. Cela ne permet|
  9577. |    |pas de conna√Ætre la charge du serveur, ou les retards du r√©seau.                      |
  9578. |    |Par un souci de concision, la ligne ``rows in set'' ne sera plus affich√©e dans les    |
  9579. |    |exemples ult√©rieurs.                                                                  |
  9580. |    |Les mots cl√©s du langage peuvent √™tre en majuscule ou minuscule, au choix. Les lignes |
  9581. |    |suivantes sont √©quivalentes :                                                         |
  9582. |    |                                                                                      |
  9583. |    |mysql> SELECT VERSION(), CURRENT_DATE;                                                |
  9584. |    |mysql> select version(), current_date;                                                |
  9585. |    |mysql> SeLeCt vErSiOn(), current_DATE;                                                |
  9586. |    |Voici une autre requ√™te qui montre que mysql peut √™tre utilis√© comme une simple       |
  9587. |    |calculatrice.                                                                         |
  9588. |    |                                                                                      |
  9589. |    |mysql> SELECT SIN(PI()/4), (4+1)*5;                                                   |
  9590. |    |+-------------+---------+                                                             |
  9591. |    || SIN(PI()/4) | (4+1)*5 |                                                             |
  9592. |    |+-------------+---------+                                                             |
  9593. |    ||    0.707107 |      25 |                                                             |
  9594. |    |+-------------+---------+                                                             |
  9595. |    |Les commandes que nous venons de voir sont relativement courtes, et tiennent sur une  |
  9596. |    |seule ligne. Il est possible de saisir plusieurs commandes sur une seule ligne, il    |
  9597. |    |suffit de toujours les terminer par des points-virgules.                              |
  9598. |    |                                                                                      |
  9599. |    |mysql> SELECT VERSION(); SELECT NOW();                                                |
  9600. |    |+--------------+                                                                      |
  9601. |    || version()    |                                                                      |
  9602. |    |+--------------+                                                                      |
  9603. |    || 3.22.20a-log |                                                                      |
  9604. |    |+--------------+                                                                      |
  9605. |    |                                                                                      |
  9606. |    |+---------------------+                                                               |
  9607. |    || NOW()               |                                                               |
  9608. |    |+---------------------+                                                               |
  9609. |    || 1999-03-19 00:15:33 |                                                               |
  9610. |    |+---------------------+                                                               |
  9611. |    |Une commande n'est pas obligatoirement sur une seule ligne : les commandes les plus   |
  9612. |    |longues peuvent tenir sur plusieurs lignes. Ce n'est pas un probl√®me, car mysql       |
  9613. |    |d√©termines la fin de la commandes gr?ce au point-virgule, et non pas en cherchant la  |
  9614. |    |fin de la ligne (en d'autres termes, mysql accepte n'importe quel format de colonne,  |
  9615. |    |mais ne les ex√©cute que si il trouve un point-virgule √† la fin de la commande).       |
  9616. |    |Voici une commande simple, et multi-lignes :                                          |
  9617. |    |                                                                                      |
  9618. |    |mysql> SELECT                                                                         |
  9619. |    |-> USER()                                                                             |
  9620. |    |-> ,                                                                                  |
  9621. |    |-> CURRENT_DATE;                                                                      |
  9622. |    |+--------------------+--------------+                                                 |
  9623. |    || USER()             | CURRENT_DATE |                                                 |
  9624. |    |+--------------------+--------------+                                                 |
  9625. |    || joesmith@localhost | 1999-03-18   |                                                 |
  9626. |    |+--------------------+--------------+                                                 |
  9627. |    |Dans cet exemples, vous avez pu remarquer que l'invite passe de mysql> √† -> d√®s que la|
  9628. |    |commande devient multi-lignes. C'est par ce biais que mysql indique qu'il n'a pas     |
  9629. |    |trouv√© une commande compl√®te, et qu'il attend un compl√©ment d'information. En         |
  9630. |    |observant bien l'invite de commande, vous saurez toujours ce que mysql attend de vous.|
  9631. |    |                                                                                      |
  9632. |    |Pour annuler une commande qui est partiellement saisie, il suffit de taper '\c'       |
  9633. |    |(slash-c)                                                                             |
  9634. |    |                                                                                      |
  9635. |    |mysql> SELECT                                                                         |
  9636. |    |-> USER()                                                                             |
  9637. |    |-> \c                                                                                 |
  9638. |    |mysql>                                                                                |
  9639. |    |Ici, l'invite de commande reprend son aspect initial. Cela indique que mysql est pr√™t |
  9640. |    |pour une nouvelle commande.                                                           |
  9641. |    |La table suivante montre les diff√©rentes formes de l'invite de commande, et sa        |
  9642. |    |signification :                                                                       |
  9643. |    |Une commande peut s'√©tendre sur plusieurs lignes si, par accident, vous oubliez de    |
  9644. |    |terminer votre ligne par un point-virgule. Dans ce cas, mysql attend plus             |
  9645. |    |d'informations :                                                                      |
  9646. |    |                                                                                      |
  9647. |    |mysql> SELECT USER()                                                                  |
  9648. |    |->                                                                                    |
  9649. |    |Si cela vous arrive (vous pensez avoir entr√© une commande, mais la seule r√©ponse est  |
  9650. |    |cette d√©sesp√©rante invite -> ) ; le plus souvent mysql attends le point-virgule. Si   |
  9651. |    |vous ne comprenez pas que mysql attend la suite de votre commande, vous risquez       |
  9652. |    |d'attendre un bon moment. Il suffit alors de compl√©ter la commande avec un            |
  9653. |    |point-virgule, pour valider la commande.                                              |
  9654. |    |                                                                                      |
  9655. |    |mysql> SELECT USER()                                                                  |
  9656. |    |-> ;                                                                                  |
  9657. |    |+--------------------+                                                                |
  9658. |    || USER()             |                                                                |
  9659. |    |+--------------------+                                                                |
  9660. |    || joesmith@localhost |                                                                |
  9661. |    |+--------------------+                                                                |
  9662. |    |Les formes '> et "> d'invite de commande apparaissent lors de la saisie de cha√Ænes.   |
  9663. |    |Avec MySQL, vous pouvez √©crire des cha√Ænes avec les guillemets simples et doubles :   |
  9664. |    |``''' ou ``"' ; 'comme par exemple 'bonjour' ou "au revoir". '> et "> signifie donc   |
  9665. |    |que vous avez commenc√© √† saisir une cha√Æne de caract√®res, mais que vous n'avez pas    |
  9666. |    |encore fini. Si vous saisissez une cha√Æne de plusieurs lignes, c'est une indication   |
  9667. |    |judicieuse, mais est-ce souvent le cas? En g√©n√©ral, ces deux invites de commande      |
  9668. |    |indiquent que vous avez oubli√© de refermer les guillemets :                           |
  9669. |    |                                                                                      |
  9670. |    |mysql> SELECT * FROM my_table WHERE nom = "Smith AND age < 30;                        |
  9671. |    |">                                                                                    |
  9672. |    |Si vous saisissez cette commande SELECT , puis tapez ENTREE, il ne va rien se passer. |
  9673. |    |Plut√¥t que de se demander " mais qu'est ce qui prend tant de temps ", il vaut mieux   |
  9674. |    |remarquer que l'invite a pris la forme particuli√®re de "> . Cela signifie que mysql   |
  9675. |    |s'attend ce que vous compl√©tiez votre cha√Æne et la commande. En effet, la cha√Æne      |
  9676. |    |"Smith n'a pas de deuxi√®me guillemet.                                                 |
  9677. |    |A ce moment, que faire ? La chose la plus simplet d'annuler la commande. Cependant,   |
  9678. |    |vous ne pouvez pas taper \c , car mysql l'interpr√©tera comme un caract√®re de cha√Æne. A|
  9679. |    |la place, il faut clore la cha√Æne, puis taper \c .                                    |
  9680. |    |                                                                                      |
  9681. |    |mysql> SELECT * FROM my_table WHERE nom = "Smith AND age < 30;                        |
  9682. |    |"> "\c                                                                                |
  9683. |    |mysql>                                                                                |
  9684. |    |L'invite de commande redevient mysql>, ce qui indique que mysql est pr√™t pour une     |
  9685. |    |nouvelle commande.                                                                    |
  9686. |    |Il est important que les invites de commande de la forme signifie '> et "> que vous   |
  9687. |    |n'avez pas termin√© une cha√Æne, et que toutes les lignes suivantes seront ignor√©es par |
  9688. |    |l'analyseur de mysql ‚Äì y compris la commande QUIT! Cela peut √™tre d√©routant, surtout  |
  9689. |    |si vous ne savez pas qu'il faut absolument fournir un guillemet de fin, m√™me pour     |
  9690. |    |annuler la saisie                                                                     |
  9691. |    |8.3 Exemples de requ√™tes                                                              |
  9692. |    |Voici quelques exemples de requ√™tes classiques avec MySQL.                            |
  9693. |    |Certains des exemples utilisent la table 'shop' qui contient les prix de chaque       |
  9694. |    |article (num√©ro d'objet). Supposons que chaque objet a un prix unique, et que le      |
  9695. |    |couple (item, trader) et une cl√© prmiaire pour ces lignes.                            |
  9696. |    |Vous pouvez cr√©er cet exemple avec la table suivante :                                |
  9697. |    |                                                                                      |
  9698. |    |CREATE TABLE shop (                                                                   |
  9699. |    |article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,                             |
  9700. |    |dealer  CHAR(20)                 DEFAULT ''     NOT NULL,                             |
  9701. |    |price   DOUBLE(16,2)             DEFAULT '0.00' NOT NULL,                             |
  9702. |    |PRIMARY KEY(article, dealer));                                                        |
  9703. |    |                                                                                      |
  9704. |    |INSERT INTO shop VALUES                                                               |
  9705. |    |(1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45),(3,'C',1.69),                    |
  9706. |    |(3,'D',1.25),(4,'D',19.95);                                                           |
  9707. |    |Les donn√©es pour l'exemple sont :                                                     |
  9708. |    |                                                                                      |
  9709. |    |SELECT * FROM shop                                                                    |
  9710. |    |                                                                                      |
  9711. |    |+---------+--------+-------+                                                          |
  9712. |    || article | dealer | price |                                                          |
  9713. |    |+---------+--------+-------+                                                          |
  9714. |    ||    0001 | A      |  3.45 |                                                          |
  9715. |    ||    0001 | B      |  3.99 |                                                          |
  9716. |    ||    0002 | A      | 10.99 |                                                          |
  9717. |    ||    0003 | B      |  1.45 |                                                          |
  9718. |    ||    0003 | C      |  1.69 |                                                          |
  9719. |    ||    0003 | D      |  1.25 |                                                          |
  9720. |    ||    0004 | D      | 19.95 |                                                          |
  9721. |    |+---------+--------+-------+                                                          |
  9722. |    |8.3.1 Valeur maximale d'une colone                                                    |
  9723. |    |"Quel est le plus grand num√©ro d'objet?"                                              |
  9724. |    |                                                                                      |
  9725. |    |SELECT MAX(article) AS article FROM shop                                              |
  9726. |    |                                                                                      |
  9727. |    |+---------+                                                                           |
  9728. |    || article |                                                                           |
  9729. |    |+---------+                                                                           |
  9730. |    ||       4 |                                                                           |
  9731. |    |+---------+                                                                           |
  9732. |    |8.3.2 La ligne qui contient le maximum d'une colonne                                  |
  9733. |    |"Retrouver le prix, le vendeur et le num√©ro de l'objet le plus cher du magasin"       |
  9734. |    |En ANSI-SQL cela est tr√®s facilement fait avec un sous selection :                    |
  9735. |    |                                                                                      |
  9736. |    |SELECT article, dealer, price                                                         |
  9737. |    |FROM   shop                                                                           |
  9738. |    |WHERE  price=(SELECT MAX(price) FROM shop)                                            |
  9739. |    |Avec MySQL (et donc, sans les sous selections), il faut le faire en deux √©tapes :     |
  9740. |    |Retrouver la valeur maximale de la table, avec la commande SELECT.                    |
  9741. |    |Avec la valeur lue, cr√©er la requ√™t suivante :                                        |
  9742. |    |                                                                                      |
  9743. |    |SELECT article, dealer, price                                                         |
  9744. |    |FROM   shop                                                                           |
  9745. |    |WHERE  price=19.95                                                                    |
  9746. |    |Une autre solution est de trier les objets par prix, et de lire la premi√®re ligne,    |
  9747. |    |avec la clause MySQL LIMIT:                                                           |
  9748. |    |                                                                                      |
  9749. |    |SELECT article, dealer, price                                                         |
  9750. |    |FROM   shop                                                                           |
  9751. |    |ORDER BY price DESC                                                                   |
  9752. |    |LIMIT 1                                                                               |
  9753. |    |Note: Avec cette m√©thode, on ne verra qu'ne seul objet, m√™me si il y a plusieurs      |
  9754. |    |objets de meme prix.                                                                  |
  9755. |    |8.3.3 Maximum d'une colonne : par groupement                                          |
  9756. |    |"Quel est le prix maximal d'un article?"                                              |
  9757. |    |                                                                                      |
  9758. |    |SELECT article, MAX(price) AS price                                                   |
  9759. |    |FROM   shop                                                                           |
  9760. |    |GROUP BY article                                                                      |
  9761. |    |                                                                                      |
  9762. |    |+---------+-------+                                                                   |
  9763. |    || article | price |                                                                   |
  9764. |    |+---------+-------+                                                                   |
  9765. |    ||    0001 |  3.99 |                                                                   |
  9766. |    ||    0002 | 10.99 |                                                                   |
  9767. |    ||    0003 |  1.69 |                                                                   |
  9768. |    ||    0004 | 19.95 |                                                                   |
  9769. |    |+---------+-------+                                                                   |
  9770. |    |8.3.4 La ligne contenant le maximum d'une colonne d'un groupe                         |
  9771. |    |"Pour chaque article, trouver le vendeur le plus cher."                               |
  9772. |    |En ANSI SQL on pourrai le faire avec une sous selection, comme ceci :                 |
  9773. |    |                                                                                      |
  9774. |    |SELECT article, dealer, price                                                         |
  9775. |    |FROM   shop s1                                                                        |
  9776. |    |WHERE  price=(SELECT MAX(s2.price)                                                    |
  9777. |    |FROM shop s2                                                                          |
  9778. |    |WHERE s1.article = s2.article)                                                        |
  9779. |    |Avec MySQL il vaut mieux le faire en deux √©tapes :                                    |
  9780. |    |Retrouver la liste des (article,prix_maxima). 8.3.4 La ligne contenant le maximum     |
  9781. |    |d'une colonne d'un groupe.                                                            |
  9782. |    |pour chaque article trouv√©, retrouver la ligne correspondante, pour lire le nom du    |
  9783. |    |vendeur. price.                                                                       |
  9784. |    |Cela peut se faire facilement avec une table temporaire:                              |
  9785. |    |                                                                                      |
  9786. |    |CREATE TEMPORARY TABLE tmp (                                                          |
  9787. |    |article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,                             |
  9788. |    |price   DOUBLE(16,2)             DEFAULT '0.00' NOT NULL);                            |
  9789. |    |                                                                                      |
  9790. |    |LOCK TABLES article read;                                                             |
  9791. |    |                                                                                      |
  9792. |    |INSERT INTO tmp SELECT article, MAX(price) FROM shop GROUP BY article;                |
  9793. |    |                                                                                      |
  9794. |    |SELECT article, dealer, price FROM shop, tmp                                          |
  9795. |    |WHERE shop.article=tmp.articel AND shop.price=tmp.price;                              |
  9796. |    |                                                                                      |
  9797. |    |UNLOCK TABLES;                                                                        |
  9798. |    |                                                                                      |
  9799. |    |DROP TABLE tmp;                                                                       |
  9800. |    |Si vous n'utislisez pas de table temporaire, il vous faut verrouiller la table.       |
  9801. |    |"Est ce qu'il est impossible de faire cela avec une seule requ√™te?"                   |
  9802. |    |Oui, mais en utilisant une astuce qui s'appelle : "MAX-CONCAT trick":                 |
  9803. |    |                                                                                      |
  9804. |    |SELECT article,                                                                       |
  9805. |    |SUBSTRING( MAX( CONCAT(LPAD(price,6,'0'),dealer) ), 7) AS dealer,                     |
  9806. |    |0.00+LEFT(      MAX( CONCAT(LPAD(price,6,'0'),dealer) ), 6) AS price                  |
  9807. |    |FROM   shop                                                                           |
  9808. |    |GROUP BY article;                                                                     |
  9809. |    |                                                                                      |
  9810. |    |+---------+--------+-------+                                                          |
  9811. |    || article | dealer | price |                                                          |
  9812. |    |+---------+--------+-------+                                                          |
  9813. |    ||    0001 | B      |  3.99 |                                                          |
  9814. |    ||    0002 | A      | 10.99 |                                                          |
  9815. |    ||    0003 | C      |  1.69 |                                                          |
  9816. |    ||    0004 | D      | 19.95 |                                                          |
  9817. |    |+---------+--------+-------+                                                          |
  9818. |    |Le dernier exemple peut √™tre fait de mani√®re plus efficace, en effectuant la scission |
  9819. |    |de la colonne au niveau du client; The last example can of course be made a bit more  |
  9820. |    |efficient by doing the                                                                |
  9821. |    |8.3.5 Utiliser des cl√©s √©trang√®res                                                    |
  9822. |    |Il n'y a pas besoin de cl√© √©trang√®re pour joindre deux tables.                        |
  9823. |    |La seule chose que MySQL ne fait pas est de CHECK (v√©rifier) que les cl√©s que vous    |
  9824. |    |utilisez existent vraiment dans la table que vous r√©f√©encez, et qu'il n'efface par de |
  9825. |    |lignes dnas une table avec une d√©finition de cl√© √©trang√®re. Si vous utilisez vos cl√©s |
  9826. |    |de mani√®re habituelle, cela fonctionnera parfaitement.                                |
  9827. |    |                                                                                      |
  9828. |    |CREATE TABLE persons (                                                                |
  9829. |    |id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,                                         |
  9830. |    |name CHAR(60) NOT NULL,                                                               |
  9831. |    |PRIMARY KEY (id)                                                                      |
  9832. |    |);                                                                                    |
  9833. |    |                                                                                      |
  9834. |    |CREATE TABLE shirts (                                                                 |
  9835. |    |id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,                                         |
  9836. |    |style ENUM('t-shirt', 'polo', 'dress') NOT NULL,                                      |
  9837. |    |color ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL,                       |
  9838. |    |owner SMALLINT UNSIGNED NOT NULL REFERENCES persons,                                  |
  9839. |    |PRIMARY KEY (id)                                                                      |
  9840. |    |);                                                                                    |
  9841. |    |                                                                                      |
  9842. |    |INSERT INTO persons VALUES (NULL, 'Antonio Paz');                                     |
  9843. |    |                                                                                      |
  9844. |    |INSERT INTO shirts VALUES                                                             |
  9845. |    |(NULL, 'polo', 'blue', LAST_INSERT_ID()),                                             |
  9846. |    |(NULL, 'dress', 'white', LAST_INSERT_ID()),                                           |
  9847. |    |(NULL, 't-shirt', 'blue', LAST_INSERT_ID());                                          |
  9848. |    |                                                                                      |
  9849. |    |INSERT INTO persons VALUES (NULL, 'Lilliana Angelovska');                             |
  9850. |    |                                                                                      |
  9851. |    |INSERT INTO shirts VALUES                                                             |
  9852. |    |(NULL, 'dress', 'orange', LAST_INSERT_ID()),                                          |
  9853. |    |(NULL, 'polo', 'red', LAST_INSERT_ID()),                                              |
  9854. |    |(NULL, 'dress', 'blue', LAST_INSERT_ID()),                                            |
  9855. |    |(NULL, 't-shirt', 'white', LAST_INSERT_ID());                                         |
  9856. |    |                                                                                      |
  9857. |    |SELECT * FROM persons;                                                                |
  9858. |    |+----+---------------------+                                                          |
  9859. |    || id | name                |                                                          |
  9860. |    |+----+---------------------+                                                          |
  9861. |    ||  1 | Antonio Paz         |                                                          |
  9862. |    ||  2 | Lilliana Angelovska |                                                          |
  9863. |    |+----+---------------------+                                                          |
  9864. |    |                                                                                      |
  9865. |    |SELECT * FROM shirts;                                                                 |
  9866. |    |+----+---------+--------+-------+                                                     |
  9867. |    || id | style   | color  | owner |                                                     |
  9868. |    |+----+---------+--------+-------+                                                     |
  9869. |    ||  1 | polo    | blue   |     1 |                                                     |
  9870. |    ||  2 | dress   | white  |     1 |                                                     |
  9871. |    ||  3 | t-shirt | blue   |     1 |                                                     |
  9872. |    ||  4 | dress   | orange |     2 |                                                     |
  9873. |    ||  5 | polo    | red    |     2 |                                                     |
  9874. |    ||  6 | dress   | blue   |     2 |                                                     |
  9875. |    ||  7 | t-shirt | white  |     2 |                                                     |
  9876. |    |+----+---------+--------+-------+                                                     |
  9877. |    |                                                                                      |
  9878. |    |SELECT s.* FROM persons p, shirts s                                                   |
  9879. |    |WHERE p.name LIKE 'Lilliana%'                                                         |
  9880. |    |AND s.owner = p.id                                                                    |
  9881. |    |AND s.color <> 'white';                                                               |
  9882. |    |                                                                                      |
  9883. |    |+----+-------+--------+-------+                                                       |
  9884. |    || id | style | color  | owner |                                                       |
  9885. |    |+----+-------+--------+-------+                                                       |
  9886. |    ||  4 | dress | orange |     2 |                                                       |
  9887. |    ||  5 | polo  | red    |     2 |                                                       |
  9888. |    ||  6 | dress | blue   |     2 |                                                       |
  9889. |    |+----+-------+--------+-------+                                                       |
  9890. |    |8.4 Cr√©er et utiliser une base de donn√©es                                             |
  9891. |    |Si l'administrateur vous a cr√©√© une base de donn√©es pour vous, alors vous pouvez      |
  9892. |    |directement commencer √† l'utiliser. Sinon, il vous faut la cr√©er vous m√™me :          |
  9893. |    |                                                                                      |
  9894. |    |mysql> CREATE DATABASE menagerie;                                                     |
  9895. |    |Sous Unix, les noms de base de donn√©es sont sensibles √† la casse (contrairement aux   |
  9896. |    |mots cl√©s SQL), donc il faudra faire r√©f√©rence √† votre base de donn√©es sous le nom    |
  9897. |    |menagerie, et non pas Menagerie, MENAGERIE ou tout autre variante. Sous Windows, cette|
  9898. |    |restriction ne s'applique pas, m√™me si vous devez faire r√©f√©rence √† vos bases et      |
  9899. |    |tables de la m√™me mani√®re tout au long d'une m√™me commande).                          |
  9900. |    |Cr√©er une base de donn√©es ne la selectionne pas automatiquement. Il faut le faire     |
  9901. |    |explicitement. Pour faire de menagerie votre base courante, il faut utiliser la       |
  9902. |    |commande:                                                                             |
  9903. |    |                                                                                      |
  9904. |    |mysql> USE menagerie                                                                  |
  9905. |    |Database changed                                                                      |
  9906. |    |La base n'a besoin d'√™tre cr√©e qu'une seule fois, mais il faudra la s√©lectionner √†    |
  9907. |    |chaque fois que vous commencerez une session mysql. Il suffira alors d'utiliser la    |
  9908. |    |m√™me commande que ci-dessus. Alternativement, vous pouvez s√©lectionner une base d√®s la|
  9909. |    |connexion, en passant le nom de la base apr√®s tous les param√®tres de connexion : .    |
  9910. |    |                                                                                      |
  9911. |    |shell> mysql -h host -u user -p menagerie                                             |
  9912. |    |Enter password: ********                                                              |
  9913. |    |Remarquez bien que menagerie n'est pas dans votre mot de passe. Si vous voulez        |
  9914. |    |transmettre votre mot de passe apr√®s l'option ‚Äìp, vous devez le faire sans espace     |
  9915. |    |entre le mot de passe et l'option : (e.g., tel que -pmypassword, mais pas -p          |
  9916. |    |mypassword). Cependant, mettre votre mot de passe dans la ligne de connexion n'est pas|
  9917. |    |tr√®s recommand√©, car cela vous rend vuln√©rable √† tous les mouchards qui pourraient    |
  9918. |    |√™tre sur votre machine.                                                               |
  9919. |    |8.4.1 Cre√©er une table                                                                |
  9920. |    |Cr√©er une base de donn√©es est facile, mais, jusqu'√† pr√©sent, c'est vide. La commande  |
  9921. |    |SHOW TABLES vous dira :                                                               |
  9922. |    |                                                                                      |
  9923. |    |mysql> SHOW TABLES;                                                                   |
  9924. |    |Empty set (0.00 sec)                                                                  |
  9925. |    |La partie la plus difficile est le choix de la structure de votre base de donn√©es, et |
  9926. |    |des tables dont vous aurez besoin, et quelles colonnes seront n√©cessaires.            |
  9927. |    |Vous pouvez envisager de cr√©er une table qui cr√©era un enregistrement pour chacun de  |
  9928. |    |vos animaux. Cette table portera le nom de animaux et devrait contenir au minimum le  |
  9929. |    |nom de l'animal. Etant donn√© que le nom seul n'est pas vraiment int√©ressant, il faudra|
  9930. |    |qu'il contienne aussi d'autres informations. Par exemple, si plusieurs personnes de   |
  9931. |    |votre famille ont des animaux domestiques, vous voudrez garder la liste de chaque     |
  9932. |    |ma√Ætre. Vous voudrez peut √™tre aussi conserver des informations basiques telles que le|
  9933. |    |genre ou la race.                                                                     |
  9934. |    |Et l'age ? Cela pourrait √™tre int√©ressant √† conserver, mais ce n'est pas une bonne    |
  9935. |    |chose √† conserver dans une base de donn√©es. En effet, l'age change tous les jours, et |
  9936. |    |il faudrait changer constamment la base de donn√©es. Au contraire, il est bien mieux de|
  9937. |    |conserver la date de naissance. Alors, √† chaque fois que vous aurez besoins de l'age, |
  9938. |    |il suffira de faire la diff√©rence entre la date du jour et la date de naissance. MySQL|
  9939. |    |disposent de puissantes fonctions de calculs sur les dates. Enregistrer la date de    |
  9940. |    |naissance plut√¥t quel l'age a d'autres atouts :                                       |
  9941. |    |Vous pourrez utiliser la base de donn√©es pour garder en m√©moire les dates             |
  9942. |    |d'anniversaires de vos animaux (Si cela vous semble un peu idiot, remarquez bien que  |
  9943. |    |c'est exactement la m√™me chose que de conserver la date d'anniversaire de vos clients,|
  9944. |    |et de leur envoyer cette carte d'anniversaire √† la spontan√©it√© toute informatique).   |
  9945. |    |Vous pourrez faire des calculs d'age en relation avec d'autres dates. Par exemple, si |
  9946. |    |vous enregistrer la date de mort, vous pourrez facilement calculer √† quel age est mort|
  9947. |    |votre compagnon.                                                                      |
  9948. |    |Votre imagination fertile vous permettra s√ªrement d'imaginer une foule d'informations |
  9949. |    |utiles pour garnir la table animaux , mais les champs que nous venons d'identifier    |
  9950. |    |seront suffisant pour l'instant : le nom, le propri√©taire, la race, le genre, la date |
  9951. |    |de naissance et celle de mort.                                                        |
  9952. |    |Utilisez maintenant la fonction de cr√©ation de table pour cr√©er la votre :            |
  9953. |    |                                                                                      |
  9954. |    |mysql> CREATE TABLE animaux (nom VARCHAR(20), proprietaire VARCHAR(20),               |
  9955. |    |-> espece VARCHAR(20), genre CHAR(1), naissance DATE, mort DATE);                     |
  9956. |    |VARCHAR est un bon choix pour le nom, le propri√©taire et la race, car ces valeurs     |
  9957. |    |auront des longueurs variables. Les longueurs de ces colonnes n'ont pas besoin d'√™tre |
  9958. |    |toutes identiques, ni de valoir 20. Vous pouvez choisir n'importe quelle longueur     |
  9959. |    |entre 1 et 255, du moment que cela vous semble appropri√© (si vous vous trompez , vous |
  9960. |    |pourrez toujours agrandir le champs avec la fonction MySQL : ALTER TABLE ).           |
  9961. |    |Le genre des animaux peu prendre de nombreuses formes, comme par exemple "m" et "f",  |
  9962. |    |ou peut √™tre "male" et "femelle". Le plus simple sera d'utiliser les caract√®res "m" et|
  9963. |    |"f".                                                                                  |
  9964. |    |L'utilisation du type DATE pour repr√©senter les dates de naissance naissance et de    |
  9965. |    |mort mort est un choix √©vident.                                                       |
  9966. |    |Maintenant que vous avez cr√©er une table, , SHOW TABLES devrait √™tre plus loquace :   |
  9967. |    |                                                                                      |
  9968. |    |mysql> SHOW TABLES;                                                                   |
  9969. |    |+---------------------+                                                               |
  9970. |    || Tables in menagerie |                                                               |
  9971. |    |+---------------------+                                                               |
  9972. |    || animaux                 |                                                           |
  9973. |    |+---------------------+                                                               |
  9974. |    |Pour v√©rifier que la table a √©t√© cr√©√©e comme vous le d√©siriez, utilisez la commande   |
  9975. |    |DESCRIBE :                                                                            |
  9976. |    |                                                                                      |
  9977. |    |mysql> DESCRIBE animaux;                                                              |
  9978. |    |+----------------+-------------+------+-----+---------+-------+                       |
  9979. |    || Field          | Type        | Null | Key | Default | Extra |                       |
  9980. |    |+----------------+-------------+------+-----+---------+-------+                       |
  9981. |    || nom            | varchar(20) | YES  |     | NULL    |       |                       |
  9982. |    || proprietaire   | varchar(20) | YES  |     | NULL    |       |                       |
  9983. |    || espece         | varchar(20) | YES  |     | NULL    |       |                       |
  9984. |    || genre          | char(1)     | YES  |     | NULL    |       |                       |
  9985. |    || naissance      | date        | YES  |     | NULL    |       |                       |
  9986. |    || mort           | date        | YES  |     | NULL    |       |                       |
  9987. |    |+----------------+-------------+------+-----+---------+-------+                       |
  9988. |    |Vous pouvez utiliser DESCRIBE √† tout moment, par exemple, si vous oubliez les noms de |
  9989. |    |colonnes ou leur type.                                                                |
  9990. |    |8.4.2 Charger des donn√©es dans une table                                              |
  9991. |    |Apr√®s avoir cr√©√© votre table, il faut la remplir. La fonction LOAD DATA et INSERT     |
  9992. |    |remplissent cette fonction.                                                           |
  9993. |    |Supposons que les informations sur vos animaux soient d√©crites comme dans le tableau  |
  9994. |    |ci-dessous : Remaquez bien que MySQL utilise un format de date de type AAAA-MM-JJ ;   |
  9995. |    |qui n'est pas le format standard.)                                                    |
  9996. |    |Etant donn√© que vous commencez avec une table vide, le meilleur moyen de remplir cette|
  9997. |    |table est de cr√©er un fichier texte, chaque ligne contenant les informations d'un     |
  9998. |    |animal, puis de le charger directement dans la table avec une seule commande.         |
  9999. |    |Vous cr√©ez ainsi un fichier animaux.txt' contenant un enregistrement par ligne, avec  |
  10000. |    |des valeurs s√©par√©es par des tabulation, et dans le m√™me ordre que l'ordre dans lequel|
  10001. |    |les colonnes ont √©t√© list√©es dans la commande CREATE TABLE. Pour les valeurs          |
  10002. |    |manquantes (comme par exemple, les genres inconnues, ou les dates de mort des animaux |
  10003. |    |vivants), vous pouvez utiliser la valeur NULL . Vous la repr√©senterez dans le texte   |
  10004. |    |avec \N. Par exemple, l'enregistrement de l'oiseau Whistler ressemblera √† ceci :      |
  10005. |    |Pour charger ce fichier `animaux.txt' dans la table animaux , utilisez la commande    |
  10006. |    |suivante :                                                                            |
  10007. |    |                                                                                      |
  10008. |    |mysql> LOAD DATA LOCAL INFILE "animaux.txt" INTO TABLE animaux;                       |
  10009. |    |Vous pourriez sp√©cifier le type de chaque colonne et le marqueur de fin de ligne dans |
  10010. |    |la commande LOAD DATA si vous le d√©siriez, mais les valeurs par d√©faut (tabulations et|
  10011. |    |retour chariot) fonctionnent tr√®s bien ici.                                           |
  10012. |    |Pour n'ajouter qu'un seul enregistrement √† la fois, la fonction INSERT est plus       |
  10013. |    |pratique : Dans sa forme la plus simple, vous fournissez les valeurs dans l'ordre des |
  10014. |    |colonnes. Par exemple, si Diane recoit un hamster du nom de Puffball, vous pourriez   |
  10015. |    |ajouter un nouvel enregistrement avec la commande suivante :                          |
  10016. |    |                                                                                      |
  10017. |    |mysql> INSERT INTO animaux                                                            |
  10018. |    |-> VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);                       |
  10019. |    |Notez bien que les cha√Ænes et les dates sont sp√©cifi√©es avec des guillemets. De la    |
  10020. |    |m√™me fa√ßon, vous pouvez ins√©rer la valeur NULL directement pour repr√©senter une valeur|
  10021. |    |manquante. N'utilisez pas \N comme pour LOAD DATA.                                    |
  10022. |    |A partir de cet exemple, vous voyez que la commande INSERT requiert nettement plus de |
  10023. |    |frappe au clavier que la fonction LOAD DATA                                           |
  10024. |    |8.4.3 Lire des informations dans une table                                            |
  10025. |    |La commande SELECT sert √† lire des informations d'une table. La forme g√©n√©rale est la |
  10026. |    |suivante :                                                                            |
  10027. |    |                                                                                      |
  10028. |    |SELECT what_to_select                                                                 |
  10029. |    |FROM which_table                                                                      |
  10030. |    |WHERE conditions_to_satisfy                                                           |
  10031. |    |what_to_select indique ce que vous voulez affichier. Cela peut √™tre une liste de      |
  10032. |    |champs, ou bien le joker * qui signifie ``toutes les colonnes'' which_table indique   |
  10033. |    |dans quelle table lire les informations. La clause WHERE est optionnelle. Si elle est |
  10034. |    |pr√©sente, conditions_to_satisfy sp√©cifie les conditions qu'une ligne doit remplir pour|
  10035. |    |√™tre retenue, et retourn√©e.                                                           |
  10036. |    |8.4.3.1 Selection toutes les donn√©es                                                  |
  10037. |    |La forme la plus simple de SELECT permet d'obtenir la liste compl√®te des ligne d'une  |
  10038. |    |table :                                                                               |
  10039. |    |                                                                                      |
  10040. |    |mysql> SELECT * FROM animaux;                                                         |
  10041. |    |+----------+---------------+---------+--------+----------------+------------+         |
  10042. |    || nom      | proprietaire  | espece  | genre  | naissance      | mort       |         |
  10043. |    |+----------+---------------+---------+--------+----------------+------------+         |
  10044. |    || Fluffy   | Harold        | chat    | f      | 1993-02-04     | NULL       |         |
  10045. |    || Claws    | Gwen          | chat    | m      | 1994-03-17     | NULL       |         |
  10046. |    || Buffy    | Harold        | chien   | f      | 1989-05-13     | NULL       |         |
  10047. |    || Fang     | Benny         | chien   | m      | 1990-08-27     | NULL       |         |
  10048. |    || Bowser   | Diane         | chien   | m      | 1998-08-31     | 1995-07-29 |         |
  10049. |    || Chirpy   | Gwen          | oiseau  | f      | 1998-09-11     | NULL       |         |
  10050. |    || Whistler | Gwen          | oiseau  | NULL   | 1997-12-09     | NULL       |         |
  10051. |    || Slim     | Benny         | serpent | m      | 1996-04-29     | NULL       |         |
  10052. |    || Puffball | Diane         | hamster | f      | 1999-03-30     | NULL       |         |
  10053. |    |+----------+---------------+---------+--------+----------------+------------+         |
  10054. |    |Cette forme de SELECT est utile pour passer en revue une table, comme par exemple, une|
  10055. |    |table que vous viendriez de charger. Dans cet exemple, la table ci-dessus montre qu'il|
  10056. |    |y a eu une erreur dans le fichier. Bowser semble √™tre n√© apr√®s √™tre mort ! En         |
  10057. |    |consultant son dossier, vous vous apercevez que sa date correcte de naissance est     |
  10058. |    |1989, et non pas 1998.                                                                |
  10059. |    |Il y a au moins deux fa√ßons de corriger cette erreur :                                |
  10060. |    |Editez le fichier `animaux.txt' pour corriger l'erreur, puis effacer la table ,et la  |
  10061. |    |recharger avec la DELETE et LOAD DATA:                                                |
  10062. |    |                                                                                      |
  10063. |    |mysql> DELETE FROM animaux;                                                           |
  10064. |    |mysql> LOAD DATA LOCAL INFILE "animaux.txt" INTO TABLE animaux;                       |
  10065. |    |Cependant, en faisant cela, il vous faudra aussi ins√©rer de nouveau la fiche de       |
  10066. |    |Puffball.                                                                             |
  10067. |    |Ou bien, corriger seulement la fiche erron√©e avec une commande UPDATE :               |
  10068. |    |                                                                                      |
  10069. |    |mysql> UPDATE animaux SET naissance = "1989-08-31" WHERE nom = "Bowser";              |
  10070. |    |Dans cet exemple, on voit qu'il est facile de s√©lectionner toute la table. Mais       |
  10071. |    |g√©n√©ralement, ce n'est pas tr√®s pratique, surtout quand la table devient trop grande. |
  10072. |    |En g√©n√©ral, il s'agit de r√©ponse √† une question plus sp√©cifique, pour laquelle il va  |
  10073. |    |falloir ajouter des contraintes sur les informations √† retourner. Voyons maintenant   |
  10074. |    |quelques exemples de requ√™tes.                                                        |
  10075. |    |8.4.3.2 Selectioner une partie des lignes                                             |
  10076. |    |Il est bien s√ªr possible de ne s√©lectionner quelques lignes dans une table. Mettons   |
  10077. |    |que vous souhaitiez v√©rifier que la nouvelle date de naissance de Bowser's a bien √©t√© |
  10078. |    |prise en compte. Il suffit de s√©lectionner l'enregistrement de Bowser comme ceci :    |
  10079. |    |                                                                                      |
  10080. |    |mysql> SELECT * FROM animaux WHERE nom = "Bowser";                                    |
  10081. |    |+--------+--------------+---------+--------+----------------+------------+            |
  10082. |    || nom    | proprietaire | espece  | genre  | naissance      | mort       |            |
  10083. |    |+--------+--------------+---------+--------+----------------+------------+            |
  10084. |    || Bowser | Diane        | chien   | m      | 1989-08-31     | 1995-07-29 |            |
  10085. |    |+--------+--------------+---------+--------+----------------+------------+            |
  10086. |    |Le r√©sultat confirme bien que l'ann√©e de naissance est 1989, et non plus 1998.        |
  10087. |    |Les comparaisons de cha√Æne sont g√©n√©ralement insensible √† la casse : on aurait plus   |
  10088. |    |pr√©ciser le nom "bowser", "BOWSER", etc. Le r√©sultat aurait √©t√© le m√™me.              |
  10089. |    |Vous pouvez faire des recherches sur d'autres colonnes que nom. Par exemple, si vous  |
  10090. |    |voulez savoir quels animaux sont n√©s 1998, faites un test sur la colonne naissance :  |
  10091. |    |                                                                                      |
  10092. |    |mysql> SELECT * FROM animaux WHERE naissance >= "1998-1-1";                           |
  10093. |    |+----------+--------------+---------+--------+----------------+------------+          |
  10094. |    || nom      | proprietaire | espece  | genre  | naissance      | mort       |          |
  10095. |    |+----------+--------------+---------+--------+----------------+------------+          |
  10096. |    || Chirpy   | Gwen         | oiseau  | f      | 1998-09-11     | NULL       |          |
  10097. |    || Puffball | Diane        | hamster | f      | 1999-03-30     | NULL       |          |
  10098. |    |+----------+--------------+---------+--------+----------------+------------+          |
  10099. |    |Vous pouvez aussi combiner les conditions : par exemple, pour rechercher les chiennes |
  10100. |    |                                                                                      |
  10101. |    |mysql> SELECT * FROM animaux WHERE espece = "chien" AND genre = "f";                  |
  10102. |    |+----------+--------------+---------+--------+----------------+------------+          |
  10103. |    || nom      | proprietaire | espece  | genre  | naissance      | mort       |          |
  10104. |    |+----------+--------------+---------+--------+----------------+------------+          |
  10105. |    || Buffy    | Harold       | chien   | f      | 1989-05-13     | NULL       |          |
  10106. |    |+----------+--------------+---------+--------+----------------+------------+          |
  10107. |    |La requ√™te pr√©c√©dente utilisait l'op√©rateur logique AND (ET) Il y a aussi un op√©rateur|
  10108. |    |OR (OU) :                                                                             |
  10109. |    |                                                                                      |
  10110. |    |mysql> SELECT * FROM animaux WHERE espece = "serpent" OR espece = "oiseau";           |
  10111. |    |+----------+--------------+---------+--------+----------------+------------+          |
  10112. |    || nom      | proprietaire | espece | genre  | naissance      | mort       |           |
  10113. |    |+----------+--------------+---------+--------+----------------+------------+          |
  10114. |    || Chirpy   | Gwen         | oiseau  | f      | 1998-09-11     | NULL       |          |
  10115. |    || Whistler | Gwen         | oiseau  | NULL   | 1997-12-09     | NULL       |          |
  10116. |    || Slim     | Benny        | serpent | m      | 1996-04-29     | NULL       |          |
  10117. |    |+----------+--------------+---------+--------+----------------+------------+          |
  10118. |    |AND et OR peut √™tre utilis√©s dans la m√™me requ√™te. C'est alors une bonne id√©e         |
  10119. |    |d'utiliser des parenth√®ses pour pr√©ciser les regroupements :                          |
  10120. |    |                                                                                      |
  10121. |    |mysql> SELECT * FROM animaux WHERE (espece = "chat" AND genre = "m")                  |
  10122. |    |-> OR (espece = "chien" AND genre = "f");                                             |
  10123. |    |+----------+--------------+---------+--------+----------------+------------+          |
  10124. |    || nom      | proprietaire | espece  | genre  | naissance      | mort       |          |
  10125. |    |+----------+--------------+---------+--------+----------------+------------+          |
  10126. |    || Claws    | Gwen         | chat    | m      | 1994-03-17     | NULL       |          |
  10127. |    || Buffy    | Harold       | chien   | f      | 1989-05-13     | NULL       |          |
  10128. |    |+----------+--------------+---------+--------+----------------+------------+          |
  10129. |    |8.4.3.3 Selectionner une colonne sp√©cifique                                           |
  10130. |    |Il se peut que vous n'ayez pas besoin de toutes les colonnes de votre table, mais     |
  10131. |    |juste de quelques colonnes. Il suffit alors de citer les colonnes qui vous            |
  10132. |    |int√©ressent. Par exemple, si vous ne voulez voir que les noms des animaux, avec leur  |
  10133. |    |date de naissance, il suffit de ne s√©lectionner que les colonnes nom et naissance:    |
  10134. |    |                                                                                      |
  10135. |    |mysql> SELECT nom, naissance FROM animaux;                                            |
  10136. |    |+----------+------------+                                                             |
  10137. |    || nom      | naissance  |                                                             |
  10138. |    |+----------+------------+                                                             |
  10139. |    || Fluffy   | 1993-02-04 |                                                             |
  10140. |    || Claws    | 1994-03-17 |                                                             |
  10141. |    || Buffy    | 1989-05-13 |                                                             |
  10142. |    || Fang     | 1990-08-27 |                                                             |
  10143. |    || Bowser   | 1989-08-31 |                                                             |
  10144. |    || Chirpy   | 1998-09-11 |                                                             |
  10145. |    || Whistler | 1997-12-09 |                                                             |
  10146. |    || Slim     | 1996-04-29 |                                                             |
  10147. |    || Puffball | 1999-03-30 |                                                             |
  10148. |    |+----------+------------+                                                             |
  10149. |    |Pour lister les propri√©taires d'animaux, utilisez la requ√™te suivante :               |
  10150. |    |                                                                                      |
  10151. |    |mysql> SELECT proprietaire FROM animaux;                                              |
  10152. |    |+---------------+                                                                     |
  10153. |    || proprietaire  |                                                                     |
  10154. |    |+---------------+                                                                     |
  10155. |    || Harold        |                                                                     |
  10156. |    || Gwen          |                                                                     |
  10157. |    || Harold        |                                                                     |
  10158. |    || Benny         |                                                                     |
  10159. |    || Diane         |                                                                     |
  10160. |    || Gwen          |                                                                     |
  10161. |    || Gwen          |                                                                     |
  10162. |    || Benny         |                                                                     |
  10163. |    || Diane         |                                                                     |
  10164. |    |+---------------+                                                                     |
  10165. |    |Cependant, vous pouvez remarquer que cette requ√™te simple affiche le champs           |
  10166. |    |proprietaire de chaque ligne, ce qui conduit √† avoir des redondances (comme Gwen).    |
  10167. |    |Pour ne les voir appara√Ætre qu'une seule fois, il faut utiliser le mot cl√© DISTINCT:  |
  10168. |    |                                                                                      |
  10169. |    |mysql> SELECT DISTINCT proprietaire FROM animaux;                                     |
  10170. |    |+---------------+                                                                     |
  10171. |    || proprietaire  |                                                                     |
  10172. |    |+---------------+                                                                     |
  10173. |    || Benny         |                                                                     |
  10174. |    || Diane         |                                                                     |
  10175. |    || Gwen          |                                                                     |
  10176. |    || Harold        |                                                                     |
  10177. |    |+---------------+                                                                     |
  10178. |    |Vous pouvez encore combiner une clause WHERE lors de la selection de lignes et de     |
  10179. |    |colonnes Par exemple, pour obtenir les dates de naissances des chiens et des chats,   |
  10180. |    |utilisez la requ√™te suivante :                                                        |
  10181. |    |                                                                                      |
  10182. |    |mysql> SELECT nom, espece, naissance FROM animaux                                     |
  10183. |    |-> WHERE espece = "chien" OR espece = "chat";                                         |
  10184. |    |+--------+---------+------------+                                                     |
  10185. |    || nom    | espece  | naissance  |                                                     |
  10186. |    |+--------+---------+------------+                                                     |
  10187. |    || Fluffy | chat    | 1993-02-04 |                                                     |
  10188. |    || Claws  | chat    | 1994-03-17 |                                                     |
  10189. |    || Buffy  | chien   | 1989-05-13 |                                                     |
  10190. |    || Fang   | chien   | 1990-08-27 |                                                     |
  10191. |    || Bowser | chien   | 1989-08-31 |                                                     |
  10192. |    |+--------+---------+------------+                                                     |
  10193. |    |8.4.3.4 Trier les lignes                                                              |
  10194. |    |Vous avez pu remarquer que les lignes pr√©c√©dentes ont √©t√© affich√©es dans un ordre     |
  10195. |    |al√©atoire. Comme il est plus facile d'analyser une requ√™te dont les lignes ont √©t√©    |
  10196. |    |tri√©es, il vaut mieux trier ces lignes avec la clause : ORDER BY :                    |
  10197. |    |Voici la liste des dates de naissances des animaux, class√©es par date :               |
  10198. |    |                                                                                      |
  10199. |    |mysql> SELECT nom, naissance FROM animaux ORDER BY naissance;                         |
  10200. |    |+----------+------------+                                                             |
  10201. |    || nom      | naissance  |                                                             |
  10202. |    |+----------+------------+                                                             |
  10203. |    || Buffy    | 1989-05-13 |                                                             |
  10204. |    || Bowser   | 1989-08-31 |                                                             |
  10205. |    || Fang     | 1990-08-27 |                                                             |
  10206. |    || Fluffy   | 1993-02-04 |                                                             |
  10207. |    || Claws    | 1994-03-17 |                                                             |
  10208. |    || Slim     | 1996-04-29 |                                                             |
  10209. |    || Whistler | 1997-12-09 |                                                             |
  10210. |    || Chirpy   | 1998-09-11 |                                                             |
  10211. |    || Puffball | 1999-03-30 |                                                             |
  10212. |    |+----------+------------+                                                             |
  10213. |    |Pour inverser l'ordre de tri, ajoutez le mot cl√© DESC (descendant) apr√®s le nom de la |
  10214. |    |colonne que vous classez.                                                             |
  10215. |    |                                                                                      |
  10216. |    |mysql> SELECT nom, naissance FROM animaux ORDER BY naissance DESC;                    |
  10217. |    |+----------+------------+                                                             |
  10218. |    || nom      | naissance  |                                                             |
  10219. |    |+----------+------------+                                                             |
  10220. |    || Puffball | 1999-03-30 |                                                             |
  10221. |    || Chirpy   | 1998-09-11 |                                                             |
  10222. |    || Whistler | 1997-12-09 |                                                             |
  10223. |    || Slim     | 1996-04-29 |                                                             |
  10224. |    || Claws    | 1994-03-17 |                                                             |
  10225. |    || Fluffy   | 1993-02-04 |                                                             |
  10226. |    || Fang     | 1990-08-27 |                                                             |
  10227. |    || Bowser   | 1989-08-31 |                                                             |
  10228. |    || Buffy    | 1989-05-13 |                                                             |
  10229. |    |+----------+------------+                                                             |
  10230. |    |Vous pouvez faire des classements avec plusieurs crit√®res de tri. Par exemple, pour   |
  10231. |    |trier les animaux pas esp√®ce, puis par naissance pour chaque type d'animaux, utilisez |
  10232. |    |la requ√™te suivante :                                                                 |
  10233. |    |                                                                                      |
  10234. |    |mysql> SELECT nom, espece, naissance FROM animaux ORDER BY espece, naissance DESC;    |
  10235. |    |+----------+---------+------------+                                                   |
  10236. |    || nom      | espece  | naissance  |                                                   |
  10237. |    |+----------+---------+------------+                                                   |
  10238. |    || Chirpy   | oiseau  | 1998-09-11 |                                                   |
  10239. |    || Whistler | oiseau  | 1997-12-09 |                                                   |
  10240. |    || Claws    | chat    | 1994-03-17 |                                                   |
  10241. |    || Fluffy   | chat    | 1993-02-04 |                                                   |
  10242. |    || Fang     | chien   | 1990-08-27 |                                                   |
  10243. |    || Bowser   | chien   | 1989-08-31 |                                                   |
  10244. |    || Buffy    | chien   | 1989-05-13 |                                                   |
  10245. |    || Puffball | hamster | 1999-03-30 |                                                   |
  10246. |    || Slim     | serpent | 1996-04-29 |                                                   |
  10247. |    |+----------+---------+------------+                                                   |
  10248. |    |Notez bien que le mot cl√© DESC ne s'applique qu'√† la colonne le pr√©c√©dent             |
  10249. |    |imm√©diatement (naissance); espece √©tant tri√© dans l'ordre ascendant.                  |
  10250. |    |8.4.3.5 Calculs sur les dates                                                         |
  10251. |    |MySQL poss√®de de puissantes fonctions pour effectuer des calculs sur les dates, comme |
  10252. |    |par exemple, calculer un age, ou extraire des parties de date.                        |
  10253. |    |Pour d√©terminer l'age de chacun des animaux, il faut calculer la diff√©rence entre la  |
  10254. |    |naissance et la date courante. Puis, convertir ces deux dates en jours, et diviser le |
  10255. |    |tout par 365, pour avoir le nombre d'ann√©e.                                           |
  10256. |    |                                                                                      |
  10257. |    |mysql> SELECT nom, (TO_DAYS(NOW())-TO_DAYS(naissance))/365 FROM animaux;              |
  10258. |    |+----------+-----------------------------------------+                                |
  10259. |    || nom      | (TO_DAYS(NOW())-TO_DAYS(naissance))/365 |                                |
  10260. |    |+----------+-----------------------------------------+                                |
  10261. |    || Fluffy   |                                    6.15 |                                |
  10262. |    || Claws    |                                    5.04 |                                |
  10263. |    || Buffy    |                                    9.88 |                                |
  10264. |    || Fang     |                                    8.59 |                                |
  10265. |    || Bowser   |                                    9.58 |                                |
  10266. |    || Chirpy   |                                    0.55 |                                |
  10267. |    || Whistler |                                    1.30 |                                |
  10268. |    || Slim     |                                    2.92 |                                |
  10269. |    || Puffball |                                    0.00 |                                |
  10270. |    |+----------+-----------------------------------------+                                |
  10271. |    |Bien que cette requ√™te fasse bien ce qu'on lui demande, il y a de la place pour       |
  10272. |    |quelques am√©liorations. En premier lieu, les r√©sultats gagneraient √† √™tre class√©s. De |
  10273. |    |plus, le titre de la colonne n'est pas tr√®s explicite.                                |
  10274. |    |Le premier probl√®me peut √™tre r√©solu avec une clause ORDER BY nom qui va classer par  |
  10275. |    |ordre alphab√©tique. Pour r√©gler le probl√®me du titre, nous allons utiliser un alias.  |
  10276. |    |                                                                                      |
  10277. |    |mysql> SELECT nom, (TO_DAYS(NOW())-TO_DAYS(naissance))/365 AS age                     |
  10278. |    |-> FROM animaux ORDER BY nom;                                                         |
  10279. |    |+----------+------+                                                                   |
  10280. |    || nom      | age  |                                                                   |
  10281. |    |+----------+------+                                                                   |
  10282. |    || Bowser   | 9.58 |                                                                   |
  10283. |    || Buffy    | 9.88 |                                                                   |
  10284. |    || Chirpy   | 0.55 |                                                                   |
  10285. |    || Claws    | 5.04 |                                                                   |
  10286. |    || Fang     | 8.59 |                                                                   |
  10287. |    || Fluffy   | 6.15 |                                                                   |
  10288. |    || Puffball | 0.00 |                                                                   |
  10289. |    || Slim     | 2.92 |                                                                   |
  10290. |    || Whistler | 1.30 |                                                                   |
  10291. |    |+----------+------+                                                                   |
  10292. |    |Pour trier les r√©sultats par age plut√¥t que par nom nom, il suffit de le mettre dans  |
  10293. |    |la clause ORDER BY :                                                                  |
  10294. |    |                                                                                      |
  10295. |    |mysql>  SELECT nom, (TO_DAYS(NOW())-TO_DAYS(naissance))/365 AS age                    |
  10296. |    |->  FROM animaux ORDER BY age;                                                        |
  10297. |    |+----------+------+                                                                   |
  10298. |    || nom     | age  |                                                                    |
  10299. |    |+----------+------+                                                                   |
  10300. |    || Puffball | 0.00 |                                                                   |
  10301. |    || Chirpy   | 0.55 |                                                                   |
  10302. |    || Whistler | 1.30 |                                                                   |
  10303. |    || Slim     | 2.92 |                                                                   |
  10304. |    || Claws    | 5.04 |                                                                   |
  10305. |    || Fluffy   | 6.15 |                                                                   |
  10306. |    || Fang     | 8.59 |                                                                   |
  10307. |    || Bowser   | 9.58 |                                                                   |
  10308. |    || Buffy    | 9.88 |                                                                   |
  10309. |    |+----------+------+                                                                   |
  10310. |    |Une requ√™te similaire pourrait calculer l'age de mort des animaux morts. Pour cela,   |
  10311. |    |vous allez d√©terminer les animaux morts, en testant la colonne mort √† NULL. Puis, pour|
  10312. |    |les valeurs non-NULL, calculez l'age avec les colonnes mort et naissance:             |
  10313. |    |                                                                                      |
  10314. |    |mysql>  SELECT nom, naissance, mort, (TO_DAYS(mort)-TO_DAYS(naissance))/365 AS age    |
  10315. |    |->  FROM animaux WHERE mort IS NOT NULL ORDER BY age;                                 |
  10316. |    |+--------+------------+------------+------+                                           |
  10317. |    || nom    | naissance  | mort       | age  |                                           |
  10318. |    |+--------+------------+------------+------+                                           |
  10319. |    || Bowser | 1989-08-31 | 1995-07-29 | 5.91 |                                           |
  10320. |    |+--------+------------+------------+------+                                           |
  10321. |    |La requ√™te utilise mort IS NOT NULL plut√¥t que mort != NULL car NULL est une valeur   |
  10322. |    |sp√©ciale. Cela est expliqu√© plus loin. Allez 8.4.3.6 Travailler avec la valeur NULL.  |
  10323. |    |Et comment rechercher les animaux dont l'anniversaire sera le mois prochain ? Pour ce |
  10324. |    |genre de calculs, year et day sont inutiles, il suffit d'extraire le mois de la       |
  10325. |    |colonne naissance . MySQL fournit plusieurs fonctions d'extraction comme par exemple  |
  10326. |    |YEAR(), MONTH() et DAY(). MONTH() est le plus appropri√© ici. Pour voir comment cela   |
  10327. |    |fonction, ex√©cutez la commande suivante, qui naissance et MONTH(naissance):           |
  10328. |    |                                                                                      |
  10329. |    |mysql> SELECT nom, naissance, MONTH(naissance) FROM animaux;                          |
  10330. |    |+----------+------------+------------------+                                          |
  10331. |    || nom      | naissance  | MONTH(naissance) |                                          |
  10332. |    |+----------+------------+------------------+                                          |
  10333. |    || Fluffy   | 1993-02-04 |                2 |                                          |
  10334. |    || Claws    | 1994-03-17 |                3 |                                          |
  10335. |    || Buffy    | 1989-05-13 |                5 |                                          |
  10336. |    || Fang     | 1990-08-27 |                8 |                                          |
  10337. |    || Bowser   | 1989-08-31 |                8 |                                          |
  10338. |    || Chirpy   | 1998-09-11 |                9 |                                          |
  10339. |    || Whistler | 1997-12-09 |               12 |                                          |
  10340. |    || Slim     | 1996-04-29 |                4 |                                          |
  10341. |    || Puffball | 1999-03-30 |                3 |                                          |
  10342. |    |+----------+------------+------------------+                                          |
  10343. |    |Trouver les animaux dont la date de naissance est le mois prochain est facile. En     |
  10344. |    |supposant que nous soyons au mois d'avril. Alors, le mois est le 4, et il suffit de   |
  10345. |    |rechercher les animaux n√©s au mois de May (5), comme ceci :                           |
  10346. |    |                                                                                      |
  10347. |    |mysql> SELECT nom, naissance FROM animaux WHERE MONTH(naissance) = 5;                 |
  10348. |    |+-------+----------------+                                                            |
  10349. |    || nom   | naissance      |                                                            |
  10350. |    |+-------+----------------+                                                            |
  10351. |    || Buffy | 1989-05-13     |                                                            |
  10352. |    |+-------+----------------+                                                            |
  10353. |    |Il y a bien sur un cas particulier: d√©cembre. Il ne suffit pas seulement d'ajouter 1 √†|
  10354. |    |num√©ro du mois courant et de chercher les dates d'anniversaires correspondantes, car  |
  10355. |    |personne ne nait au mois 13. A la place, il faut chercher les animaux qui sont n√©s au |
  10356. |    |mois de janvier.                                                                      |
  10357. |    |Vous pourriez √©crire une requ√™te qui fonctionne, quelque soit le mois courant. De     |
  10358. |    |cette fa√ßon, vous n'aurez pas √† utiliser un num√©ro particulier de mois dans la        |
  10359. |    |requ√™te. DATE_ADD() vous permettra d'ajouter une dur√©e de temps √† une date. Si vous   |
  10360. |    |ajoutez un mois √† la date de NOW(), puis vous en sortez le mois avec MONTH(), le      |
  10361. |    |r√©sultat sera bien le mois suivant.                                                   |
  10362. |    |                                                                                      |
  10363. |    |mysql> SELECT nom, naissance FROM animaux                                             |
  10364. |    |-> WHERE MONTH(naissance) = MONTH(DATE_ADD(NOW(), INTERVAL 1 MONTH));                 |
  10365. |    |Une autre mani√®re de faire serait d'ajouter 1 au mois courant, puis d'utiliser la     |
  10366. |    |(MOD) pour ``boucler'' √† la fin de l'ann√©e, et faire correspondre janvier et d√©cembre |
  10367. |    |:                                                                                     |
  10368. |    |                                                                                      |
  10369. |    |mysql> SELECT nom, naissance FROM animaux                                             |
  10370. |    |-> WHERE MONTH(naissance) = MOD(MONTH(NOW()),12) + 1;                                 |
  10371. |    |8.4.3.6 Travailler avec la valeur NULL                                                |
  10372. |    |La valeur NULL peut se comporter de mani√®re surprenante si vous l'utilisez.           |
  10373. |    |Conceptuellement, NULL signifie ``valeur manquante '' ou `` valeur inconnue'' et il   |
  10374. |    |est trait√© de mani√®re l√©g√®rement diff√©rente des autres valeurs. Pour tester une valeur|
  10375. |    |√† NULL, vous ne pouvez pas utiliser les op√©rateurs de comparaison habituels, tels que |
  10376. |    |=, < or !=. Pour vous en convaincre, essayez la requ√™te suivante :                    |
  10377. |    |                                                                                      |
  10378. |    |mysql> SELECT 1 = NULL, 1 != NULL, 1 < NULL, 1 > NULL;                                |
  10379. |    |+----------+-----------+----------+----------+                                        |
  10380. |    || 1 = NULL | 1 != NULL | 1 < NULL | 1 > NULL |                                        |
  10381. |    |+----------+-----------+----------+----------+                                        |
  10382. |    ||     NULL |      NULL |     NULL |     NULL |                                        |
  10383. |    |+----------+-----------+----------+----------+                                        |
  10384. |    |Clairement, vous n'obtiendrez aucun r√©sultat significatif de ces comparaisons.        |
  10385. |    |Utilisez les op√©rateurs IS NULL et IS NOT NULL:                                       |
  10386. |    |                                                                                      |
  10387. |    |mysql> SELECT 1 IS NULL, 1 IS NOT NULL;                                               |
  10388. |    |+-----------+---------------+                                                         |
  10389. |    || 1 IS NULL | 1 IS NOT NULL |                                                         |
  10390. |    |+-----------+---------------+                                                         |
  10391. |    ||         0 |             1 |                                                         |
  10392. |    |+-----------+---------------+                                                         |
  10393. |    |Avec MySQL, 0 signifie faux et 1 signifie vrai.                                       |
  10394. |    |Cette gestion sp√©ciale de NULL explique pourquoi, dans la section pr√©c√©dente, il √©tait|
  10395. |    |n√©cessaire de savoir quels animaux √©taient encore vivant, en utilisant mort IS NOT    |
  10396. |    |NULL √† la place de mort != NULL.                                                      |
  10397. |    |8.4.3.7 Recherche de valeurs                                                          |
  10398. |    |MySQL propose les m√©thodes de recherche standard du SQL, mais aussi les recherches √†  |
  10399. |    |base d'expression r√©guli√®re, similaire √† celle utilis√©es dans les utilitaires Unix,   |
  10400. |    |tels que vi, grep et sed.                                                             |
  10401. |    |Les m√©thodes de recherche SQL vous permettent d'utiliser le caract√®re ``_'' pour      |
  10402. |    |remplacer n'importe quel caract√®re unique, et ``%'' pour remplacer n'importe quel     |
  10403. |    |nombre de caract√®res (y compris le caract√®re 0). Les recherches SQL sont insensibles √†|
  10404. |    |la casse. Reportez vous aux exemples ci-dessous. Remarquez bien que l'on n'utilise pas|
  10405. |    |= ou != mais plut√¥t LIKE ou NOT LIKE.                                                 |
  10406. |    |Recherche des noms commen√ßant par ``b'':                                              |
  10407. |    |                                                                                      |
  10408. |    |mysql> SELECT * FROM animaux WHERE nom LIKE "b%";                                     |
  10409. |    |+--------+---------------+--------+--------+----------------+------------+            |
  10410. |    || nom    | proprietaire  | espece | genre  | naissance      | mort       |            |
  10411. |    |+--------+---------------+--------+--------+----------------+------------+            |
  10412. |    || Buffy  | Harold        | chien  | f      | 1989-05-13     | NULL       |            |
  10413. |    || Bowser | Diane         | chien  | m      | 1989-08-31     | 1995-07-29 |            |
  10414. |    |+--------+---------------+--------+--------+----------------+------------+            |
  10415. |    |Recherche des noms finissant par :``fy'':                                             |
  10416. |    |                                                                                      |
  10417. |    |mysql> SELECT * FROM animaux WHERE nom LIKE "%fy";                                    |
  10418. |    |+--------+---------------+--------+--------+----------------+------------+            |
  10419. |    || nom    | proprietaire  | espece | genre  | naissance      | mort       |            |
  10420. |    |+--------+---------------+--------+--------+----------------+------------+            |
  10421. |    || Fluffy | Harold        | chat   | f      | 1993-02-04     | NULL       |            |
  10422. |    || Buffy  | Harold        | chien  | f      | 1989-05-13     | NULL       |            |
  10423. |    |+--------+---------------+--------+--------+----------------+------------+            |
  10424. |    |Recherche des noms contenant ``w'':                                                   |
  10425. |    |                                                                                      |
  10426. |    |mysql> SELECT * FROM animaux WHERE nom LIKE "%w%";                                    |
  10427. |    |+----------+---------------+--------+--------+----------------+------------+          |
  10428. |    || nom      | proprietaire  | espece | genre  | naissance      | mort       |          |
  10429. |    |+----------+---------------+--------+--------+----------------+------------+          |
  10430. |    || Claws    | Gwen          | chat   | m      | 1994-03-17     | NULL       |          |
  10431. |    || Bowser   | Diane         | chien  | m      | 1989-08-31     | 1995-07-29 |          |
  10432. |    || Whistler | Gwen          | oiseau | NULL   | 1997-12-09     | NULL       |          |
  10433. |    |+----------+---------------+--------+--------+----------------+------------+          |
  10434. |    |Recherche des noms contenant exactement 5 caract√®res, utilisez le caract√®re ``_'' :   |
  10435. |    |                                                                                      |
  10436. |    |mysql> SELECT * FROM animaux WHERE nom LIKE "_____";                                  |
  10437. |    |+----------+---------------+--------+--------+----------------+------------+          |
  10438. |    || nom      | proprietaire  | espece | genre  | naissance      | mort       |          |
  10439. |    |+----------+---------------+--------+--------+----------------+------------+          |
  10440. |    || Claws    | Gwen          | chat   | m      | 1994-03-17     | NULL       |          |
  10441. |    || Buffy    | Harold        | chien  | f      | 1989-05-13     | NULL       |          |
  10442. |    |+----------+---------------+--------+--------+----------------+------------+          |
  10443. |    |L'autre type de recherche disponible avec MySQL est les expression r√©guli√®res. Pour   |
  10444. |    |utiliser ce type de recherche, il faut ajouter les mots cl√© REGEXP et NOT REGEXP (ou  |
  10445. |    |RLIKE t NOT RLIKE, qui sont des synonymes).                                           |
  10446. |    |Les caract√©ristiques des expressions r√©guli√®res sont :                                |
  10447. |    |``.'' remplace n'importe quel caract√®re qui n'appara√Æt qu'une fois.                   |
  10448. |    |Une classe de caract√®res ``[...]'' remplace n'importe quel caract√®re qui appara√Æt dans|
  10449. |    |les crochets. Par exemple, ``[abc]'' peut remplacer ``a'', ``b'' ou ``c''. Pour un    |
  10450. |    |intervalle de caract√®res, utilisez le tiret :. ``[a-z]'' remplace n'importe quelle    |
  10451. |    |lettre minuscule, et ``[0-9]'' remplace n'importe quel nombre.                        |
  10452. |    |``*'' remplace z√©ro ou plus occurrences du caract√®re le pr√©c√©dent imm√©diatement. Par  |
  10453. |    |exemple, ``x*'' remplace n'importe quelle nombre de ``x''. ``[0-9]*'' `'' remplace    |
  10454. |    |n'importe quelle nombre de chiffres, et ``.*'' remplace n'importe quelle nombre de    |
  10455. |    |caract√®res.                                                                           |
  10456. |    |Les expression r√©guli√®res sont sensibles √† la casse, mais vous pouvez utiliser une    |
  10457. |    |classe de caract√®res pour les rendre insensible √† la casse. Par exemple, ``[aA]''     |
  10458. |    |remplace n'importe quel ``a'', minuscule ou majuscule, et ``[a-zA-Z]'' remplace       |
  10459. |    |n'importe quelle lettre, minuscule ou majuscule.                                      |
  10460. |    |La recherche est positive, si elle est v√©rifi√©e √† n'importe quel endroit de la valeur |
  10461. |    |(en SQL, ce n'est vrai que sur la valeur enti√®re).                                    |
  10462. |    |Pour contraindre une expression au d√©but ou √† la fin de la valeur, utilisez les       |
  10463. |    |caract√®res sp√©ciaux ``^'' pour le d√©but ou ``$'' pour la fin.                         |
  10464. |    |Pour illustrer le fonctionnement des expressions r√©guli√®res, les requ√™tes pr√©c√©dentes |
  10465. |    |ont √©t√© r√©√©crites en utilisant les expressions r√©guli√®res.                            |
  10466. |    |Recherche des noms commen√ßant par ``b'': on utilise ``^'' pour indiquer le d√©but de la|
  10467. |    |valeur, et ``[bB]'' pour rechercher indiff√©remment, ``b'' minuscule ou majuscule.     |
  10468. |    |                                                                                      |
  10469. |    |mysql> SELECT * FROM animaux WHERE nom REGEXP "^[bB]";                                |
  10470. |    |+--------+---------------+--------+--------+----------------+------------+            |
  10471. |    || nom    | proprietaire  | espece | genre  | naissance      | mort       |            |
  10472. |    |+--------+---------------+--------+--------+----------------+------------+            |
  10473. |    || Buffy  | Harold        | chien  | f      | 1989-05-13     | NULL       |            |
  10474. |    || Bowser | Diane         | chien  | m      | 1989-08-31     | 1995-07-29 |            |
  10475. |    |+--------+---------------+--------+--------+----------------+------------+            |
  10476. |    |Recherche des noms finissant par :``fy'': on utilise ``$'' pour indiquer la fin de la |
  10477. |    |valeur                                                                                |
  10478. |    |                                                                                      |
  10479. |    |+--------+---------------+--------+--------+----------------+------------+            |
  10480. |    || nom    | proprietaire  | espece | genre  | naissance      | mort       |            |
  10481. |    |+--------+---------------+--------+--------+----------------+------------+            |
  10482. |    || Fluffy | Harold        | chat   | f      | 1993-02-04     | NULL       |            |
  10483. |    || Buffy  | Harold        | chien  | f      | 1989-05-13     | NULL       |            |
  10484. |    |+--------+---------------+--------+--------+----------------+------------+            |
  10485. |    |Recherche des noms contenant ``w'':, on utilise ``[wW]'' pour rechercher les ``w',    |
  10486. |    |'minuscule ou majuscule :                                                             |
  10487. |    |                                                                                      |
  10488. |    |mysql> SELECT * FROM animaux WHERE nom REGEXP "[wW]";                                 |
  10489. |    |+----------+---------------+--------+--------+----------------+------------+          |
  10490. |    || nom      | proprietaire  | espece | genre  | naissance      | mort       |          |
  10491. |    |+----------+---------------+--------+--------+----------------+------------+          |
  10492. |    || Claws    | Gwen          | chat   | m      | 1994-03-17     | NULL       |          |
  10493. |    || Bowser   | Diane         | chien  | m      | 1989-08-31     | 1995-07-29 |          |
  10494. |    || Whistler | Gwen          | oiseau | NULL   | 1997-12-09     | NULL       |          |
  10495. |    |+----------+---------------+--------+--------+----------------+------------+          |
  10496. |    |Etant donn√© qu'une expression r√©guli√®re est vrai si elle est vrai sur une partie d'une|
  10497. |    |valeur, il n'est pas besoin de caract√®res sp√©ciaux.                                   |
  10498. |    |Recherche des noms contenant exactement 5 caract√®res, utilisez ``^'' et ``$'' pour    |
  10499. |    |indiquer le d√©but et la fin de la cha√Æne, et 5 fois ``.'' pour les 5 caract√®res.      |
  10500. |    |                                                                                      |
  10501. |    |mysql> SELECT * FROM animaux WHERE nom REGEXP "^.....$";                              |
  10502. |    |+----------+---------------+--------+--------+----------------+------------+          |
  10503. |    || nom      | proprietaire  | espece | genre  | naissance      | mort       |          |
  10504. |    |+----------+---------------+--------+--------+----------------+------------+          |
  10505. |    || Claws    | Gwen          | chat   | m      | 1994-03-17     | NULL       |          |
  10506. |    || Buffy    | Harold        | chien  | f      | 1989-05-13     | NULL       |          |
  10507. |    |+----------+---------------+--------+--------+----------------+------------+          |
  10508. |    |Vous auriez pu aussi utiliser l'op√©rateur ``{n''} `` n-fois'':                        |
  10509. |    |                                                                                      |
  10510. |    |mysql> SELECT * FROM animaux WHERE nom REGEXP "^.{5}$";                               |
  10511. |    |+----------+---------------+--------+--------+----------------+------------+          |
  10512. |    || nom      | proprietaire  | espece | genre  | naissance      | mort       |          |
  10513. |    |+----------+---------------+--------+--------+----------------+------------+          |
  10514. |    || Claws    | Gwen          | chat   | m      | 1994-03-17     | NULL       |          |
  10515. |    || Buffy    | Harold        | chien  | f      | 1989-05-13     | NULL       |          |
  10516. |    |+----------+---------------+--------+--------+----------------+------------+          |
  10517. |    |8.4.3.8 Compter les lignes                                                            |
  10518. |    |Les bases de donn√©es sont souvent utilis√©es pour r√©pondre aux questions du type :     |
  10519. |    |``combien de fois une information est-elle enregistr√©e dans une table?''. Par exemple,|
  10520. |    |vous pouvez souhaiter conna√Ætre le nombre d'animaux que vous avez, ou le nombre       |
  10521. |    |d'animaux de chaque propri√©taire, ou encore toutes sortes de statistiques sur les     |
  10522. |    |animaux.                                                                              |
  10523. |    |Pour compter le nombre total d'animaux que vous avez, il suffit de compter le nombre  |
  10524. |    |de ligne dans la table animaux , puisqu'il y a un enregistrement par animal. La       |
  10525. |    |fonction COUNT() compte le nombre de ligne non-NULL. Votre requ√™te ressemblera alors √†|
  10526. |    |:                                                                                     |
  10527. |    |                                                                                      |
  10528. |    |mysql> SELECT COUNT(*) FROM animaux;                                                  |
  10529. |    |+----------+                                                                          |
  10530. |    || COUNT(*) |                                                                          |
  10531. |    |+----------+                                                                          |
  10532. |    ||        9 |                                                                          |
  10533. |    |+----------+                                                                          |
  10534. |    |Pr√©c√©demment, vous avez recherch√© les noms des propri√©taires d'animaux. Vous pouvez   |
  10535. |    |utiliser la fonction COUNT() pour conna√Ætre le nombre d'animaux que chaque            |
  10536. |    |propri√©taire a :                                                                      |
  10537. |    |                                                                                      |
  10538. |    |mysql> SELECT proprietaire, COUNT(*) FROM animaux GROUP BY proprietaire;              |
  10539. |    |+---------------+----------+                                                          |
  10540. |    || proprietaire  | COUNT(*) |                                                          |
  10541. |    |+---------------+----------+                                                          |
  10542. |    || Benny         |        2 |                                                          |
  10543. |    || Diane         |        2 |                                                          |
  10544. |    || Gwen          |        3 |                                                          |
  10545. |    || Harold        |        2 |                                                          |
  10546. |    |+---------------+----------+                                                          |
  10547. |    |Remarques: l'utilisation de la clause GROUP BY qui rassemble les lignes par           |
  10548. |    |proprietaire. Sans cette clause, vous obtenez le message d'erreur suivant :           |
  10549. |    |                                                                                      |
  10550. |    |mysql> SELECT proprietaire, COUNT(proprietaire) FROM animaux;                         |
  10551. |    |ERROR 1140 at line 1: Mixing of GROUP columns (MIN(),MAX(),COUNT()...)                |
  10552. |    |with no GROUP columns is illegal if there is no GROUP BY clause                       |
  10553. |    |COUNT() et GROUP BY sont utiles pour caract√©riser vos informations dans de nombreuses |
  10554. |    |situations : Les exemples suivant effectuent des statistiques sur vos animaux :       |
  10555. |    |Nombre d'animaux par esp√®ce                                                           |
  10556. |    |                                                                                      |
  10557. |    |mysql> SELECT espece, COUNT(*) FROM animaux GROUP BY espece;                          |
  10558. |    |+----------+----------+                                                               |
  10559. |    || espece   | COUNT(*) |                                                               |
  10560. |    |+----------+----------+                                                               |
  10561. |    || oiseau   |        2 |                                                               |
  10562. |    || chat     |        2 |                                                               |
  10563. |    || chien    |        3 |                                                               |
  10564. |    || hamster  |        1 |                                                               |
  10565. |    || serpent  |        1 |                                                               |
  10566. |    |+----------+----------+                                                               |
  10567. |    |Nombre d'animaux par genre:                                                           |
  10568. |    |                                                                                      |
  10569. |    |mysql> SELECT genre, COUNT(*) FROM animaux GROUP BY genre;                            |
  10570. |    |+-------+----------+                                                                  |
  10571. |    || genre | COUNT(*) |                                                                  |
  10572. |    |+-------+----------+                                                                  |
  10573. |    || NULL  |        1 |                                                                  |
  10574. |    || f     |        4 |                                                                  |
  10575. |    || m     |        4 |                                                                  |
  10576. |    |+-------+----------+                                                                  |
  10577. |    |(Dans cette r√©ponse, NULL indique ``genre inconnu.'')                                 |
  10578. |    |Nombre d'animaux par espece et genre:                                                 |
  10579. |    |                                                                                      |
  10580. |    |mysql> SELECT espece, genre, COUNT(*) FROM animaux GROUP BY espece, genre;            |
  10581. |    |+---------+-------+----------+                                                        |
  10582. |    || espece  | genre | COUNT(*) |                                                        |
  10583. |    |+---------+-------+----------+                                                        |
  10584. |    || oiseau  | NULL  |        1 |                                                        |
  10585. |    || oiseau  | f     |        1 |                                                        |
  10586. |    || chat    | f     |        1 |                                                        |
  10587. |    || chat    | m     |        1 |                                                        |
  10588. |    || chien   | f     |        1 |                                                        |
  10589. |    || chien   | m     |        2 |                                                        |
  10590. |    || hamster | f     |        1 |                                                        |
  10591. |    || serpent | m     |        1 |                                                        |
  10592. |    |+---------+-------+----------+                                                        |
  10593. |    |Il n'y a pas besoin d'utiliser la table enti√®re avec la fonction COUNT(). Par exemple,|
  10594. |    |la requ√™te pr√©c√©dente effectu√©e sur la population de chien et de chat devient:        |
  10595. |    |                                                                                      |
  10596. |    |mysql> SELECT espece, genre, COUNT(*) FROM animaux                                    |
  10597. |    |-> WHERE espece = "chien" OR espece = "chat"                                          |
  10598. |    |-> GROUP BY espece, genre;                                                            |
  10599. |    |+---------+-------+----------+                                                        |
  10600. |    || espece  | genre | COUNT(*) |                                                        |
  10601. |    |+---------+-------+----------+                                                        |
  10602. |    || chat    | f     |        1 |                                                        |
  10603. |    || chat    | m     |        1 |                                                        |
  10604. |    || chien   | f     |        1 |                                                        |
  10605. |    || chien   | m     |        2 |                                                        |
  10606. |    |+---------+-------+----------+                                                        |
  10607. |    |Ou, pour avoir le nombre d'animaux par genre, et pour les esp√®ces connues :           |
  10608. |    |                                                                                      |
  10609. |    |mysql> SELECT espece, genre, COUNT(*) FROM animaux                                    |
  10610. |    |-> WHERE genre IS NOT NULL                                                            |
  10611. |    |-> GROUP BY espece, genre;                                                            |
  10612. |    |+---------+-------+----------+                                                        |
  10613. |    || espece  | genre | COUNT(*) |                                                        |
  10614. |    |+---------+-------+----------+                                                        |
  10615. |    || oiseau  | f     |        1 |                                                        |
  10616. |    || chat    | f     |        1 |                                                        |
  10617. |    || chat    | m     |        1 |                                                        |
  10618. |    || chien   | f     |        1 |                                                        |
  10619. |    || chien   | m     |        2 |                                                        |
  10620. |    || hamster | f     |        1 |                                                        |
  10621. |    || serpent | m     |        1 |                                                        |
  10622. |    |+---------+-------+----------+                                                        |
  10623. |    |8.4.4 Utiliser plus d'une table                                                       |
  10624. |    |La table animaux contient la liste des animaux que vous avez. Vous pourriez vouloir   |
  10625. |    |enregistrer d'autres informations √† leur sujet, telles que des √©v√®nements de leur vie,|
  10626. |    |comme les visites chez le v√©t√©rinaire, ou les dates des port√©es de petits : vous avez |
  10627. |    |besoin d'une autre table. A quoi va t elle ressembler ?                               |
  10628. |    |Elle va devoir contenir les noms des animaux, pour savoir √† qui c'est arriv√©.         |
  10629. |    |Il faut une date pour l'√©v√©nement.                                                    |
  10630. |    |Il faut un champs de description des √©v√©nements                                       |
  10631. |    |Il faut aussi un champs de cat√©gorie d'√©v√©nement.                                     |
  10632. |    |Avec ces indications, la requ√™te de CREATE TABLE va ressembler √† ceci :               |
  10633. |    |                                                                                      |
  10634. |    |mysql> CREATE TABLE event (nom VARCHAR(20), date DATE,                                |
  10635. |    |-> type VARCHAR(15), remark VARCHAR(255));                                            |
  10636. |    |Comme pour la table animaux table, il est plus facile de charger les premi√®res valeurs|
  10637. |    |√† partir d'un fichier, dont les champs sont d√©limit√©s avec des tabulations :          |
  10638. |    |Chargez les informations comme ceci :                                                 |
  10639. |    |                                                                                      |
  10640. |    |mysql> LOAD DATA LOCAL INFILE "event.txt" INTO TABLE event;                           |
  10641. |    |Etant donn√© ce que vous avez appris avec les requ√™tes sur la table animaux table, vous|
  10642. |    |devriez √™tre capable d'ex√©cuter des requ√™tes sur la table event; les principes sont   |
  10643. |    |les m√™mes. Mais la table event pourrait se r√©v√©ler insuffisante pour r√©pondre √† vos   |
  10644. |    |questions.                                                                            |
  10645. |    |Supposons que vous voulez avoir l'age des animaux lorsqu'ils ont eu leur port√©e. La   |
  10646. |    |table event indique quand ils ont eu leur port√©e, mais pour calculer l'age de la m√®re,|
  10647. |    |il faut aussi sa date de naissance. Etant donn√© que cette date est stock√©e dans la    |
  10648. |    |table animaux, vous avez besoin des deux tables dans la m√™me requ√™te :                |
  10649. |    |                                                                                      |
  10650. |    |mysql> SELECT animaux.nom, (TO_DAYS(date) - TO_DAYS(naissance))/365 AS age, remarque  |
  10651. |    |-> FROM animaux, event                                                                |
  10652. |    |-> WHERE animaux.nom = event.nom AND type = "port√©e";                                 |
  10653. |    |+--------+------+-------------------------------+                                     |
  10654. |    || nom    | age  | remarque                      |                                     |
  10655. |    |+--------+------+-------------------------------+                                     |
  10656. |    || Fluffy | 2.27 | 4 chatons, 3 femelles, 1 male |                                     |
  10657. |    || Buffy  | 4.12 | 5 chiots, 2 femelles, 3 male  |                                     |
  10658. |    || Buffy  | 5.10 | 3 chiots, 3 femelles          |                                     |
  10659. |    |+--------+------+-------------------------------+                                     |
  10660. |    |Il faut remarquer plusieurs choses √† propos de cette requ√™te :                        |
  10661. |    |La clause FROM est une liste contenant les noms des deux tables, car la requ√™te clause|
  10662. |    |va chercher des informations dans ces deux tables.                                    |
  10663. |    |Lorsque vous combinez des informations entre plusieurs tables, il faut sp√©cifier      |
  10664. |    |comment les lignes vont correspondre. Ici, la correspondance est simple, et bas√©e sur |
  10665. |    |la colonne nom. La requ√™te utilise une clause WHERE pour rechercher et assortir les   |
  10666. |    |valeurs des deux tables, avec la colonne nom.                                         |
  10667. |    |Etant donn√© que les deux tables ont une colonne nom il faut pr√©ciser la table         |
  10668. |    |d'appartenance de ces colonnes √† chaque r√©f√©rence. C'est facilement faisable en       |
  10669. |    |ajoutant simplement le nom de la table devant le nom de la colonne.                   |
  10670. |    |Les regroupements sont aussi possibles sur une m√™me table. Cela revient √† comparer des|
  10671. |    |valeurs d'une table avec d'autres valeurs de la m√™me table. Par exemple, pour marier  |
  10672. |    |vos animaux entre eux, vous pouvez faire un regroupement de la table animaux avec     |
  10673. |    |elle-m√™me pour rechercher les males et femelles de la m√™me esp√®ce :                   |
  10674. |    |                                                                                      |
  10675. |    |mysql> SELECT p1.nom, p1.genre, p2.nom, p2.genre, p1.espece                           |
  10676. |    |-> FROM animaux AS p1, animaux AS p2                                                  |
  10677. |    |-> WHERE p1.espece = p2.espece AND p1.genre = "f" AND p2.genre = "m";                 |
  10678. |    |+--------+-------+--------+-------+---------+                                         |
  10679. |    || nom    | genre | nom    | genre | espece  |                                         |
  10680. |    |+--------+-------+--------+-------+---------+                                         |
  10681. |    || Fluffy | f     | Claws  | m     | chat    |                                         |
  10682. |    || Buffy  | f     | Fang   | m     | chien   |                                         |
  10683. |    || Buffy  | f     | Bowser | m     | chien   |                                         |
  10684. |    |+--------+-------+--------+-------+---------+                                         |
  10685. |    |Dans cette requ√™te, plusieurs alias sont d√©finis pour pouvoir faire r√©f√©rence √† chaque|
  10686. |    |instance de la table, et √† la bonne colonne.                                          |
  10687. |    |8.5 Informations sur les bases de donn√©es et tables                                   |
  10688. |    |Que se passe t il si vous oubliez le nom d'une base de donn√©es, d'une table ou la     |
  10689. |    |structure d'une table donn√©e ? MySQL r√©soud ce probl√®me avec plusieurs commandes qui  |
  10690. |    |fournissent des informations sur les bases et les tables.                             |
  10691. |    |Vous avez d√©j√† rencontr√© SHOW DATABASES, qui liste les bases g√©r√©s par le serveur.    |
  10692. |    |Pour conna√Ætre la base de donn√©es courante, utilisez DATABASE():                      |
  10693. |    |                                                                                      |
  10694. |    |mysql> SELECT DATABASE();                                                             |
  10695. |    |+------------+                                                                        |
  10696. |    || DATABASE() |                                                                        |
  10697. |    |+------------+                                                                        |
  10698. |    || menagerie  |                                                                        |
  10699. |    |+------------+                                                                        |
  10700. |    |Si vous n'avez pas de base s√©lectionn√©e, le r√©sultat est vide.                        |
  10701. |    |Pour conna√Ætre les tables de la base de donn√©es courante, (par exemple, si vous n'√™tes|
  10702. |    |pas sur du nom d'une table), utilisez la commande suivante :                          |
  10703. |    |                                                                                      |
  10704. |    |mysql> SHOW TABLES;                                                                   |
  10705. |    |+---------------------+                                                               |
  10706. |    || Tables in menagerie |                                                               |
  10707. |    |+---------------------+                                                               |
  10708. |    || event               |                                                               |
  10709. |    || animaux             |                                                               |
  10710. |    |+---------------------+                                                               |
  10711. |    |Pour conna√Ætre les colonnes d'une table, (par exemple, si vous n'√™tes pas sur du nom  |
  10712. |    |d'une colonne), utilisez la commande suivante :                                       |
  10713. |    |                                                                                      |
  10714. |    |mysql> DESCRIBE animaux;                                                              |
  10715. |    |+----------------+-------------+------+-----+---------+-------+                       |
  10716. |    || Field          | Type        | Null | Key | Default | Extra |                       |
  10717. |    |+----------------+-------------+------+-----+---------+-------+                       |
  10718. |    || nom            | varchar(20) | YES  |     | NULL    |       |                       |
  10719. |    || proprietaire   | varchar(20) | YES  |     | NULL    |       |                       |
  10720. |    || espece         | varchar(20) | YES  |     | NULL    |       |                       |
  10721. |    || genre          | char(1)     | YES  |     | NULL    |       |                       |
  10722. |    || naissance      | date        | YES  |     | NULL    |       |                       |
  10723. |    || mort           | date        | YES  |     | NULL    |       |                       |
  10724. |    |+----------------+-------------+------+-----+---------+-------+                       |
  10725. |    |Field donne le nom de la colonne, Type est le type de donn√©es, Null indique si la     |
  10726. |    |colonne accepte la valeur NULL ou pas, Key indique que la colonne est manual_toc√©e, et|
  10727. |    |Default indique la valeur par d√©faut de la colonne.                                   |
  10728. |    |Si vous avez des manual_toc sur une table, SHOW manual_toc FROM tbl_nom fournit la    |
  10729. |    |liste des informations les concernant.                                                |
  10730. |    |8.6 Utiliser mysql en mode batch                                                      |
  10731. |    |Dans les sections pr√©c√©dentes, vous avez utilis√© mysql de mani√®re interactive pour    |
  10732. |    |entrer des requ√™te et voir les r√©sultats.Vous pouvez aussi utiliser mysql en mode     |
  10733. |    |batch. Pour cela, il faut mettre les commandes que vous souhaitez ex√©cuter dans un    |
  10734. |    |fichier, puis indiquez √† mysql qu'il faut l'utiliser comme fichier d'entr√©e.          |
  10735. |    |                                                                                      |
  10736. |    |shell> mysql < batch-file                                                             |
  10737. |    |Si vous devez pr√©ciser des param√®tres de connexions sur la ligne de commande, elle    |
  10738. |    |peut ressembler √† ceci :                                                              |
  10739. |    |                                                                                      |
  10740. |    |shell> mysql -h host -u user -p < batch-file                                          |
  10741. |    |Enter password: ********                                                              |
  10742. |    |Quand vous utilisez mysql de cette fa√ßon, vous cr√©ez un fichier de script, puis       |
  10743. |    |ex√©cutez ce script.                                                                   |
  10744. |    |Pourquoi utiliser un script ? Voici quelques r√©ponses :                               |
  10745. |    |Si vous ex√©cutez une requ√™te de mani√®re r√©guli√®re (par exemple, tous les jours, toutes|
  10746. |    |les semaines), utiliser un script vous √©vitera de tout retaper √† la main √† chaque     |
  10747. |    |fois.                                                                                 |
  10748. |    |Vous pouvez g√©n√©rer de nouvelles requ√™tes √† partir d'autre requ√™te d√©j√† existantes, en|
  10749. |    |utilisant le copier/coller.                                                           |
  10750. |    |Le mode batch peut √™tre pratique lorsque vous d√©veloppez des requ√™tes de plusieurs    |
  10751. |    |lignes, ou des s√©quences de requ√™tes. A chaque erreur, vous n'avez pas tout √† retaper,|
  10752. |    |mais juste la commande erron√©e. Il suffit pour ca d'√©diter le script, et de le faire  |
  10753. |    |r√© ex√©cuter.                                                                          |
  10754. |    |Si une requ√™te g√©n√®re beaucoup d'informations, vous pouvez les voir avec un outil     |
  10755. |    |adapt√©, plut√¥t que de les regarder simplement d√©filer sur l'√©cran.                    |
  10756. |    |                                                                                      |
  10757. |    |shell> mysql < batch-file | more                                                      |
  10758. |    |Vous pouvez enregistrer les r√©sultats dans un fichier pour les retraiter ailleurs     |
  10759. |    |                                                                                      |
  10760. |    |shell> mysql < batch-file > mysql.out                                                 |
  10761. |    |Vous pouvez distribuer le script √† d'autres personnes, pour qu'ils puissent ex√©cuter  |
  10762. |    |ces commandes aussi.                                                                  |
  10763. |    |Certaines utilisations n'autorisent pas l'utilisation interactif, comme par exemple,  |
  10764. |    |la commande cron. Dans ce cas, il faut utiliser le mode batch.                        |
  10765. |    |Le format de r√©ponse en mode batch est plus concis qu'en mode int√©ractif. Par exemple |
  10766. |    |SELECT DISTINCT espece FROM animaux ressemble √† ceci ,en mode int√©ractif :            |
  10767. |    |                                                                                      |
  10768. |    |+---------+                                                                           |
  10769. |    || espece  |                                                                           |
  10770. |    |+---------+                                                                           |
  10771. |    || oiseau  |                                                                           |
  10772. |    || chat    |                                                                           |
  10773. |    || chien   |                                                                           |
  10774. |    || hamster |                                                                           |
  10775. |    || serpent |                                                                           |
  10776. |    |+---------+                                                                           |
  10777. |    |Mais en mode batch, il ressemble √† ceci :                                             |
  10778. |    |                                                                                      |
  10779. |    |espece                                                                                |
  10780. |    |oiseau                                                                                |
  10781. |    |chat                                                                                  |
  10782. |    |chien                                                                                 |
  10783. |    |hamster                                                                               |
  10784. |    |serpent                                                                               |
  10785. |    |Pour obtenir un format de r√©ponse " int√©ractif " √† partir du mode batch, utilisez     |
  10786. |    |l'option mysql -t. Pour avoir aussi les commandes ex√©cut√©es utilisez l'option mysql   |
  10787. |    |-vvv.                                                                                 |
  10788. |    |8.7 Requ√™tes pour le projet "jumeaux"                                                 |
  10789. |    |Chez Analytikerna and Lentus (NDT : soci√©t√© de l'auteur), nous avons pris en charge   |
  10790. |    |l'√©tude du syst√®me et l'architecture des donn√©es pour un grand projet de recherche. Ce|
  10791. |    |projet est une collaboration entre l' Institut de m√©decine environnementale √†         |
  10792. |    |Karolinska Institutet, Stockholm et la Section Recherche Clinique sur l'age et la     |
  10793. |    |psychologie, de l'universit√© de Californie du Sud.                                    |
  10794. |    |Ce projet avait une grosse partie d'enqu√™te, o√π tous les jumeaux su√©dois de plus de 65|
  10795. |    |ans √©taient interview√©s par t√©l√©phone. Les jumeaux qui remplissaient certains crit√®res|
  10796. |    |√©taient admis dans la phase suivante de l'enqu√™te. Dans cette deuxi√®me phase, les     |
  10797. |    |jumeaux qui souhaitaient participer, recevaient la visite d'un docteur et d'une       |
  10798. |    |infirmi√®re. Une partie des questionnaires √©taient des examens physiques et            |
  10799. |    |neuropsychologiques, des tests de laboratoire, des scanners du cerveau, des analyses  |
  10800. |    |psychologique, et des √©tudes g√©n√©alogiques. De plus, des informations √©taient         |
  10801. |    |rassembl√©es sur les risques m√©dicaux et environnementaux.                             |
  10802. |    |Pour plus d'information a propos de ce projet, suivez le lien suivant (en anglais) :  |
  10803. |    |                                                                                      |
  10804. |    |http://www.imm.ki.se/TWIN/TWINUKW.HTM                                                 |
  10805. |    |La deuxi√®me partie du projet est accessible par une interface web, √©crite en Perl et  |
  10806. |    |MySQL.                                                                                |
  10807. |    |Chaque nuit, les informations des r√©unions √©taient ins√©r√©ees dans les base MySQL.     |
  10808. |    |8.7.1 Trouver tous les jumeaux non distribu√©s                                         |
  10809. |    |8.7.1 Trouver tous les jumeaux non distribu√©s                                         |
  10810. |    |Les requ√™tes suivantes sont utilis√©es pour s√©lectionner les couples de jumeaux qui    |
  10811. |    |acc√®deront √† la deuxi√®me phase :                                                      |
  10812. |    |                                                                                      |
  10813. |    |select                                                                                |
  10814. |    |concat(p1.id, p1.tvab) + 0 as tvid,                                                   |
  10815. |    |concat(p1.christian_nom, " ", p1.surnom) as Nom,                                      |
  10816. |    |p1.postal_code as Code,                                                               |
  10817. |    |p1.city as City,                                                                      |
  10818. |    |pg.abrev as Area,                                                                     |
  10819. |    |if(td.participation = "Aborted", "A", " ") as A,                                      |
  10820. |    |p1.dead as dead1,                                                                     |
  10821. |    |l.event as event1,                                                                    |
  10822. |    |td.suspect as tsuspect1,                                                              |
  10823. |    |id.suspect as isuspect1,                                                              |
  10824. |    |td.severe as tsevere1,                                                                |
  10825. |    |id.severe as isevere1,                                                                |
  10826. |    |p2.dead as dead2,                                                                     |
  10827. |    |l2.event as event2,                                                                   |
  10828. |    |h2.nurse as nurse2,                                                                   |
  10829. |    |h2.doctor as doctor2,                                                                 |
  10830. |    |td2.suspect as tsuspect2,                                                             |
  10831. |    |id2.suspect as isuspect2,                                                             |
  10832. |    |td2.severe as tsevere2,                                                               |
  10833. |    |id2.severe as isevere2,                                                               |
  10834. |    |l.finish_date                                                                         |
  10835. |    |from                                                                                  |
  10836. |    |twin_project as tp                                                                    |
  10837. |    |/* For Twin 1 */                                                                      |
  10838. |    |left join twin_data as td on tp.id = td.id and tp.tvab = td.tvab                      |
  10839. |    |left join informant_data as id on tp.id = id.id and tp.tvab = id.tvab                 |
  10840. |    |left join harmony as h on tp.id = h.id and tp.tvab = h.tvab                           |
  10841. |    |left join lentus as l on tp.id = l.id and tp.tvab = l.tvab                            |
  10842. |    |/* For Twin 2 */                                                                      |
  10843. |    |left join twin_data as td2 on p2.id = td2.id and p2.tvab = td2.tvab                   |
  10844. |    |left join informant_data as id2 on p2.id = id2.id and p2.tvab = id2.tvab              |
  10845. |    |left join harmony as h2 on p2.id = h2.id and p2.tvab = h2.tvab                        |
  10846. |    |left join lentus as l2 on p2.id = l2.id and p2.tvab = l2.tvab,                        |
  10847. |    |person_data as p1,                                                                    |
  10848. |    |person_data as p2,                                                                    |
  10849. |    |postal_groups as pg                                                                   |
  10850. |    |where                                                                                 |
  10851. |    |/* p1 gets main twin and p2 gets his/her twin. */                                     |
  10852. |    |/* ptvab is a field inverted from tvab */                                             |
  10853. |    |p1.id = tp.id and p1.tvab = tp.tvab and                                               |
  10854. |    |p2.id = p1.id and p2.ptvab = p1.tvab and                                              |
  10855. |    |/* Just the sceening survey */                                                        |
  10856. |    |tp.survey_no = 5 and                                                                  |
  10857. |    |/* Skip if partner died before 65 but allow emigration (dead=9) */                    |
  10858. |    |(p2.dead = 0 or p2.dead = 9 or                                                        |
  10859. |    |(p2.dead = 1 and                                                                      |
  10860. |    |(p2.mort_date = 0 or                                                                  |
  10861. |    |(((to_days(p2.mort_date) - to_days(p2.naissanceday)) / 365)                           |
  10862. |    |>= 65))))                                                                             |
  10863. |    |and                                                                                   |
  10864. |    |(                                                                                     |
  10865. |    |/* Twin is suspect */                                                                 |
  10866. |    |(td.future_contact = 'Yes' and td.suspect = 2) or                                     |
  10867. |    |/* Twin is suspect - Informant is Blessed */                                          |
  10868. |    |(td.future_contact = 'Yes' and td.suspect = 1 and id.suspect = 1) or                  |
  10869. |    |/* No twin - Informant is Blessed */                                                  |
  10870. |    |(ISNULL(td.suspect) and id.suspect = 1 and id.future_contact = 'Yes') or              |
  10871. |    |/* Twin broken off - Informant is Blessed */                                          |
  10872. |    |(td.participation = 'Aborted'                                                         |
  10873. |    |and id.suspect = 1 and id.future_contact = 'Yes') or                                  |
  10874. |    |/* Twin broken off - No inform - Have partner */                                      |
  10875. |    |(td.participation = 'Aborted' and ISNULL(id.suspect) and p2.dead = 0))                |
  10876. |    |and                                                                                   |
  10877. |    |l.event = 'Finished'                                                                  |
  10878. |    |/* Get at area code */                                                                |
  10879. |    |and substring(p1.postal_code, 1, 2) = pg.code                                         |
  10880. |    |/* Not already distributed */                                                         |
  10881. |    |and (h.nurse is NULL or h.nurse=00 or h.doctor=00)                                    |
  10882. |    |/* Has not refused or been aborted */                                                 |
  10883. |    |and not (h.status = 'Refused' or h.status = 'Aborted'                                 |
  10884. |    |or h.status = 'Died' or h.status = 'Other')                                           |
  10885. |    |order by                                                                              |
  10886. |    |tvid;                                                                                 |
  10887. |    |Quelques explications s'imposent :                                                    |
  10888. |    |‚Ä¢  concat(p1.id, p1.tvab) + 0 as tvid                                                 |
  10889. |    |On veut trier les valeurs avec la concat√©nation de id et tvab dans un ordre num√©rique.|
  10890. |    |Ajouter 0 au nombre force MySQL √† traiter le r√©sultat comme un nombre                 |
  10891. |    |column id                                                                             |
  10892. |    |Ceci identifiera un couple de jumeaux. C'est une cl√© commune √† toutes les tables.     |
  10893. |    |column tvab                                                                           |
  10894. |    |Cette colonne identifie un des jumeaux dans un couple. Il prend la valeur de 1 ou 2.  |
  10895. |    |column ptvab                                                                          |
  10896. |    |C'est le compl√©mentaire de la colonne pr√©c√©dente. Quand tvab vaut 1 celle-ci vaut 2,  |
  10897. |    |et vice versa. Elle sert √† √©viter des saisie, et permet √† MySQL d'optimiser la        |
  10898. |    |requ√™te.                                                                              |
  10899. |    |Cette requ√™te d√©montre, entre autres choses, comment faire des recherches dans une    |
  10900. |    |table √† partir de la m√™me table, gr?ce √† un regroupement ( (p1 et p2). Dans l'exemple |
  10901. |    |ci-dessus, on s'en sert pour v√©rifier si le deuxi√®me jumeau n'est pas mort avant l'age|
  10902. |    |de 65 ans. Dans ce cas, la ligne n'est pas renvoy√©e.                                  |
  10903. |    |Toutes les informations ci-dessus existent dans les tables sur les jumeaux. Il y a    |
  10904. |    |toujours une cl√© sur id,tvab (toutes tables) et id,ptvab (person_data) pour rendre les|
  10905. |    |requ√™tes plus rapides.                                                                |
  10906. |    |Sur notre serveur de production (une station Sun UltraSPARC 200MHz), cettre requ√™te   |
  10907. |    |retourne entre 150 et 200 lignes, et prend moins d'une seconde.                       |
  10908. |    |Le nombre courant de ligne dans les tables sont les suivants :                        |
  10909. |    |8.7.2 Afficher une table par pair de jumeau                                           |
  10910. |    |Chaque interview est conclu par un status appel√© event. La requ√™te ci-dessous est     |
  10911. |    |utilis√©e pour cr√©er une table avec toutes les paires de jumeaux. Elle indique aussi le|
  10912. |    |nombre de couples qui ont termin√© les entretiens, les couples o√π un seul jumeau a √©t√© |
  10913. |    |interrog√©, les couples qui ont refus√©, etc‚Ķ                                           |
  10914. |    |                                                                                      |
  10915. |    |select                                                                                |
  10916. |    |t1.event,                                                                             |
  10917. |    |t2.event,                                                                             |
  10918. |    |count(*)                                                                              |
  10919. |    |from                                                                                  |
  10920. |    |lentus as t1,                                                                         |
  10921. |    |lentus as t2,                                                                         |
  10922. |    |twin_project as tp                                                                    |
  10923. |    |where                                                                                 |
  10924. |    |/* We are looking at one pair at a time */                                            |
  10925. |    |t1.id = tp.id                                                                         |
  10926. |    |and t1.tvab=tp.tvab                                                                   |
  10927. |    |and t1.id = t2.id                                                                     |
  10928. |    |/* Just the sceening survey */                                                        |
  10929. |    |and tp.survey_no = 5                                                                  |
  10930. |    |/* This makes each pair only appear once */                                           |
  10931. |    |and t1.tvab='1' and t2.tvab='2'                                                       |
  10932. |    |group by                                                                              |
  10933. |    |t1.event, t2.event;                                                                   |
  10934. |    |9 Serveur MySQL                                                                       |
  10935. |    |9.1 Quels sont les langues support√©s par MySQL?                                       |
  10936. |    |mysqld peut √©mettre des messages d'erreur dans les langues suivantes : Hollandais,    |
  10937. |    |Anglais (par d√©faut), Estonien, Fran√ßais, Allemand, Hongrois, Italien, Norv√©gien,     |
  10938. |    |Polonais, Portugais, Espagnol et Su√©dois.                                             |
  10939. |    |Pour d√©marrer mysqld avec une langue donn√©e, utilisez l'option --language=lang ou -L  |
  10940. |    |lang . Par exemple :                                                                  |
  10941. |    |                                                                                      |
  10942. |    |shell> mysqld --language=swedish                                                      |
  10943. |    |ou:                                                                                   |
  10944. |    |                                                                                      |
  10945. |    |shell> mysqld --language=/usr/local/share/swedish                                     |
  10946. |    |Notez que tous les noms de langues sont sp√©cifi√©s en minuscules.                      |
  10947. |    |Le fichie de langue est situ√© (par d√©faut, dans le dossier                            |
  10948. |    |`mysql_base_dir/share/LANGUAGE/'.                                                     |
  10949. |    |Pour modifier le fichier de message d'erreur, il vous faut √©diter le fichier          |
  10950. |    |`errmsg.txt' et ex√©cuter la commande suivante pour g√©n√©rer le fichier `errmsg.sys' :  |
  10951. |    |                                                                                      |
  10952. |    |shell> comp_err errmsg.txt errmsg.sys                                                 |
  10953. |    |Si vous mettez √† jour MySQL, n'oubliez pas de r√©peter la m√™me manoeuvre avec le       |
  10954. |    |nouveau fichier @new `errmsg.txt'.                                                    |
  10955. |    |9.1.1 Le jeu de caract√®re utilis√© pour le tri des donn√©es                             |
  10956. |    |Par d√©faut, MySQL utilise le jeu de caract√®re ISO-8859-1 (Latin1). C'est le jeu de    |
  10957. |    |caract√®res utilis√© aux USA et en Europe Occidentale.                                  |
  10958. |    |Le jeu de caract√®res d√©termine les caract√®res autoris√©s dans les noms, et la m√©thode  |
  10959. |    |de tri utilis√©e dans les clauses ORDER BY et GROUP BY de la commandes SELECT.         |
  10960. |    |Vous pouvez changer le jeu de caract√®res au moment de la compilation, en utilisant    |
  10961. |    |l'option --with-charset=charset de configure. 4.7.1 Introduction √† l'installation     |
  10962. |    |rapide.                                                                               |
  10963. |    |Pour ajouter un nouveau jeu de caract√®res √† MySQL, utilisez la proc√©dure suivante :   |
  10964. |    |9.1.2 Ajouter un nouveau jeu de caract√®re                                             |
  10965. |    |Choisir un nom pour le jeu de caract√®re, d√©nomm√© MYSET.                               |
  10966. |    |Cr√©er le fichier `strings/ctype-MYSET.c' dans la distribution source de MySQL.        |
  10967. |    |Regarder dans le fichier `ctype-*.c' pour savoir ce qui doit √™tre d√©fini. Notez que   |
  10968. |    |les tableaux de votre fichier doivent avoir des noms du type ctype_MYSET,             |
  10969. |    |to_lower_MYSET etc... to_lower[] et to_upper[] sont de simples tableaux qui           |
  10970. |    |contiennent les caract√®res minuscules et majuscules du jeu de caract√®re. Par exemple :|
  10971. |    |                                                                                      |
  10972. |    |                                                                                      |
  10973. |    |to_lower['A'] doit contenir 'a'                                                       |
  10974. |    |to_upper['a'] doit contenir 'A'                                                       |
  10975. |    |sort_order[] est une map qui indique comment les caract√®res doivent √™tre ordonn√© lors |
  10976. |    |des comparaisons et des tris. Pour la plus part des jeux de caract√®res, c'est la m√™me |
  10977. |    |valeur que pour to_upper[] (ce qui signifie que le tri sera insensible √† la casse).   |
  10978. |    |MySQL effectuera les tris en se basant sur la valeur de sort_order[character]. ctype[]|
  10979. |    |est un tableau de valeurs de bit, avec un √©l√©ment par caract√®re. (Notez que           |
  10980. |    |to_lower[], to_upper[] et sort_order[] sont index√©s par valeur de caract√®re, mais que |
  10981. |    |ctype[] est index√© par valeur de caract√®re +1. C'est une vieille technique qui permet |
  10982. |    |de g√©rer les EOF). Vous pouvez trouver la d√©finitions de ces champs de bit dans       |
  10983. |    |`m_ctype.h':                                                                          |
  10984. |    |                                                                                      |
  10985. |    |#define _U      01      /* Majuscule */                                               |
  10986. |    |#define _L      02      /* Minuscule */                                               |
  10987. |    |#define _N      04      /* Chiffre */                                                 |
  10988. |    |#define _S      010     /* Espacement*/                                               |
  10989. |    |#define _P      020     /* Ponctuation */                                             |
  10990. |    |#define _C      040     /* Caract√®re de contr√¥le */                                   |
  10991. |    |#define _B      0100    /* Blanc */                                                   |
  10992. |    |#define _X      0200    /* Chiffre hexad√©cimal */                                     |
  10993. |    |L'entr√©e de ctype[] pour chaque caract√®re doit √™tre l'union des masques de bits qui   |
  10994. |    |d√©crivent le caract√®re. Par exemple, 'A' est une caract√®re majuscule, (_U) mais aussi |
  10995. |    |un chiffre hexad√©cimal. (_X), donc son type devrait contenir ctype['A'+1]             |
  10996. |    |                                                                                      |
  10997. |    |_U + _X = 01 + 0200 = 0201                                                            |
  10998. |    |Ajouter un num√©ro unique pour votre jeu de caract√®res dans `include/m_ctype.h.in'.    |
  10999. |    |Ajouter le nom du jeu de caract√®re dans la liste CHARSETS_AVAILABLE de configure.in.  |
  11000. |    |Reconfigurer, recompiler et tester.                                                   |
  11001. |    |9.1.3 Support des caract√®res multi-byte                                               |
  11002. |    |Si vous cr√©ez un jeu de caract√®res multi byte, vous pouvez utiliser la macro _MB. Dans|
  11003. |    |le fichier `include/m_ctype.h.in', ajouter :                                          |
  11004. |    |                                                                                      |
  11005. |    |#define MY_CHARSET_MYSET  X                                                           |
  11006. |    |#if MY_CHARSET_CURRENT == MY_CHARSET_MYSET                                            |
  11007. |    |#define USE_MB                                                                        |
  11008. |    |#define USE_MB_IDENT                                                                  |
  11009. |    |#define ismbchar(p, end)  (...)                                                       |
  11010. |    |#define ismbhead(c)       (...)                                                       |
  11011. |    |#define mbcharlen(c)      (...)                                                       |
  11012. |    |#define MBMAXLEN          N                                                           |
  11013. |    |#endif                                                                                |
  11014. |    |o√π :                                                                                  |
  11015. |    |MY_CHARSET_MYSET                                                                      |
  11016. |    |Une valeur de jeu de caract√®re unique.                                                |
  11017. |    |                                                                                      |
  11018. |    |USE_MB                                                                                |
  11019. |    |Ce jeu de caract√®re a des caract√®res multi-byte, g√©r√© par ismbhead() et mbcharlen()   |
  11020. |    |                                                                                      |
  11021. |    |USE_MB_IDENT                                                                          |
  11022. |    |(optionnel) Si d√©fini, vous pouvez utiliser des noms de tables et de colonnes avec des|
  11023. |    |caract√®res multi bytes.                                                               |
  11024. |    |                                                                                      |
  11025. |    |ismbchar(p, e)                                                                        |
  11026. |    |retourne 0 si p ne contient pas de caract√®re multi-byte , ou bien la taille des       |
  11027. |    |caract√®res (en octets). p et e pointent au d√©but et √† la fin de la cha√Æne. V√©rifier de|
  11028. |    |(char*)p √† (char*)e-1.                                                                |
  11029. |    |                                                                                      |
  11030. |    |ismbhead(c)                                                                           |
  11031. |    |Vrai (True√† si c est le premier caract√®re d'une cha√Æne multi-byte.                    |
  11032. |    |                                                                                      |
  11033. |    |mbcharlen(c)                                                                          |
  11034. |    |Taille d'une cha√Æne multi-byte si c est le premier caract√®re d'une cha√Æne.            |
  11035. |    |                                                                                      |
  11036. |    |MBMAXLEN                                                                              |
  11037. |    |Taille en byte du plus grand caract√®re du jeu de caract√®re.                           |
  11038. |    |                                                                                      |
  11039. |    |9.2 Historique de modification                                                        |
  11040. |    |When started with the --log-update=file_name option, mysqld writes a log file         |
  11041. |    |containing all SQL commands that update data. The file is written in the data         |
  11042. |    |directory and has a name of file_name.#, where # is a number that is incremented each |
  11043. |    |time you execute mysqladmin refresh or mysqladmin flush-logs, the FLUSH LOGS          |
  11044. |    |statement, or restart the server.                                                     |
  11045. |    |If you use the --log or -l options, the filename is `hostname.log', and restarts and  |
  11046. |    |refreshes do not cause a new log file to be generated. By default, the mysql.server   |
  11047. |    |script starts the MySQL server with the -l option. If you need better performance when|
  11048. |    |you start using MySQL in a production environment, you can remove the -l option from  |
  11049. |    |mysql.server.                                                                         |
  11050. |    |Update logging is smart since it logs only statements that really update data. So an  |
  11051. |    |UPDATE or a DELETE with a WHERE that finds no rows is not written to the log. It even |
  11052. |    |skips UPDATE statements that set a column to the value it already has.                |
  11053. |    |If you want to update a database from update log files, you could do the following    |
  11054. |    |(assuming your log files have names of the form `file_name.#'):                       |
  11055. |    |                                                                                      |
  11056. |    |shell> ls -1 -t -r file_name.[0-9]* | xargs cat | mysql                               |
  11057. |    |ls is used to get all the log files in the right order.                               |
  11058. |    |This can be useful if you have to revert to backup files after a crash and you want to|
  11059. |    |redo the updates that occurred between the time of the backup and the crash.          |
  11060. |    |You can also use the update logs when you have a mirrored database on another host and|
  11061. |    |you want to replicate the changes that have been made to the master database.         |
  11062. |    |9.3 Taille des tables MySQL                                                           |
  11063. |    |MySQL itself has a 4G limit on table size, and operating systems have their own file  |
  11064. |    |size limits. On Linux, the current limit is 2G; on Solaris 2.5.1, the limit is 4G; on |
  11065. |    |Solaris 2.6, the limit is going to be 1000G. Currently, table sizes are limited to    |
  11066. |    |either 4G (the MySQL limit) or the operating system limit, whichever is smaller. To   |
  11067. |    |get more than 4G requires some changes to MySQL that are on the TODO. F Liste de voeux|
  11068. |    |pour les versions futures de MySQL (la TODO).                                         |
  11069. |    |If your big table is going to be read-only, you could use pack_isam to merge and      |
  11070. |    |compress many tables to one. pack_isam usually compresses a table by at least 50%, so |
  11071. |    |you can have, in effect, much bigger tables. pack_isam.                               |
  11072. |    |Another solution can be the included MERGE library, which allows you to handle a      |
  11073. |    |collection of identical tables as one. (Identical in this case means that all tables  |
  11074. |    |are created with identical column information.) Currently MERGE can only be used to   |
  11075. |    |scan a collection of tables because it doesn't support indexes. We will add indexes to|
  11076. |    |this in the near future.                                                              |
  11077. |    |10 Am√©liorer les performances de MySQL                                                |
  11078. |    |10.1 Optimisation des valeurs du serveur                                              |
  11079. |    |Vous pouvez acc√©der aux tailles par d√©faut des buffers de mysqld avec la commande     |
  11080. |    |suivante :