CHECK TABLEtbl_name
[,tbl_name
] ... [option
] ...option
= {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}
CHECK TABLE
prüft eine oder mehrere
Tabellen auf Fehler. CHECK TABLE
funktioniert bei MyISAM
- und
InnoDB
-Tabellen. Bei
MyISAM
-Tabellen werden auch die
Schlüsselstatistiken aktualisiert.
CHECK TABLE
kann auch Views auf Probleme
prüfen, z. B. in der View-Definition referenzierte Tabellen,
die nicht mehr vorhanden sind.
CHECK TABLE
gibt eine Ergebnismenge mit den
folgenden Spalten zurück:
Spalte | Wert |
Table |
der Tabellenname |
Op |
ist immer check
|
Msg_type |
status , error ,
info oder
warning
|
Msg_text |
die Nachricht |
Beachten Sie, dass die Anweisung unter Umständen viele
Datensätze für die überprüfte Tabelle ausgeben kann. Der
letzte Datensatz hat den Msg_type
-Wert
status
; Msg_text
sollte
normalerweise den Wert OK
haben. Wenn Sie
nicht den Wert OK
oder aber die Meldung
Table is already up to date
erhalten,
sollten Sie eine Reparatur der Tabelle durchführen. Siehe
auch Abschnitt 5.10.4, „Benutzung von myisamchk
für Tabellenwartung und
Absturzreparatur“. Table is
already up to date
bedeutet, dass die
Speicher-Engine für die Tabelle angegeben hat, dass es keine
Notwendigkeit zur Überprüfung gibt.
Die verschiedenen Prüfoptionen, die angegeben werden können,
sind in der folgenden Tabelle aufgeführt. Die Optionen dienen
nur der Überprüfung von MyISAM
-Tabellen;
bei InnoDB
-Tabellen und Views werden sie
ignoriert.
Typ | Bedeutung |
QUICK |
überprüft Datensätze nicht auf falsche Verknüpfungen. |
FAST |
Überprüft nur Tabellen, die nicht ordnungsgemäß geschlossen wurden. |
CHANGED |
überprüft nur solche Tabellen, die seit der letzten Überprüfung geändert oder aber nicht korrekt geschlossen wurden. |
MEDIUM |
prüft Datensätze, um sicherzustellen, dass gelöschte Verknüpfungen gültig sind. Hierbei wird auch eine Schlüsselprüfsumme für die Datensätze berechnet, die dann mit einer berechneten Prüfsumme für die Schlüssel verglichen wird. |
EXTENDED |
führt eine vollständige Schlüsselsuche für alle Schlüssel in jedem Datensatz durch. Hierdurch wird sichergestellt, dass die Tabelle hundertprozentig konsistent ist, der Vorgang dauert aber sehr lange. |
Wenn keine der Optionen QUICK
,
MEDIUM
oder EXTENDED
angegeben wird, wird standardmäßig MEDIUM
als Prüftyp für dynamische
MyISAM
-Tabellen verwendet. Dies hat
dieselben Auswirkungen wie die Ausführung von
myisamchk --medium-check
tbl_name
für die
Tabelle. Auch bei statischen
MyISAM
-Tabellen ist
MEDIUM
der Standardtyp, sofern nicht
CHANGED
oder FAST
angegeben wurde. (In diesen Fällen ist
QUICK
der Vorgabewert.) Der Datensatzscan
wird bei CHANGED
und
FAST
übersprungen, weil die Datensätze
sehr selten beschädigt sind.
Sie können Prüfoptionen auch kombinieren. Im folgenden Beispiel etwa erfolgt eine schnelle Prüfung der Tabelle, um zu ermitteln, ob sie korrekt geschlossen wurde:
CHECK TABLE test_table FAST QUICK;
Hinweis: In manchen Fällen
verändert CHECK TABLE
die Tabelle. Dies
geschieht, wenn die Tabelle als „beschädigt“
oder „nicht korrekt geschlossen“ gekennzeichnet
wurde, aber CHECK TABLE
keine Probleme in
der Tabelle findet. In diesem Fall kennzeichnet CHECK
TABLE
die Tabelle als fehlerfrei.
Wenn eine Tabelle beschädigt ist, liegt das Problem wahrscheinlich bei den Indizes und nicht im Datenteil vor. Alle bislang genannten Prüftypen führen eine umfassende Indexprüfung durch und sollten aufgrund dessen die meisten Fehler finden.
Wenn Sie eine Tabelle, bei der Sie davon ausgehen, dass sie in
Ordnung ist, nur sicherheitshalber überprüfen wollen, dann
sollten Sie entweder keine Prüfoption oder die Option
QUICK
angeben. Letzteres sollten Sie tun,
wenn Sie sehr in Eile sind und das sehr geringe Risiko in Kauf
nehmen wollen, dass QUICK
einen Fehler in
der Datendatei nicht findet. (In den meisten Fällen sollte
MySQL bei normaler Verwendung alle ggf. in der Datendatei
vorhandenen Fehler finden. Geschieht dies, so wird die Tabelle
als „beschädigt“ gekennzeichnet und kann erst
wieder verwendet werden, nachdem sie repariert wurde.)
FAST
und CHANGED
sollen
in erster Linie aus Skripten (die etwa mit
cron ausgeführt werden) heraus verwendet
werden, wenn Sie Ihre Tabellen von Zeit zu Zeit überprüfen
wollen. In den meisten Fällen ist FAST
CHANGED
vorzuziehen. (Der einzige Fall, wo
dies nicht zutrifft, liegt vor, wenn Sie annehmen, einen Bug
im MyISAM
-Code gefunden zu haben.)
EXTENDED
sollte erst verwendet werden, wenn
Sie bereits eine normale Überprüfung durchgeführt haben,
aber immer noch merkwürdige Fehler zu einer Tabelle erhalten,
sobald MySQL versucht, einen Datensatz zu aktualisieren oder
einen Datensatz nach seinem Schlüssel zu finden. Die
Wahrscheinlichkeit, dass so etwas nach einer normalen
Überprüfung passiert, ist sehr gering.
Einige Probleme, die von CHECK TABLE
gemeldet werden, können nicht automatisch behoben werden:
Found row where the auto_increment column has the
value 0
.
Das bedeutet, dass Sie einen Datensatz in der Tabelle
haben, bei dem die
AUTO_INCREMENT
-Indexspalte den Wert 0
enthält. (Ein Datensatz, bei dem die
AUTO_INCREMENT
-Spalte 0 ist, kann
tatsächlich erzeugt werden, indem die Spalte mit
UPDATE
explizit auf 0 gesetzt wird.)
Dies ist an sich kein Fehler, kann aber Probleme
verursachen, wenn Sie beschließen, die Tabelle zu
speichern und sie dann wiederherzustellen, oder eine
ALTER TABLE
-Anweisung an die Tabelle
absetzen. In diesem Fall ändert die
AUTO_INCREMENT
-Spalte ihren Wert
entsprechend den Regeln für
AUTO_INCREMENT
-Spalten, was Probleme
wie beispielsweise Schlüsseldubletten verursachen kann.
Um die Warnung zu beseitigen, führen Sie einfach eine
UPDATE
-Anweisung aus, um die Spalte auf
einen anderen Wert als 0 zu setzen.
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.