• Aucun résultat trouvé

Extensions MySQL à la norme ANSI SQL 92

65. COMPACT

99.1. Extensions MySQL à la norme ANSI SQL 92

Vous ne trouverez probablement ces extensions 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 */ nom_colonne FROM table1,table2 WHERE ...

Voici la liste des extensions MySQL :

Les types de colonnes MEDIUMINT, SET, ENUM et tous les types BLOB et TEXT.

Les attributs de champs AUTO_INCREMENT, BINARY, UNSIGNED et ZEROFILL.

• Toutes les comparaisons de chaînes sont insensibles à la casse par défaut, et le classement des chaînes est basé sur la table de caractères courante (par défaut, ISO-8859-1 Latin1). Si vous souhaitez que ces opérations soient sensibles à la casse, ajoutez l'attribut BINARY aux colonnes concernées, ou bien utilisez 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.

• MySQL fait correspondre à chaque base de données un dossier, et les tables de cette base seront représentées par des fichiers. Cela a deux conséquences :

1. Les noms de bases de données et de tables sont dépendants du système d'exploitation sur lequel MySQL tourne, notamment concertant la casse des noms. Si vous avez des difficultés à vous souvenir des noms de tables, utilisez une convention cohérente, comme par exemple celle de mettre tous les noms en minuscules.

2. Les noms de bases, de tables, d'index, de colonnes ou d'alias peuvent commencer par un chiffre (mais ne doivent pas être consistitués seulement de chiffres).

Remarque : Vous pouvez utiliser les commandes du système pour sauvegarder, renommer, déplacer, effacer et copier des tables. Par exemple, vous pouvez copier le ‘.ISD’, ‘.ISM’ et ‘.frm’ pour créer une nouvelle table.

• En SQL pur, vous pouvez accéder à une table d'une autre base de données avec la syntaxe :

nom_base_de_donnees.nom_table. Certains serveurs SQL proposent la même fonctionnalité, mais

l'appelle User space. MySQL n'accepte pas les espaces dans les noms de tables.

• LIKE est utilisable avec les colonnes de type numérique

Possibilité d'utilisation de INTO OUTFILE et STRAIGHT_JOIN dans les commandes SELECT.

L'option SQL_SMALL_RESULT dans une commande SELECT.

EXPLAIN SELECT permet de voir de quelle manière les tables ont été regroupées.

L'utilisation des index de noms, ou des index sur le préfixe d'un champ et l'utilisation de INDEX ou KEY dans une commande CREATE TABLE.

Attribut TEMPORARY et IF NOT EXISTS dans la commande CREATE TABLE.

Utilisation de COUNT(DISTINCT liste) lorsque 'liste' contient plus d'un élément.

Utilisation de CHANGE nom_colonne, DROP nom_colonne ou DROP INDEX dans les commandes

ALTER TABLE..

Utilisation de IGNORE dans les commandes ALTER TABLE.

Utilisation de multiples ADD, ALTER, DROP ou CHANGE dans les commandes ALTER TABLE.

Utilisation de DROP TABLE avec les mots clés IF EXISTS.

Vous pouvez supprimer plusieurs tables avec une seule commande DROP TABLE.

Clause LIMIT dans les commandes DELETE.

L'option DELAYED dans les commandes INSERT et REPLACE.

L'option LOW_PRIORITY dans les commandes INSERT, REPLACE, DELETE et UPDATE.

Utilisation de LOAD DATA INFILE. Dans certains cas, cette syntaxe est compatible avec la fonction

LOAD DATA INFILE d'Oracle. Elle évite dans beaucoup de cas d’avoir à écrire un programme

spécifique pour charger des fichiers dans une base. Cette commande est capable de lire de nombreux formats différents.

Voici comment on utilise la commande LOAD DATA INFILE pour insérer en une seule fois le contenu du fichier ‘films.txt’ dans la table ‘films’ :

- L’option LOCAL indique au serveur que le fichier se trouve sur la machine du client mysql. Par défaut, le serveur cherche le fichier sur sa propre machine, dans le répertoire contenant la base de données.

- Si le client mysql n’a pas été lancé dans le répertoire où se trouve le fichier ‘films.txt’, il faut indiquer le chemin complet du fichier.

- Enfin il existe de nombreuses options pour indiquer le format du fichier. Ici on indique qu’une ligne dans le fichier correspond à une ligne dans la table, et que les valeurs des attributs dans le fichier sont séparées par des points-virgules.

La commande OPTIMIZE TABLE..

La commande SHOW.

• Les chaînes de caractères peuvent être définies avec " ou ', et pas seulement avec '.

• Utilisation du caractère d'échappement ‘\’.

La commande SET OPTION.

Vous n'avez pas à nommer expressément toutes les colonnes dans une clause GROUP BY. Mais cela peut permettre d'accélérer quelques requêtes très spécifiques

• Pour aider les utilisateurs d'autres environnements SQL, MySQL dispose d'aliases pour de nombreuses fonctions. Par exemple, toutes les fonctions sur les chaînes de caractères supportent la syntaxe ANSI SQL et ODBC.

MySQL accepte les opérateurs logiques || 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.

L'opérateur % 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.

Les opérateurs =, <>, <= ,<, >=,>, <<, >>, <=>, AND, OR ou LIKE peuvent être utilisés dans les comparaisons de colonnes avec la clause FROM dans les commandes SELECT. Par exemple :

SELECT col1=1 AND col2=2 FROM nom_table

La fonction MYSQL_INSERT_ID().

Les opérateurs d'expressions régulières REGEXP et NOT REGEXP.

CONCAT() ou CHAR() avec plus d'un argument. (Avec MySQL, ces fonctions peuvent prendre un

nombre arbitraire d'arguments).

Les fonctions supplémentaires BIT_COUNT(), ELT(), FROM_DAYS(), FORMAT(), IF(),

PASSWORD(), ENCRYPT(), md5(), ENCODE(), DECODE(), PERIOD_ADD(), PERIOD_DIFF(), TO_DAYS(), ou WEEKDAY().

Utilisation de TRIM() pour supprimer les espaces de début et fin de chaîne. ANSI SQL ne supporte que la suppression de caractères uniques.

Les fonctions de GROUP BY : STD(), BIT_OR() et BIT_AND().

Utilisation de REPLACE à la place de DELETE + INSERT..

99.2. Fonctionnalités manquantes

Documents relatifs