Le serveur MySQL inclut des extensions que vous ne trouverez
probablement pas dans les autres bases de données. Soyez
prévenus que si vous les utilisez, votre code ne sera
probablement pas portable sur d'autres serveurs SQL. Dans
certains cas, vous pouvez écrire du code qui inclut des
spécificités de MySQL, mais qui restent portables, en les
incluant dans des commentaires de la forme /*! ...
*/
. Dans ce cas, le serveur MySQL va analyser la
chaîne et exécuter le code à l'intérieur de ces commentaires
comme une commande normale, mais d'autres serveurs ignoreront
ces commentaires. Par exemple :
SELECT /*! STRAIGHT_JOIN */ col_name FROM table1,table2 WHERE ...
Si vous ajoutez le numéro de version après le point
d'exclamation ‘!
’, la syntaxe
sera exécutée uniquement si la version du serveur MySQL est
égale ou plus récente que le numéro de version utilisé.
CREATE /*!32302 TEMPORARY */ TABLE t (a int);
Cela signifie que si vous avez la version 3.23.02 ou plus
récente, le serveur MySQL va utiliser le mot réservé
TEMPORARY
.
Voici une liste des apports spécifiques de MySQL :
Organisation des données sur le disque
MySQL fait correspondre à chaque base un dossier dans le dossier de données MySQL, et à chaque table des fichiers portant le même nom. Ceci a plusieurs implications :
Les noms des bases de données et des tables sont sensibles à la casse sur les systèmes d'exploitation qui ont des systèmes de fichiers sensibles à la casse (comme la plupart des systèmes Unix). See Section 9.2.2, « Sensibilité à la casse pour les noms ».
Vous pouvez utiliser les commandes systèmes standard
pour sauver, renommer, déplacer, effacer et copier
des tables. Par exemple, pour renommer une table, il
suffit de renommer les fichiers
.MYD
, .MYI
et .frm
et de leur donner un
nouveau nom.
Les noms de bases, tables, index, colonnes ou alias peuvent commencer par des chiffres, mais ne peuvent pas être constitués uniquement de noms.
Syntaxe générale du langage
Les chaînes de caractères peuvent être soit
délimitées par ‘"
’,
soit par ‘'
’. Pas
seulement par ‘'
’.
L'utilisation du caractère de protection
‘\
’.
Dans une requête SQL, vous pouvez accéder à des
tables situées dans différentes bases de données,
avec la syntaxe db_name.tbl_name
.
Certains serveurs SQL fournissent la même
fonctionnalité, mais l'appellent un User
space
. Le serveur MySQL ne supporte par les
espaces de nom de tables, comme dans :
create table ralph.my_table...IN
my_tablespace
.
Syntaxe de commande SQL
Les commandes ANALYZE TABLE
,
CHECK TABLE
, OPTIMIZE
TABLE
et REPAIR TABLE
.
Les commandes CREATE DATABASE
et
DROP DATABASE
. See
Section 13.2.3, « Syntaxe de CREATE DATABASE
».
La commande DO
.
La commande EXPLAIN SELECT
pour
avoir le détail des jointures de tables.
Les commandes FLUSH
et
RESET
.
La commande SET
. See
Section 13.5.2.8, « Syntaxe de SET
».
La commande SHOW
. See
Section 13.5.3, « Syntaxe de SHOW
».
L'utilisation de la commande LOAD DATA
INFILE
. Dans de nombreuses situations, cette
syntaxe est compatible avec la commande d'Oracle
LOAD DATA INFILE
. See
Section 13.1.5, « Syntaxe de LOAD DATA INFILE
».
L'utilisation de RENAME TABLE
. See
Section 13.2.9, « Syntaxe de RENAME TABLE
».
L'utilisation de REPLACE
au lieu de
DELETE
+ INSERT
.
See Section 13.1.6, « Syntaxe de REPLACE
».
L'utilisation de CHANGE col_name
,
DROP col_name
ou DROP
INDEX
, IGNORE
ou
RENAME
dans une commande
ALTER TABLE
. See
Section 13.2.2, « Syntaxe de ALTER TABLE
».
L'utilisation de noms d'index, de préfixes d'index,
et l'utilisation des mots-clé
INDEX
or KEY
dans une commande de création de table
CREATE TABLE
. See
Section 13.2.5, « Syntaxe de CREATE TABLE
».
L'utilisation des clauses TEMPORARY
et IF NOT EXISTS
avec
CREATE TABLE
.
L'utilisation de DROP TABLE
avec
les mots-clé IF EXISTS
.
Vous pouvez effacer plusieurs tables avec une seule
commande DROP TABLE
.
La clause LIMIT
de la commande
DELETE
.
La syntaxe INSERT INTO ... SET col_name =
...
.
La clause DELAYED
des commandes
INSERT
et
REPLACE
.
La clause LOW_PRIORITY
des
commandes INSERT
,
REPLACE
, DELETE
et UPDATE
.
L'utilisation de INTO OUTFILE
et
STRAIGHT_JOIN
dans les requêtes
SELECT
. See
Section 13.1.7, « Syntaxe de SELECT
».
L'option SQL_SMALL_RESULT
de la
commande SELECT
.
Vous n'êtes pas obligé de nommer toutes les colonnes
que vous sélectionnez dans la clause GROUP
BY
. Cela donne de meilleures performances
pour certaines situations spécifiques, mais
classiques. See
Section 12.9, « Fonctions et options à utiliser dans les clauses GROUP
BY
».
Vous pouvez spécifier ASC
ou
DESC
dans la clause GROUP
BY
.
La possibilité de modifier les variables dans les
commandes avec l'opérateur :=
:
SELECT @a:=SUM(total),@b=COUNT(*),@a/@b AS avg FROM test_table; SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
Types de colonnes
Les types de colonnes MEDIUMINT
,
SET
, ENUM
et les
types BLOB
et
TEXT
.
Les attributs de champs
AUTO_INCREMENT
,
BINARY
, NULL
,
UNSIGNED
et
ZEROFILL
.
Fonctions et opérateurs
Pour aider les utilisateurs qui viennent d'autres environnements SQL, le serveur MySQL supporte des alias de nombreuses fonctions. Par exemple, toutes les fonctions de chaînes de caractères supportent simultanément les syntaxes ANSI SQL et ODBC.
Le serveur MySQL comprend les opérateurs
||
et &&
comme opérateurs logiques OR
et
AND
, comme en langage C. Pour le
serveur MySQL, les opérateurs ||
et OR
sont synonymes, ainsi que
&&
et
AND
. En conséquence, MySQL ne
supporte pas l'opérateur de concaténation de
chaînes ANSI SQL ||
. Utilisez
plutôt la fonction CONCAT()
. Comme
CONCAT()
prend un nombre illimité
d'arguments, il est facile de convertir des
expressions utilisant ||
, pour
qu'elles fonctionnent sur le serveur MySQL.
L'utilisation de COUNT(DISTINCT
list)
où list
contient
plus d'un élément.
Toutes les comparaisons de chaînes sont insensibles
à la casse par défaut, et l'ordre de tri est
déterminé par le jeu de caractères courant
(ISO-8859-1 Latin1
par défaut). Si
vous en souhaitez un autre, il faut déclarer les
colonnes avec l'attribut BINARY
ou
utiliser l'opérateur BINARY
pour
forcer les comparaisons à prendre en compte la casse,
en fonction du jeu de caractères utilisé sur l'hôte
du serveur MySQL.
L'opérateur %
est synonyme de
MOD()
. C'est à dire que N
% M
est équivalent à
MOD(N,M)
. %
est
supporté pour les programmeurs C, et pour la
compatibilité avec PostgreSQL
.
Les opérateurs =
,
<>
, <=
,<
,
>=
,>
,
<<
,
>>
,
<=>
, AND
,
OR
ou LIKE
peuvent être utilisés pour les comparaisons de
colonnes à gauche de la clause
FROM
dans les commandes
SELECT
. Par exemple :
mysql> SELECT col1=1 AND col2=2 FROM tbl_name;
La fonction LAST_INSERT_ID()
, qui
retourne la plus récente valeur de colonne
AUTO_INCREMENT
. See
Section 12.8.3, « Fonctions d'informations ».
LIKE
est possible avec des colonnes
numériques.
Les opérateurs d'expressions régulières étendus
REGEXP
et NOT
REGEXP
.
CONCAT()
et
CHAR()
avec un argument ou plus de
deux arguments. Avec le serveur MySQL, ces fonctions
peuvent prendre n'importe quel nombre d'arguments.
Les fonctions BIT_COUNT()
,
CASE
, ELT()
,
FROM_DAYS()
,
FORMAT()
, IF()
,
PASSWORD()
,
ENCRYPT()
,
MD5()
, ENCODE()
,
DECODE()
,
PERIOD_ADD()
,
PERIOD_DIFF()
,
TO_DAYS()
et
WEEKDAY()
.
L'utilisation de la fonction TRIM()
pour réduire les chaînes. L'ANSI SQL ne supporte que
les suppressions de caractères uniques.
Les fonctions de groupe de la clause GROUP
BY
STD()
,
BIT_OR()
,
BIT_AND()
,
BIT_XOR()
et
GROUP_CONCAT()
. See
Section 12.9, « Fonctions et options à utiliser dans les clauses GROUP
BY
».
Pour une liste hiérarchisée des nouvelles extensions qui seront ajoutées à MySQL, vous pouvez consulter la liste de tâche en ligne sur http://dev.mysql.com/doc/mysql/en/TODO.html. C'est la dernière liste qui est utilisée dans ce formulaire. See Section B.8, « Les évolutions de MySQL (la liste des tâches) ».
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.