Dans cet exemple, les valeurs Orange et Poire sont stockées dans la base de données avec 5 (0101). Vous pouvez, au plus, stocker 64 valeurs dans une colonne SET. Bien qu il soit possible d assigner plusieurs fois la même valeur à une colonne SET, cette valeur ne sera stockée que de manière unique.... SQL MySQL supporte entièrement le standard ANSI SQL92, niveau de base. Par conséquent, la description des commandes SQL de MySQL peut servir de référence générale à SQL. Mais MySQL apporte aussi ses propres améliorations, particulièrement pratiques avec la commande mysql. Vous trouverez dans cette partie une description du langage SQL tel qu il est implémenté dans MySQL. Le langage SQL ressemble à de l anglais limité, constitué de verbes à particule. Chacune de ces expressions commence par une commande SQL suivie d un autre mot-clé SQL, de termes littéraux, d identificateurs ou de signes de ponctuation. Distinction des majuscules et des minuscules Dans MySQL, la distinction entre les majuscules et les minuscules dépend de plusieurs facteurs, notamment de l unité lexicale considérée et du système d exploitation. Le tableau 3 montre de quelle manière la casse est prise en compte pour différents types d unités lexicales de MySQL. 27
Tableau 3. Incidence de la casse dans MySQL Unité lexicale Distinction majuscules/minuscules Mot-clés Jamais. Identificateurs (bases de Dépend du système d exploitation. Sur données et tables) tous les systèmes UNIX (mis à part Mac OS X avec HFS+), la casse est prise en compte pour les noms de bases de données et de tables. Sous Mac OS X avec HFS+ et sous Windows, la casse n a pas d incidence. Alias de tables Toujours. Alias de colonnes Jamais. Les termes littéraux On trouve les termes littéraux suivants dans MySQL : Les chaînes de caractères Les chaînes de caractères littérales peuvent être encadrées par des apostrophes simples (') ou doubles ("). Si vous voulez rester compatible avec le standard ANSI, n utilisez que des apostrophes simples. À l intérieur d une chaîne de caractères, vous pouvez représenter les caractères spéciaux avec des séquences d échappement. Une séquence d échappement commence par une barre oblique qui indique que le caractère qui suit possède une signification spéciale. Le tableau 4 répertorie les séquences d échappement de MySQL. Vous pouvez aussi insérer des apostrophes dans les chaînes de caractères en les doublant : 'Voici des ''apostrophes'''. Cependant, vous n avez pas besoin de doubler les apostrophes simples si vous avez encadré la chaîne de caractère avec des apostrophes doubles : "Voici des 'apostrophes'". 28
Tableau 4. Séquences d échappement de MySQL Séquence Valeur d échappement \0 NUL \' Apostrophe simple \" Apostrophes doubles \b Retour arrière \n Nouvelle ligne \r Retour chariot \t Tabulation \z Ctrl-z (pour Windows qui utilise Ctrl-z à la place d EOF) \\ Barre oblique \% Symbole pourcentage (dans les cas où le symbole de pourcentage pourrait être interprété par un joker) \_ Caractère de soulignement (seulement dans le cas où le caractère de soulignement pourrait être interprété par un joker) Les valeurs binaires Comme les chaînes de caractères, les valeurs binaires sont notées avec des apostrophes simples ou doubles. Vous devez utiliser des séquences d échappement pour insérer les caractères NUL (ASCII 0), " (ASCII 34), ' (ASCII 39) et \ (ASCII 92) dans des données binaires. Les valeurs décimales Les nombres se présentent comme des suites de chiffres. Les nombres négatifs sont précédés du signe - et un. indique une partie décimale. Vous pouvez aussi utiliser la notation scientifique : -45198.2164e+10. Les valeurs hexadécimales L interprétation des valeurs hexadécimales dépend du contexte. Dans un contexte numérique, les valeurs hexadécimales littérales sont traitées comme des données numériques ; sinon elles sont traitées comme des données 29
binaires. Par exemple, 0x1 + 1 correspond à 2, mais 0x4d7953514c correspond en soi à 'MySQL'. La valeur nulle Le mot-clé spécial NULL indique une valeur littérale nulle en SQL. Lorsqu on importe des fichiers, la séquence d échappement spéciale \N indique une valeur nulle. Les identificateurs Vous pouvez référencer n importe quel objet d un serveur MySQL en supposant que vous y êtes autorisé si vous suivez l une de ces conventions : Les références absolues Une référence absolue spécifie le chemin complet vers un objet. Par exemple, la colonne SOLDE de la table COMPTE de la base de données BANQUE aura pour référence absolue : BANQUE.COMPTE.SOLDE Les références relatives Les références relatives permettent de ne spécifier qu une partie du nom de l objet, le reste du nom étant déduit du contexte actuel. Par exemple, si vous êtes en connexion avec la base de données BANQUE, vous pouvez référencer la colonne BANQUE.COMPTE.SOLDE comme COMPTE.SOLDE. Dans une requête SQL qui précise que vous être en train de sélectionner la table COMPTE, vous pouvez vous contenter de référencer la colonne avec SOLDE. Vous devez préciser un niveau de contexte supplémentaire à chaque fois que la référence peut être ambiguë : par exemple, dans une instruction SELECT qui traite deux tables possédant toutes les deux une colonne SOLDE. Les alias Les alias servent à référencer un objet en utilisant un nom différent, ce qui permet à la fois d éviter les ambiguïtés et d éviter d entrer une référence complète longue. 30
En général, MySQL permet d utiliser n importe quel caractère dans les identificateurs (dans les anciennes versions de MySQL, il fallait se restreindre aux caractères alphanumériques valides du jeu de caractère par défaut, plus les caractères $ et _). Toutefois, cette règle est limitée par le fait que les bases de données et les tables sont traitées comme des fichiers : vous ne pouvez donc utiliser que les caractères valides dans le système de fichier local. En particulier, vous ne pouvez pas utiliser les caractères / ou. dans un nom de base de données ou de table. De plus, vous ne pouvez jamais utiliser les caractères ASCII 0 (NUL) et 255 dans un identificateur. Lorsqu un identificateur est aussi un mot-clé SQL, vous devez l encadrer avec des apostrophes simples : CREATE TABLE 'select' ( 'table' INT NOT NULL PRIMARY KEY AUTO_INCREMENT); Depuis la version 3.23.6, MySQL permet d utiliser à la fois des apostrophes simples ou doubles pour les identifieurs. Le standard ANSI requiert que vous utilisiez des apostrophes doubles, mais vous devrez pour cela lancer MySQL en mode ANSI. Les commentaires Vous pouvez introduire dans votre code des commentaires, qui ne seront pas interprétés par MySQL. Les commentaires sont plus particulièrement utiles dans les scripts, lorsque vous voulez créer automatiquement des tables ou charger des données. MySQL autorise trois types de commentaires : les commentaires de type C, de type shell et de type ANSI SQL. Dans le style C, tout ce qui se trouve entre /* et */ est traité comme un commentaire. Il est ainsi possible d écrire des commentaires sur plusieurs lignes, par exemple : /* * Crée une table pour stocker le compte d'un client. */ DROP TABLE IF EXISTS COMPTE; CREATE TABLE COMPTE ( ID_COMPTE BIGINT NOT NULL 31