When you create a new table, you can specify which storage engine
to use by adding an ENGINE
table option to the
CREATE TABLE
statement:
CREATE TABLE t (i INT) ENGINE = INNODB;
If you omit the ENGINE
option, the default
storage engine is used. Normally, this is
MyISAM
, but you can change it by using the
--default-storage-engine
server
startup option, or by setting the
default-storage-engine
option in the
my.cnf
configuration file.
You can set the default storage engine to be used during the
current session by setting the
storage_engine
variable:
SET storage_engine=MYISAM;
When MySQL is installed on Windows using the MySQL Configuration
Wizard, the InnoDB
storage engine can be
selected as the default instead of MyISAM
. See
Section 2.3.4.5, “The Database Usage Dialog”.
To convert a table from one storage engine to another, use an
ALTER TABLE
statement that
indicates the new engine:
ALTER TABLE t ENGINE = MYISAM;
See Section 12.1.14, “CREATE TABLE
Syntax”, and
Section 12.1.6, “ALTER TABLE
Syntax”.
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, usually
MyISAM
. This behavior is convenient when you
want to copy tables between MySQL servers that support different
storage engines. (For example, in a replication setup, perhaps
your master server supports transactional storage engines for
increased safety, but the slave servers use only nontransactional
storage engines for greater speed.)
This automatic substitution of the default storage engine for
unavailable engines can be confusing for new MySQL users. A
warning is generated whenever a storage engine is automatically
changed. To prevent this from happening if the desired engine is
unavailable, enable the
NO_ENGINE_SUBSTITUTION
SQL mode.
In this case, an error occurs instead of a warning and the table
is not created or altered if the desired engine is unavailable.
See Section 5.1.8, “Server SQL Modes”.
For new tables, MySQL always creates an .frm
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 8.2.3, “Mapping of Identifiers to File Names”.
A database may contain tables of different types. That is, tables need not all be created with the same storage engine.
User Comments
Add your own comment.