1.8 Quels standards respecte MySQL?
1 Informations générales
Manuel de Référence MySQL 4.1 : Version Française
. Quels standards suit MySQL ? . Sélectionner les modes SQL . Exécuter MySQL en mode ANSI ->MySQL Extensions to the SQL-92 Standard . Différences entre MySQL et le standard SQL-92 . Comment MySQL gère les contraintes . Erreurs connues, et limitations de MySQL
|
1.8.4 MySQL Extensions to the SQL-92 Standard
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 :
-
Les types de colonnes
MEDIUMINT
,
SET
,
ENUM
et
les types
BLOB
et
TEXT
.
-
Les attributs de champs
AUTO_INCREMENT
,
BINARY
,
NULL
,
UNSIGNED
et
ZEROFILL
.
-
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.
-
le serveur MySQL fait correspondre à chaque base un dossier dans le système de
fichiers, et à chaque table, il fait correspondre un fichier, placé dans le
dossier de base.Ceci a quelques conséquences :
-
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).
Sensibilité à la casse pour les noms .
-
Les bases de données, les tables, les index, les colonnes et les
alias peuvent commencer par un chiffre (mais ne peuvent pas être constitués
uniquement de chiffres).
-
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.
-
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
.
-
LIKE
est possible avec des colonnes numériques.
-
Utilisez
INTO OUTFILE
et
STRAIGHT_JOIN
dans les requêtes
SELECT
. Syntaxe des
SELECT
.
-
L'option
SQL_SMALL_RESULT
de la commande
SELECT
.
-
La commande
EXPLAIN SELECT
pour avoir le détail des
jointures de tables.
-
L'utilisation de noms d'index, de préfixes d'index, et
l'utilisation des mots-clés
INDEX
or
KEY
dans
une commande de création de table
CREATE TABLE
.
Syntaxe de
CREATE TABLE
.
-
L'utilisation des clauses
TEMPORARY
et
IF NOT EXISTS
avec
CREATE TABLE
.
-
L'utilisation de
COUNT(DISTINCT list)
où
list
contient
plus d'un élément.
-
L'utilisation de
CHANGE col_name
,
DROP col_name
ou
DROP INDEX
,
IGNORE
ou
RENAME
dans une commande
ALTER TABLE
. Syntaxe de
ALTER TABLE
.
-
L'utilisation de
RENAME TABLE
. Syntaxe de
RENAME TABLE
.
-
L'utilisation de multiple
ADD
,
ALTER
,
DROP
et
CHANGE
dans les clauses de la commande
ALTER TABLE
.
-
L'utilisation de
DROP TABLE
avec les mots-clés
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 la commande
LOAD DATA INFILE
. Dans de nombreuses situations,
cette syntaxe est compatible avec la commande d'Oracle
LOAD DATA INFILE
. Syntaxe des
LOAD DATA INFILE
.
-
Les commandes
ANALYZE TABLE
,
CHECK TABLE
,
OPTIMIZE TABLE
et
REPAIR TABLE
.
-
La commande
SHOW
.
Syntaxe de
SHOW
.
-
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
'\'
.
-
La commande
SET
. Syntaxe de
SET
.
-
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.
Fonctions à utiliser dans les définitions
GROUP BY
.
-
Vous pouvez spécifier
ASC
ou
DESC
dans la clause
GROUP BY
.
-
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.
-
CREATE DATABASE
et
DROP DATABASE
.
Syntaxe de
CREATE DATABASE
.
-
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()
.
mysql_insert_id()
.
-
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()
.
Group by functions and modifiers.
-
L'utilisation de
REPLACE
à la place de
DELETE
+
INSERT
.
Syntaxe des
REPLACE
.
-
Les commandes
FLUSH
,
RESET
et
DO
.
-
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;
|
|