| 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
 ->Extensions MySQL au standard SQL-92
 . Différences entre MySQL et le standard SQL-92
 . Comment MySQL gère les contraintes
 . Erreurs connues, et limitations de MySQL
 
 
 | 
  1.8.4 Extensions MySQL au standard SQL-92  
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 :  
 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é.| 
SELECT /*! STRAIGHT_JOIN */ col_name FROM table1,table2 WHERE ...
 | 
 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
 .| 
CREATE /*!32302 TEMPORARY */ TABLE t (a int);
 | 
 
Voici une liste des apports spécifiques de MySQL : 
 
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.  Liste de tâches 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).
 Identifier Case Sensitivity .
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
 .
 
CREATE DATABASE
 Syntax .
La commande  
DO
 .
La commande  
EXPLAIN SELECT
  pour avoir le détail des 
jointures de tables.
Les commandes  
FLUSH
  et  
RESET
 .
La commande  
SET
 .  Syntaxe de 
SET
 .
La commande  
SHOW
 .
 Syntaxe de 
SET
 et 
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
 .  Syntaxe de 
LOAD DATA INFILE
 .
L'utilisation de  
RENAME TABLE
 .  
RENAME TABLE
 Syntax .
L'utilisation de  
REPLACE
  au lieu de  
DELETE
  +  
INSERT
 .
 Syntaxe de 
REPLACE
 .
L'utilisation de  
CHANGE col_name
 ,  
DROP col_name
  ou 
 
DROP INDEX
 ,  
IGNORE
  ou  
RENAME
  dans une commande
 
ALTER TABLE
 .  
ALTER TABLE
 Syntax .
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
 .
 
CREATE TABLE
 Syntax .
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
 .  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.
 Fonctions à utiliser dans les définitions 
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
 .
 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()
 .
 Fonctions à utiliser dans les définitions 
GROUP BY
 . |