(mysql.info) check-table
Info Catalog
(mysql.info) backup-table
(mysql.info) table-maintenance-sql
(mysql.info) checksum-table
13.5.2.3 `CHECK TABLE' Syntax
.............................
CHECK TABLE TBL_NAME [, TBL_NAME] ... [OPTION] ...
OPTION = {FOR UPGRADE | QUICK | FAST | MEDIUM | EXTENDED | CHANGED}
`CHECK TABLE' checks a table or tables for errors. `CHECK TABLE' works
for `MyISAM', `InnoDB', and (as of MySQL 5.0.16) `ARCHIVE' tables. For
`MyISAM' tables, the key statistics are updated as well.
As of MySQL 5.0.2, `CHECK TABLE' can also check views for problems,
such as tables that are referenced in the view definition that no
longer exist.
`CHECK TABLE' returns a result set with the following columns:
*Column* *Value*
`Table' The table name
`Op' Always `check'
`Msg_type' One of `status', `error', `info', or
`warning'
`Msg_text' The message
Note that the statement might produce many rows of information for each
checked table. The last row has a `Msg_type' value of `status' and the
`Msg_text' normally should be `OK'. If you don't get `OK', or `Table is
already up to date' you should normally run a repair of the table. See
table-maintenance. `Table is already up to date' means that the
storage engine for the table indicated that there was no need to check
the table.
The `FOR UPGRADE' option checks whether the named tables are compatible
with the current version of MySQL. This option was added in MySQL
5.0.19. With `FOR UPGRADE', the server checks each table to determine
whether there have been any incompatible changes in any of the table's
data types or indexes since the table was created. If not, the check
succeeds. Otherwise, if there is a possible incompatibility, the server
runs a full check on the table (which might take some time). If the
full check succeeds, the server marks the table's `.frm' file with the
current MySQL version number. Marking the `.frm' file ensures that
further checks for the table with the same version of the server will
be fast.
Incompatibilities might occur because the storage format for a data
type has changed or because its sort order has changed. Our aim is to
avoid these changes, but occasionally they are necessary to correct
problems that would be worse than an incompatibility between releases.
Currently, `FOR UPGRADE' discovers these incompatibilities:
* The indexing order for end-space in `TEXT' columns for `InnoDB'
and `MyISAM' tables changed between MySQL 4.1 and 5.0.
* The storage method of the new `DECIMAL' data type changed between
MySQL 5.0.3 and 5.0.5.
The other check options that can be given are shown in the following
table. These options apply only to checking `MyISAM' tables and are
ignored for `InnoDB' tables and views.
*Type* *Meaning*
`QUICK' Do not scan the rows to check for incorrect links.
`FAST' Check only tables that have not been closed properly.
`CHANGED' Check only tables that have been changed since the last
check or that have not been closed properly.
`MEDIUM' Scan rows to verify that deleted links are valid. This also
calculates a key checksum for the rows and verifies this
with a calculated checksum for the keys.
`EXTENDED' Do a full key lookup for all keys for each row. This ensures
that the table is 100% consistent, but takes a long time.
If none of the options `QUICK', `MEDIUM', or `EXTENDED' are specified,
the default check type for dynamic-format `MyISAM' tables is `MEDIUM'.
This has the same result as running `myisamchk --medium-check TBL_NAME'
on the table. The default check type also is `MEDIUM' for static-format
`MyISAM' tables, unless `CHANGED' or `FAST' is specified. In that case,
the default is `QUICK'. The row scan is skipped for `CHANGED' and
`FAST' because the rows are very seldom corrupted.
You can combine check options, as in the following example that does a
quick check on the table to determine whether it was closed properly:
CHECK TABLE test_table FAST QUICK;
* In some cases, `CHECK TABLE' changes the table. This happens if
the table is marked as `corrupted' or `not closed properly' but `CHECK
TABLE' does not find any problems in the table. In this case, `CHECK
TABLE' marks the table as okay.
If a table is corrupted, it is most likely that the problem is in the
indexes and not in the data part. All of the preceding check types
check the indexes thoroughly and should thus find most errors.
If you just want to check a table that you assume is okay, you should
use no check options or the `QUICK' option. The latter should be used
when you are in a hurry and can take the very small risk that `QUICK'
does not find an error in the data file. (In most cases, under normal
usage, MySQL should find any error in the data file. If this happens,
the table is marked as `corrupted' and cannot be used until it is
repaired.)
`FAST' and `CHANGED' are mostly intended to be used from a script (for
example, to be executed from `cron') if you want to check tables from
time to time. In most cases, `FAST' is to be preferred over `CHANGED'.
(The only case when it is not preferred is when you suspect that you
have found a bug in the `MyISAM' code.)
`EXTENDED' is to be used only after you have run a normal check but
still get strange errors from a table when MySQL tries to update a row
or find a row by key. This is very unlikely if a normal check has
succeeded.
Some problems reported by `CHECK TABLE' cannot be corrected
automatically:
* `Found row where the auto_increment column has the value 0'.
This means that you have a row in the table where the
`AUTO_INCREMENT' index column contains the value 0. (It is
possible to create a row where the `AUTO_INCREMENT' column is 0 by
explicitly setting the column to 0 with an `UPDATE' statement.)
This is not an error in itself, but could cause trouble if you
decide to dump the table and restore it or do an `ALTER TABLE' on
the table. In this case, the `AUTO_INCREMENT' column changes value
according to the rules of `AUTO_INCREMENT' columns, which could
cause problems such as a duplicate-key error.
To get rid of the warning, simply execute an `UPDATE' statement to
set the column to some value other than 0.
Info Catalog
(mysql.info) backup-table
(mysql.info) table-maintenance-sql
(mysql.info) checksum-table
automatically generated byinfo2html