| 1.6 Les évolutions de MySQL (la liste des tâches)
 1 Informations générales
 Manuel de Référence MySQL 4.1 : Version Française
 
 . Nouvelles fonctionnalités prévues pour la version 5.0
 . Nouvelles fonctionnalités prévues pour 5.1
 ->Ce qui doit être fait dans un futur proche
 . Ce qui est prévu à moyen terme
 . Ce qui n'est pas prévu
 
 
 | 
  1.6.3 Ce qui doit être fait dans un futur proche 
 
     Nouvelle fonctionnalité
    
Commande  
CONNECT BY PRIOR ...
 , inspirée d'Oracle, pour traiter
les structures de type arbre (hiérarchisée).
Tous les types manquants de ANSI92 et ODBC 3.0.
Ajout de  
SUM(DISTINCT)
 .
INSERT SQL_CONCURRENT
  et  
mysqld --concurrent-insert
  pour faire
des insertions concurrents à la fin du fichier, même si il est verrouillé
en lecture.
Permettre la modification de variables dans une commande  
UPDATE
 . 
Par exemple : 
 
UPDATE TABLE foo SET @a=a+b,a=@a, b=@a+c
 .
Changer le moment de modifications des variables, pour que l'on puisse
les utiliser avec les commandes de groupement  
GROUP BY
 , 
comme ceci : 
 
SELECT id, @a:=COUNT(*), SUM(sum_col)/@a FROM table_name GROUP BY id
 .
Ajout de l'option  
IMAGE
  à la commande  
LOAD DATA INFILE
 
pour ne pas modifier les champs  
TIMESTAMP
  et  
AUTO_INCREMENT
 .
Ajout de la syntaxe  
LOAD DATE INFILE ... UPDATE
 , qui fonctionne comme ceci :
 
Pour les tables ayant des clés primaires, si les données contiennent
une clé primaire, les données qui existent et correspondent à cette clé,
sont modifiées. Cependant, les colonnes  
omises
  sont ignorées.
Pour les tables ayant une clé primaire dont il manque une partie
dans les données entrantes, ou qui n'ont pas de clé primaire, 
le flux est traité comme  
LOAD DATA INFILE ... REPLACE INTO
 .
Rendre la syntaxe  
LOAD DATA INFILE
  utilisable comme ceci : 
 
Cela peut être utilisé pour ignorer des colonnes supplémentaires dans le fichier texte,
ou pour modifier des colonnes en fonction de données dans les valeurs entrantes.| 
LOAD DATA INFILE 'file_name.txt' INTO TABLE tbl_nameTEXT_FIELDS (text_field1, text_field2, text_field3)
 SET table_field1=CONCAT(text_field1, text_field2),
 table_field3=23
 IGNORE text_field3
 | 
De nouvelles fonctions pour travailler avec le type de colonne  
SET
  :
 
ADD_TO_SET(value,set)
REMOVE_FROM_SET(value,set)
Si vous interrompez  
mysql
  au beau milieu d'une requête, vous
pouvez ouvrir une autre connexion pour tuer la requête en cours.
Ou bien, une tentative doit être faite pour détecter cela sur le serveur.
Ajout d'une interface au moteur de sauvegarde pour que vous puissiez 
l'utiliser comme table système. Cela sera un peu lent si vous demandez toutes
les informations de toutes les tables, mais très souple. 
 
SHOW INFO FROM tbl_name
  doit être implémenté pour connaître les
informations de bases des tables.
Permettre  
SELECT a FROM crash_me LEFT JOIN crash_me2 USING (a)
 ; 
dans ce cas,  
a
  est supposé provenir de la table  
crash_me
 .
Les options  
DELETE
  et  
REPLACE
  dans les commandes  
UPDATE
 
