这篇文章将为大家详细讲解有关MySQL5.6 Online DDL在线状态是怎么样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
Yes*和No*表明结果依赖于其他一些附加条件:
执行操作 | 允许ALGORITHM=INPLACE |
是否拷贝表 |
允许并发DML |
允许并发查询 |
备注和注意事项 |
create index add index |
Yes* |
No* |
Yes |
Yes |
对于全文索引,有一些限制,具体看下一行。目前,该操作不是在原地执行,需要拷贝表. |
add fulltext index |
Yes |
No* |
No |
Yes |
创建第一个全文索引涉及到拷贝表,除非有使用FTS_DOC_ID列。后面的全文索引则在原地执行。 |
drop index |
Yes |
No |
Yes |
Yes |
|
optimize table |
Yes |
Yes |
Yes |
Yes |
在MySQL5.6.17里使用 ALGORITHM=INPLACE. 如果设置old_alter_table=1或使用mysqld –skip-new选项,则使用 ALGORITHM=COPY. 如果表使用了全文索引,则 ALGORITHM=INPLACE不适用 |
set default value for column |
Yes |
No |
Yes |
Yes |
修改.frm文件,不涉及数据文件 |
change auto-increment value |
Yes |
No |
Yes |
Yes |
修改存储到内存的一个值,不修改数据文件 |
add foreign key constraint |
Yes* |
No* |
Yes |
Yes |
禁用foreign_key_checks,则可以避免拷贝表 |
drop forgien key constraing |
Yes |
No |
Yes |
Yes |
foreign_key_checks可以禁用或开启 |
rename column |
Yes* |
No* |
Yes* |
Yes |
允许并发DML,保持相同的数据类型,仅改变字段名 |
add column |
Yes |
Yes |
Yes* |
Yes |
增加auto-increment字段时不允许DML操作. 虽然ALGORITHM=INPLACE可以允许, 但是数据要重组,代价比较昂贵. |
drop column |
Yes |
Yes |
Yes |
Yes |
虽然ALGORITHM=INPLACE可以允许, 但是数据要重组,代价比较昂贵. |
reorder columns |
Yes |
Yes |
Yes |
Yes |
虽然ALGORITHM=INPLACE可以允许, 但是数据要重组,代价比较昂贵. |
change ROW_FORMAT property |
Yes |
Yes |
Yes |
Yes |
虽然ALGORITHM=INPLACE可以允许, 但是数据要重组,代价比较昂贵. |
change KEY_BLOCK_SIZE property |
Yes |
Yes |
Yes |
Yes |
虽然ALGORITHM=INPLACE可以允许, 但是数据要重组,代价比较昂贵. |
make column null |
Yes |
Yes |
Yes |
Yes |
虽然ALGORITHM=INPLACE可以允许, 但是数据要重组,代价比较昂贵. |
make cplumn not null |
Yes* |
Yes |
Yes |
Yes |
当SQL_MODE为strict_all_tables,如果执行的列包含null,则会执行失败。
虽然ALGORITHM=INPLACE可以允许, 但是数据要重组,代价比较昂贵. |
change data type of column |
No |
Yes |
Yes |
Yes |
|
add primary key |
Yes* |
Yes |
Yes |
Yes |
虽然ALGORITHM=INPLACE可以允许, 但是数据要重组,代价比较昂贵. 如果列必须转换为非空的条件下, ALGORITHM=INPLACE是不允许的。 |
drop primary key and add other |
Yes |
Yes |
Yes |
Yes |
当在同一个alter table新增主键时ALGORITHM=INPLACE是允许的.数据要重组,因此代价比较昂贵.
|
drop primary key |
No |
Yes |
No |
Yes |
删除主键但是又不新增主键是被限制的 |
convert character set |
No |
Yes |
No |
Yes |
如果新的字符编码不同将会重建表 |
specify character set |
No |
Yes |
No |
Yes |
如果新的字符编码不同将会重建表 |
rebulid with force option |
Yes |
Yes |
Yes |
Yes |
在MySQL5.6.17里使用 ALGORITHM=INPLACE.
如果设置old_alter_table=1或使用mysqld –skip-new选项,则使用 ALGORITHM=COPY. 如果表使用了全文索引,则 ALGORITHM=INPLACE不适用 |
rebulid with “null”
alter table … engine=innodb |
Yes |
Yes |
Yes |
Yes |
在MySQL5.6.17里使用 ALGORITHM=INPLACE. 如果设置old_alter_table=1或使用mysqld –skip-new选项,则使用 ALGORITHM=COPY. 如果表使用了全文索引,则 ALGORITHM=INPLACE不适用 |
关于MySQL5.6 Online DDL在线状态是怎么样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
原创文章,作者:carmelaweatherly,如若转载,请注明出处:https://blog.ytso.com/204165.html