MySQL5.6的版本之后支持了在线DDL,这对于DBA来说是个福音,但是MySQL5.6、5.7和当前的最新版本8.0在各种DDL中的情况不太一样,根据MySQL官方网站的说明整理一份在线DDL的对比情况,具体如下:
Type | Operation | Instant | In Place | Rebuilds Table | Permits Concurrent DML | Only Modifies Metadata | ||||||||||
5.6 | 5.7 | 8.0 | 5.6 | 5.7 | 8.0 | 5.6 | 5.7 | 8.0 | 5.6 | 5.7 | 8.0 | 5.6 | 5.7 | 8.0 | ||
Index Operations | Creating or adding a secondary index | No | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | No | No | No | ||
Dropping an index | No | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | |||
Renaming an index | No | Yes | Yes | No | No | Yes | Yes | Yes | Yes | |||||||
Adding a FULLTEXT index | No | Yes* | Yes* | Yes* | No* | No* | No* | No | No | No | No | No | No | |||
Adding a SPATIAL index | No | Yes | Yes | No | No | No | No | No | No | |||||||
Changing the index type | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | |||
Type | Operation | Instant | In Place | Rebuilds Table | Permits Concurrent DML | Only Modifies Metadata | ||||||||||
5.6 | 5.7 | 8.0 | 5.6 | 5.7 | 8.0 | 5.6 | 5.7 | 8.0 | 5.6 | 5.7 | 8.0 | 5.6 | 5.7 | 8.0 | ||
Primary Key Operations | Adding a primary key | No | Yes* | Yes* | Yes* | Yes* | Yes* | Yes* | Yes | Yes | Yes | No | No | No | ||
Dropping a primary key | No | No | No | No | Yes | Yes | Yes | No | No | No | No | No | No | |||
Dropping a primary key and adding another | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | |||
Type | Operation | Instant | In Place | Rebuilds Table | Permits Concurrent DML | Only Modifies Metadata | ||||||||||
5.6 | 5.7 | 8.0 | 5.6 | 5.7 | 8.0 | 5.6 | 5.7 | 8.0 | 5.6 | 5.7 | 8.0 | 5.6 | 5.7 | 8.0 | ||
Column Operations | Adding a column | Yes* | Yes | Yes | Yes | Yes | Yes | Yes | Yes* | Yes* | Yes* | No | No | No | ||
Dropping a column | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | |||
Renaming a column | No | Yes | Yes | Yes | No | No | No | Yes* | Yes* | Yes* | Yes | Yes | Yes | |||
Reordering columns | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | |||
Setting a column default value | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | |||
Changing the column data type | No | No | No | No | Yes | Yes | Yes | No | No | No | No | No | No | |||
Extending VARCHAR column size | No | Yes | Yes | No | No | Yes | Yes | Yes | Yes | |||||||
Dropping the column default value | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | |||
Changing the auto-increment value | No | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | No* | No* | No* | |||
Making a column NULL | No | Yes | Yes | Yes | Yes* | Yes* | Yes* | Yes | Yes | Yes | No | No | No | |||
Making a column NOT NULL | No | Yes* | Yes* | Yes* | Yes* | Yes* | Yes* | Yes | Yes | Yes | No | No | No | |||
Modifying the definition of an ENUM or SET column | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | |||
Type | Operation | Instant | In Place | Rebuilds Table | Permits Concurrent DML | Only Modifies Metadata | ||||||||||
5.6 | 5.7 | 8.0 | 5.6 | 5.7 | 8.0 | 5.6 | 5.7 | 8.0 | 5.6 | 5.7 | 8.0 | 5.6 | 5.7 | 8.0 | ||
Generated Column Operations | Adding a STORED column | No | No | No | Yes | Yes | No | No | No | No | ||||||
Modifying STORED column order | No | No | No | Yes | Yes | No | No | No | No | |||||||
Dropping a STORED column | No | Yes | Yes | Yes | Yes | Yes | Yes | No | No | |||||||
Adding a VIRTUAL column | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | |||||||
Modifying VIRTUAL column order | No | No | No | Yes | Yes | No | No | No | No | |||||||
Dropping a VIRTUALcolumn | Yes | Yes | Yes | No | No | Yes | Yes | Yes | Yes | |||||||
Type | Operation | Instant | In Place | Rebuilds Table | Permits Concurrent DML | Only Modifies Metadata | ||||||||||
5.6 | 5.7 | 8.0 | 5.6 | 5.7 | 8.0 | 5.6 | 5.7 | 8.0 | 5.6 | 5.7 | 8.0 | 5.6 | 5.7 | 8.0 | ||
Foreign Key Operations | Adding a foreign key constraint | No | Yes* | Yes* | Yes* | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | ||
Dropping a foreign key constraint | No | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | |||
Type | Operation | Instant | In Place | Rebuilds Table | Permits Concurrent DML | Only Modifies Metadata | ||||||||||
5.6 | 5.7 | 8.0 | 5.6 | 5.7 | 8.0 | 5.6 | 5.7 | 8.0 | 5.6 | 5.7 | 8.0 | 5.6 | 5.7 | 8.0 | ||
Table Operations | Changing the ROW_FORMAT | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | ||
Changing the KEY_BLOCK_SIZE | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | |||
Setting persistent table statistics | No | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes | |||
Specifying a character set | No | Yes | Yes | Yes | Yes* | Yes* | Yes* | No | No | No | No | No | No | |||
Converting a character set | No | No | No | No | Yes | Yes* | Yes* | No | No | No | No | No | No | |||
Optimizing a table | No | Yes* | Yes* | Yes* | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | |||
Enabling or disabling table encryption | No | No | No | Yes | Yes | No | No | Yes | Yes | |||||||
Rebuilding with the FORCEoption | No | Yes* | Yes* | Yes* | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | |||
Performing a null rebuild | No | Yes* | Yes* | Yes* | Yes | Yes | Yes | Yes | Yes | Yes | No | No | No | |||
Renaming a table | Yes | Yes | Yes | Yes | No | No | No | Yes | Yes | Yes | Yes | Yes | Yes |