MySQL apporte quelques extensions à la norme ANSI SQL 92 que vous ne trouverez probablement dans aucune autre base de données. Soyez conscient que si vous utilisez ces extensions, votre code ne sera pas portable sur une autre base SQL. Dans certains cas, vous pouvez écrire du code qui utilise ces extensions MySQL, mais qui est portable, en utilisant les commentaires de la forme /*! ... */. Dans ce cas, MySQL va analyser puis exécuter le code de ce commentaire comme n'importe quelle commande MySQL, mais les autres serveur SQL les ignoreront. Par exemple :@:
SELECT /*! STRAIGHT_JOIN mysql/ php/ nom_colonne FROM table1,table2 WHERE ...
Voici la liste des extensions MySQL:@:
MEDIUMINT, SET, ENUM et tous les types BLOB et TEXT.
AUTO_INCREMENT, BINARY, UNSIGNED et ZEROFILL.
BINARY aux colonnes concernés, ou bien utiliser l'opérateur de transptypage BINARY lors des comparaisons pour qu'elles prennent en compte l'ordre ASCII en cours sur l'hôte MySQL.
nom_base_de_donnees.nom_table. Certains serveurs SQL propose la même fonctionnalité, mais l'appelle User space. MySQL n'accepte pas les espaces de tables comme dans : create table ralph.my_table...IN my_tablespace.
LIKE est utilisable avec les colonnes de type numérique
INTO OUTFILE et STRAIGHT_JOIN dans les commandes SELECT. SELECT.
SQL_SMALL_RESULT dans une commande SELECT.
EXPLAIN SELECT permet de voir de quelle manière les tables ont été regroupées.
INDEX ou KEY dans une commande CREATE TABLE. CREATE TABLE
TEMPORARY et IF NOT EXISTS dans la commande CREATE TABLE.
COUNT(DISTINCT liste) lorsque 'liste' contient plus d'un élément.
CHANGE nom_colonne, DROP nom_colonne ou DROP INDEX dans les commandes ALTER TABLE. ALTER TABLE.
IGNORE dans les commandes ALTER TABLE.
ADD, ALTER, DROP ou CHANGE dans les commandes ALTER TABLE.
DROP TABLE avec les mots clés IF EXISTS.
DROP TABLE.
LIMIT dans les commandes DELETE.
DELAYED dans les commandes INSERT et REPLACE.
LOW_PRIORITY dans les commandes INSERT, REPLACE, DELETE et UPDATE.
LOAD DATA INFILE. Dans certains cas, cette syntaxe est compatibles avec la fonction LOAD DATA INFILE d'Oracle. LOAD DATA.
OPTIMIZE TABLE. OPTIMIZE TABLE.
SHOW. SHOW.
SET OPTION. SET OPTION.
GROUP BY. Mais cela peut permettre d'accélérer quelques requêtes très spécifiques. 7.3.13 Fonctions à utiliser dans les clauses GROUP BY.
|| et && (OR et AND, comme en langage C). Sous MySQL, || et OR sont synonymes, tout comme le sont && et AND. A cause de ce double emploi, MySQL n'accepte pas les opérateurs ANSI SQL || comme additionneur de chaînes; (utilisez à la place CONCAT() ).. Etant donné que CONCAT() prend un nombre arbitraire d'arguments, il est facile de remplacer ||.
CREATE DATABASE ou DROP DATABASE. CREATE DATABASE
% est synonyme de MOD(). C'est à dire que, N % M est équivalent à MOD(N,M). % est hérité du langage C, et permet la compatibilité avec PostgreSQL.
=, <>, <= ,<, >=,>, <<, >>, <=>, AND, OR ou LIKE peuvent être utilisés dans les comparaisons de colonnes avec la clause FROM dans les commandes SELECT. Par exemple :@:
mysql> SELECT col1=1 AND col2=2 FROM nom_table;
LAST_INSERT_ID(). mysql_insert_id.
REGEXP et NOT REGEXP.
CONCAT() ou CHAR() avec plus d'un one argument. (Avec MySQL, ces fonctions peuvent prendre un nombre arbitraire d'arguments).
BIT_COUNT(), ELT(), FROM_DAYS(), FORMAT(), IF(), PASSWORD(), ENCRYPT(), md5(), ENCODE(), DECODE(), PERIOD_ADD(), PERIOD_DIFF(), TO_DAYS(), ou WEEKDAY().
TRIM() pour supprimer les espaces de début et fin de chaîne. ANSI SQL ne supporte que la suppression de caractères uniques.
GROUP BY :@: STD(), BIT_OR() et BIT_AND().
REPLACE à la place de DELETE + INSERT. REPLACE.
FLUSH flush_option.