| 15.2 Tables assemblées MERGE
 15 Types de tables MySQL
 Manuel de Référence MySQL 4.1 : Version Française
 
 ->Problèmes avec les tables MERGE
 
 
 | 
  15.2.1 Problèmes avec les tables MERGE 
 
Voici une liste des problèmes connus avec les tables de type  
MERGE
  :
 
Si vous utilisez la commande  
ALTER TABLE
  pour modifier une table de type 
 
MERGE
  en un autre type de table, la liste des tables sous-jacentes sera
perdue. Au lieu de cela, les lignes des tables seront copiées dans la nouvelle
table, puis on lui assignera le nouveau type.
Avant MySQL 4.1.1, toutes les tables sous-jacentes et la table  
MERGE
  
devaient être dans la même base de données.
REPLACE
  ne fonctionne pas.
Vous ne pouvez pas utiliser 
 
DROP TABLE
 ,
 
ALTER TABLE
 ,
 
DELETE FROM
  dans clause  
WHERE
 ,
 
REPAIR TABLE
 ,
 
TRUNCATE TABLE
 ,
 
OPTIMIZE TABLE
 , ou
 
ANALYZE TABLE
 
sur l'une des tables qui est dans une table  
MERGE
  ``ouverte''.
Si vous faîtes cela, la table  
MERGE
  va utiliser la table originale,
et vous obtiendrez des résultats étranges. Le plus simple est d'utiliser la
commande  
FLUSH TABLES
  pour s'assurer qu'aucune table  
MERGE
 
ne reste ``ouverte.''
Une table  
MERGE
  peut pas pas supporter de contrainte de type  
UNIQUE
 
sur toute la table. Lorsque vous faites une insertion, les données vont dans la
première ou la dernière table (suivant la méthode d'insertion  
INSERT_METHOD=xxx
 ) 
et cette table  
MyISAM
  s'assure que les données sont uniques, mais rien n'est
fait pour vérifier l'unicité auprès des autres tables  
MyISAM
  tables.
Avant MySQL 3.23.49,  
DELETE FROM merge_table
  utilisé sans clause  
WHERE
 
va uniquement détruire la table assemblée, mais ne va pas toucher les tables
sous-jacentes. En fait, le fichier  
.MRG
  est effacé, mais pas les tables.
RENAME TABLE
  utilisé sur une table de type  
MERGE
  peut
corrompre la table. Cela sera corrigé en MySQL 4.1.x.
La création d'une table de type  
MERGE
  ne vérifie pas si les
tables sous-jacentes sont compatibles. Si vous utilisez une table 
 
MERGE
  de cette façon, vous devriez rencontrer des problèmes très
étranges.
L'ordre des index dans la table  
MERGE
  et ses tables sous-jacentes doit être
le même. Si vous utilisez la commande  
ALTER TABLE
  pour ajouter un index
de type  
UNIQUE
  à une table qui est utilisée dans une table
assemblée  
MERGE
 , puis que vous utilisez  
ALTER TABLE
  pour
ajouter un index normal dans la table  
MERGE
 , l'ordre des clé sera
différent suivant les tables, si jamais il y avait une vieille clé non
unique. Ceci est dû au fait que  
ALTER TABLE
  place les clés  
UNIQUE
  
avant les clés normales, pour être capable de détecter les doublons le plus tôt
possible.
DROP TABLE
  sur une table qui est utilisé par une table  
MERGE
  ne fonctionne
pas sous Windows car le gestionnaire de  
MERGE
  garde les connexions vers les tables
cachées sous la couche MySQL. Comme Windows ne vous permet pas d'effacer une table
qui est ouverte, vous devez d'abord fermer toute les tables  
MERGE
 
(avec la commande  
FLUSH TABLES
 ) ou effacer la table  
MERGE
  avant
de pouvoir effacer la table désirée. Nous allons corriger lorsque nous introduirons
les vues.  
VIEW
 s.
 |