(cela va effacer les lignes lors d'un doublon dans la requête).
Modification du format de  
DATETIME
  pour stocker les fractions de secondes.
Rendre possible l'utilisation de la bibliothèque GNU  
regexp
  au lieu de 
la bibliothèque actuelle (la bibliothèque GNU devrait être plus rapide
que l'ancienne).
 
     Compatibilité avec les standards, migration et portabilité.
    
Ne pas utiliser de valeur par défaut ( 
DEFAULT
 ) pour les colonnes.
Indiquer une erreur lors des commandes  
INSERT
 , si elle contient une
colonne qui n'a pas de valeur par défaut.
Ajout des fonctions de groupement  
ANY()
 ,  
EVERY()
  et  
SOME()
 .
En ANSI SQL, elles ne fonctionnent que sur les colonnes de type booléens, mais
nous pouvons étendre leur champ d'action aux colonnes et expression, en 
appliquant la règle suivante : value == 0 -> FALSE et
value <> 0 -> TRUE.
Correction du type pour que  
MAX(column)
  ait le même type de colonne : 
 
| 
mysql> CREATE TABLE t1 (a DATE);mysql> INSERT INTO t1 VALUES (NOW());
 mysql> CREATE TABLE t2 SELECT MAX(a) FROM t1;
 mysql> SHOW COLUMNS FROM t2;
 | 
 
     Amélioration des performances
    
Ne permettre qu'à un nombre défini de threads d'exécuter 
des réparations  
MyISAM
  simultanément.
Changer  
INSERT ... SELECT
  pour utiliser optionnellement des insertions
simultanées.
Ajouter une option pour écrire sur le disque les pages de clés pour
les tables à clés retardées, qui n'ont pas 
été sauvées dernièrement.
Permettre les jointures sur des parties de clés (problème d'optimisation).
Un analyseur de logs, qui permettrait d'extraire des informations sur
les tables les plus souvent utilisées, les jointures, etc... 
Cela permettra aux utilisateurs d'identifier les tables qui peuvent
être optimisées.
 
     Internationalisation
    
 
     Ergonomie
    
Retourner le type de champs original lors des requêtes
 
SELECT MIN(column) ... GROUP BY
 .
Rendre possible la spécification de  
long_query_time
  avec une granularité
de l'ordre de la microseconde.
Intégrer le code de  
myisampack
  dans le serveur, activer les commandes 
 
PACK
  or  
COMPRESS
  depuis le serveur.
Ajouter un cache de buffer de clé temporaire durant les commandes 
 
INSERT/DELETE/UPDATE
  pour que nous puissions nous rétablir
si jamais le fichier d'index est plein.
Si vous effectuez la commande  
ALTER TABLE
  sur une table qui est 
un lien symbolique sur un autre disque, les tables temporaires seront
aussi faites sur ce disque.
Implémenter un type  
DATE/DATETIME
  qui gère les fuseaux horaire correctement,
pour résoudre le problème du décalage horaire.
Corriger la configuration pour que l'on puisse compiler toute les bibliothèques
(comme  
MyISAM
 ) sans les threads.
Permettre toutes les variables SQL dans la clause  
LIMIT
 , comme par exemple
 
LIMIT @a,@b
 .
Affichage automatique de  
mysql
  vers un navigateur web.
LOCK DATABASES
  (avec différentes options).
De nombreuses nouvelles variables dans  
SHOW STATUS
 . Les lignes
lues et modifiées. Les sélections sur tables uniques et les jointures.
Le nombre moyen  de tables dans une sélection. Le nombre de requêtes 
 
ORDER BY
  et  
GROUP BY
 .
mysqladmin copy database new-database
 ; a besoin de la commande  
COPY
 
dans  
mysqld
 .
La liste des processus doit afficher le nombre de requêtes et de threads.
SHOW HOSTS
  affichera les informations concernant le cache de noms d'hôtes.
Changer le nom des tables de chaîne vide à  
NULL
  pour les colonnes calculées.
Ne pas utiliser la fonction  
Item_copy_string
  sur les valeurs numériques,
pour éviter les conversions nombre -> chaîne -> nombre en cas de : 
 
SELECT COUNT(*)*(id+0) FROM table_name GROUP BY id
Changer  
ALTER TABLE
  pour qu'il n'interrompe pas le client
qui exécute des  
INSERT DELAYED
 .
Lorsque les colonnes sont spécifiées dans  
UPDATE
 ,
elles contiennent les anciennes valeurs d'avant la modification.
 
     Nouveaux systèmes d'exploitation.
    
Port des clients MySQL vers LynxOS.
 |