When you create a new table, you can specify a special-purpose
storage engine to use by adding an
option to the
-- ENGINE=INNODB not needed unless you have set a different default storage engine. CREATE TABLE t1 (i INT) ENGINE = INNODB; -- Simple table definitions can be switched from one to another. CREATE TABLE t2 (i INT) ENGINE = CSV; -- Some storage engines have their own specific clauses in CREATE TABLE syntax. CREATE TABLE t3 (i INT) ENGINE = MEMORY USING BTREE;
When you omit the
ENGINE option, the default
storage engine is used. The default engine is
InnoDB in MySQL 5.6. You
can specify the default engine by using the
startup option, or by setting the
default-storage-engine option in
my.cnf configuration file.
You can set the default storage engine for the current session by
As of MySQL 5.6.3, the storage engine for
TEMPORARY tables created with
TABLE can be set separately from the engine for
permanent tables by setting the
either at startup or at runtime. Before MySQL 5.6.3,
default_storage_engine sets the
engine for both permanent and
To convert a table from one storage engine to another, use an
ALTER TABLE statement that
indicates the new engine:
ALTER TABLE t ENGINE = InnoDB;
If you try to use a storage engine that is not compiled in or that
is compiled in but deactivated, MySQL instead creates a table
using the default storage engine. For example, in a replication
setup, perhaps your master server uses
tables for maximum safety, but the slave servers use other storage
engines for speed at the expense of durability or concurrency.
By default, a warning is generated whenever
CREATE TABLE or
ALTER TABLE cannot use the default
storage engine. To prevent confusing, unintended behavior if the
desired engine is unavailable, enable the
NO_ENGINE_SUBSTITUTION SQL mode.
If the desired engine is unavailable, this setting produces an
error instead of a warning, and the table is not created or
altered. See Section 5.1.7, “Server SQL Modes”.
For new tables, MySQL always creates an
file to hold the table and column definitions. The table's index
and data may be stored in one or more other files, depending on
the storage engine. The server creates the
.frm file above the storage engine level.
Individual storage engines create any additional files required
for the tables that they manage. If a table name contains special
characters, the names for the table files contain encoded versions
of those characters as described in
Section 9.2.3, “Mapping of Identifiers to File Names”.