• Aucun résultat trouvé

Extensions de MySQL à la norme ANSI SQL

1.7 Quels standards respecte MySQL?

1.7.3 Extensions de MySQL à la norme ANSI SQL

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 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() et BIT_AND() .

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 &#64;a:=SUM(total),&#64;b=COUNT(*),&#64;a/&#64;b AS avg FROM test_table; SELECT &#64;t1:=(&#64;t2:=1)+&#64;t3:=4,&#64;t1,&#64;t2,&#64;t3;