Folgende Probleme mit MERGE
-Tabellen sind
bekannt:
Wenn Sie mit ALTER TABLE
versuchen, eine
MERGE
-Tabelle in eine andere
Speicher-Engine umzuwandeln, geht die Zuordnung der zugrunde
liegenden Tabellen verloren. Stattdessen werden die Zeilen
der zugrunde liegenden MyISAM
-Tabellen in
die geänderte Tabelle kopiert, die dann die neue
Speicher-Engine verwendet.
REPLACE
funktioniert nicht.
DROP TABLE
, ALTER
TABLE
, DELETE
ohne
WHERE
-Klausel, REPAIR
TABLE
, TRUNCATE TABLE
,
OPTIMIZE TABLE
oder ANALYZE
TABLE
dürfen auf keine Tabelle angewendet werden,
die einer offenen MERGE
-Tabelle
zugeordnet ist. Wenn Sie dies tun, verweist die
MERGE
-Tabelle später weiterhin auf die
Originaltabelle, was zu unerwarteten Ergebnissen führen
kann. Am einfachsten können Sie dieses Problem umgehen,
indem Sie mit einer FLUSH
TABLES
-Anweisung vor diesen Operationen dafür
sorgen, dass keine MERGE
-Tabellen offen
bleiben.
Unter Windows funktioniert kein DROP
TABLE
auf einer Tabelle, die gerade von einer
MERGE
-Tabelle benutzt wird, da die
Tabellenzuordnung der Speicher-Engine
MERGE
vor der oberen Schicht von MySQL
verborgen wird. Da Windows das Löschen geöffneter Dateien
nicht gestattet, müssen Sie zuerst alle
MERGE
-Tabellen auf die Festplatte
zurückschreiben (mit FLUSH TABLES
) oder
die MERGE
-Tabelle vor der anderen Tabelle
löschen.
Eine MERGE
-Tabelle kann keine Uniqueness
Constraints über die gesamte Tabelle hinweg aufrecht
erhalten. Wenn Sie ein INSERT
ausführen,
werden die Daten in die erste oder letzte der
MyISAM
-Tabellen geladen (je nach dem Wert
der Option INSERT_METHOD
). MySQL
gewährleistet die Eindeutigkeit von Unique-Keys innerhalb
dieser einen MyISAM
-Tabelle, aber nicht
für die gesamte Tabellengruppe.
Beim Anlegen einer MERGE
-Tabelle wird
nicht geprüft, ob die zugrunde liegenden Tabellen
existieren und gleich strukturiert sind. Wenn die
MERGE
-Tabelle verwendet wird, prüft
MySQL, ob alle zugeordneten Tabellen gleich lange Zeilen
haben, aber narrensicher ist diese Überprüfung nicht.
Legen Sie eine MERGE
-Tabelle aus
ungleichen MyISAM
-Tabellen an, so müssen
Sie sich auf ein paar seltsame Probleme gefasst machen.
Die Reihenfolge der Indizes in der
MERGE
-Tabelle und den ihr zugrunde
liegenden Tabellen sollte gleich sein. Wenn Sie mit
ALTER TABLE
einer Tabelle, die in einer
MERGE
-Tabelle benutzt wird, einen
UNIQUE
-Index hinzufügen, und dann mit
einem weiteren ALTER TABLE
der
MERGE
-Tabelle einen nicht-eindeutigen
Index geben, ist die Reihenfolge der Indizes
unterschiedlich, wenn auch die zugrunde liegende Tabelle
zuvor bereits einen nicht-eindeutigen Index hatte. (Dazu
kommt es, weil ALTER TABLE
UNIQUE
-Indizes vor nicht-eindeutige
Indizes setzt, um das schnelle Auffinden doppelter
Schlüsselwerte zu erleichtern.) Infolgedessen können
Anfragen von Tabellen mit solchen Indizes unerwartete
Ergebnisse liefern.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.