Storage Engines

Storage Engines: InnoDB, MyISAM, MEMORY, and the Rest

MySQL 524 's storage engines are pluggable: each table names its engine in ENGINE= (Table Options), and one query may join tables that use different engines. SHOW ENGINES lists what the server offers; the same data in information_schema.ENGINES lets you pick columns and rows:

The storage engines of a MySQL 9.7 serverSQL
SELECT engine, support, transactions, xa, savepoints
FROM information_schema.ENGINES WHERE support <> 'NO' ORDER BY engine;
Output
+--------------------+---------+--------------+------+------------+
| engine             | support | transactions | xa   | savepoints |
+--------------------+---------+--------------+------+------------+
| ARCHIVE            | YES     | NO           | NO   | NO         |
| BLACKHOLE          | YES     | NO           | NO   | NO         |
| CSV                | YES     | NO           | NO   | NO         |
| InnoDB             | DEFAULT | YES          | YES  | YES        |
| MEMORY             | YES     | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | NO           | NO   | NO         |
| MyISAM             | YES     | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | NO           | NO   | NO         |
+--------------------+---------+--------------+------+------------+
8 rows in set (0.000 sec)

Only InnoDB supports transactions, XA and savepoints; FEDERATED (remote tables) and NDB (MySQL Cluster) are present but disabled. The others have narrow uses:

The four storage engines you are most likely to meet
Feature InnoDB MyISAM MEMORY ARCHIVE
Transactions and foreign keys Yes No No No
Locking Row Table Table Row
Crash recovery Automatic, from redo log None; REPAIR TABLE Rows lost on restart None
Indexes B-tree, full-text, spatial B-tree, full-text, spatial Hash, B-tree AUTO_INCREMENT key only
Good for Almost everything Legacy read-mostly data Small scratch lookups Write-once logs

MyISAM ignores transactions: in a test run, a MyISAM INSERT survived ROLLBACK, which warned "Some non-transactional changed tables couldn't be rolled back" (1196). MEMORY tables are capped by max_heap_table_size (16 MB by default). ARCHIVE compresses rows and refuses UPDATE and DELETE, CSV stores a comma-separated file, and BLACKHOLE discards rows but still writes the binary log. ALTER TABLE t ENGINE = InnoDB converts an old table by rebuilding it.