基础材料:
centos7.5 mysql 5.7.24
online DDL操作说明列表:
类型 | 操作 | 是否Inplace | 是否重建表 | 是否允许并发DML | 是否只修改元数据 | 备注 |
index | 创建或添加二级索引 | 是 | 否 | 是 | 否 | 仅在完成访问表的所有事务完成后才结束 索引的初始状态反映了表的最新内容 |
删除索引 | 是 | 否 | 是 | 是 |
|
|
重命名索引 | 是 | 否 | 是 | 是 | ||
添加FULLTEXT 索引 |
是* | 否* | 否 | 否 |
则添加第一个索引会重建表
|
|
添加SPATIAL 索引 |
是* | 否* | 否 | 否 |
则添加第一个索引会重建表
|
|
更改索引类型 | 是 | 否 | 是 | 是 | ||
primary key | 添加主键 | 是 | 是 | 是 | 否 | 对表进行重建,耗费IO |
删除主键 | 否 | 是 | 否 | 否 | 仅 对表进行重建,耗费IO 产生临时表时同样需要在原表路径生成表空间临时文件 |
|
同时删除主键并添加 | 是 | 是 | 是 | 否 | 对表进行重建,耗费IO |
|
COLUMN | 添加列 | 是 | 是 | 是* | 否 | 添加自增 列时不允许并发DML,且mysql会自动设置LOCK=SHARED,用来替换默认的LOCK=DEFAULT 对表进行重建,耗费IO |
删除列 | 是 | 是 | 是 | 否 | 对表进行重建,耗费IO | |
重命名列 | 是 | 否 | 是 | 是 | ||
重新排序列 | 是 | 是 | 是 | 否 | 对表进行重建,耗费IO | |
设置/删除列默认值 | 是 | 否 | 是 | 是 | 仅修改表元数据。默认列值存储在 表的.frm文件中,而不是InnoDB 数据字典中。 |
|
更改列数据类型 | 否 | 是 | 否 | 否 | 仅 对表进行重建,耗费IO |
|
扩展VARCHAR 列大小 |
是 | 否 | 是 | 是 | 将 如果改为大于255的值,则只能使用 |
|
更改自动增量值 | 是 | 否 | 是 | 否* | 修改存储在内存中的值,而不是数据文件。 | |
添加列NULL/NOT NULL |
是 | 是 | 是 | 否 | 对表进行重建,耗费IO | |
修改ENUM 或SET 列的定义 |
是 | 否 | 是 | 是 | ||
GENERATED COLUMN |
添加STORED 列 |
否 | 是 | 否 | 否 | ALTER TABLE t1 ADD COLUMN (c2 INT GENERATED ALWAYS AS (c1 + 1) STORED), ALGORITHM=COPY; |
修改STORED 列顺序 |
否 | 是 | 否 | 否 | ALTER TABLE t1 MODIFY COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) STORED FIRST, ALGORITHM=COPY; | |
删除STORED 列 |
是 | 是 | 是 | 否 | ALTER TABLE t1 DROP COLUMN c2, ALGORITHM=INPLACE, LOCK=NONE; | |
添加VIRTUAL 列 |
是 | 否 | 是 | 是 | ALTER TABLE t1 ADD COLUMN (c2 INT GENERATED ALWAYS AS (c1 + 1) VIRTUAL), ALGORITHM=INPLACE, LOCK=NONE; | |
修改VIRTUAL 列顺序 |
否 | 是 | 否 | 否 | ALTER TABLE t1 MODIFY COLUMN c2 INT GENERATED ALWAYS AS (c1 + 1) VIRTUAL FIRST, ALGORITHM=COPY; | |
删除VIRTUAL 列 |
是 | 否 | 是 | 是 | ALTER TABLE t1 DROP COLUMN c2, ALGORITHM=INPLACE, LOCK=NONE; | |
foreign key | 添加外键约束 | 是 | 否 | 是 | 是 | |
删除外键约束 | 是 | 否 | 是 | 是 | ||
table | 修改ROW_FORMAT | 是 | 是 | 是 | 否 | 对表进行重建,耗费IO |
修改KEY_BLOCK_SIZE | 是 | 是 | 是 | 否 | 对表进行重建,耗费IO | |
设置持久表统计信息 | 是 | 否 | 是 | 是 | 仅修改表元数据。 | |
指定字符集 | 是 | 是 | 否 | 否 | 如果新字符编码不同,则重建表。 | |
转换字符集 | 否 | 是 | 否 | 否 | 如果新字符编码不同,则重建表。 | |
OPTIMIZE优化表 | 是* | 是 | 是 | 否 | OPTIMIZE TABLE tbl_name; 具有 |
|
执行空重建表 | 是* | 是 | 是 | 否 | ALTER TABLE tbl_name ENGINE=InnoDB; 具有 |
|
重命名表 | 是 | 否 | 是 | 是 | 重命名与表对应的文件而不进行复制 | |
tablespace | 启用或禁用单表文件表空间加密 | 否 | 是 | 否 | 否 | ALTER TABLE tbl_name ENCRYPTION='Y', ALGORITHM=COPY; |
PARTITION | PARTITION BY | 否 | 不涉及 | 否 | 不涉及 | ALGORITHM=COPY , LOCK={DEFAULT|SHARED|EXCLUSIVE} |
ADD PARTITION | 否 | 不涉及 | 否 | 不涉及 | 只允许 在保持共享锁的同时复制数据 |
|
DROP PARTITION | 否 | 不涉及 | 否 | 不涉及 | 只允许ALGORITHM=DEFAULT, LOCK=DEFAULT |
|
DISCARD PARTITION | 否 | 不涉及 | 否 | 不涉及 | 只允许ALGORITHM=DEFAULT, LOCK=DEFAULT |
|
IMPORT PARTITION | 否 | 不涉及 | 否 | 不涉及 | 只允许ALGORITHM=DEFAULT, LOCK=DEFAULT |
|
TRUNCATE PARTITION | 是 | 不涉及 | 是 | 不涉及 | 不复制现有数据。只删除行; 不会改变表本身或其任何分区的定义 | |
COALESCE PARTITION | 否 | 不涉及 | 否 | 不涉及 | 只允许 在保持共享锁的同时复制数据 |
|
REORGANIZE PARTITION | 否 | 不涉及 | 否 | 不涉及 | 只允许 保持共享元数据锁的同时从受影响的分区复制数据 |
|
EXCHANGE PARTITION | 是 | 不涉及 | 是 | 不涉及 | ||
ANALYZE PARTITION | 是 | 不涉及 | 是 | 不涉及 | ||
CHECK PARTITION | 是 | 不涉及 | 是 | 不涉及 | ||
OPTIMIZE PARTITION | 否 | 不涉及 | 否 | 不涉及 | ALGORITHM 和LOCK 参数被忽略。重建整个表 |
|
REBUILD PARTITION | 否 | 不涉及 | 否 | 不涉及 | 只允许 保持共享元数据锁的同时从受影响的分区复制数据。 |
|
REPAIR PARTITION | 是 | 不涉及 | 是 | 不涉及 | ||
REMOVE PARTITION | 否 | 不涉及 | 否 | 不涉及 | ALGORITHM=COPY , LOCK={DEFAULT|SHARED|EXCLUSIVE} |