MySQL5.6 ALTER TABLE 分析和测试
| 执行操作 | 允许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 ALTER TABLE 分析和测试的更多相关文章
- MySQL--当mysqldump --single-transaction遇到alter table(2)
在上篇<MySQL--当mysqldump --single-transaction遇到alter table>中测试发现,在MySQL 5.6版本中,如果在mysqldump期间修改表, ...
- 【SQL篇章】【SQL语句梳理 :--基于MySQL5.6】【已梳理:ALTER TABLE解析】
ALTER TABLE 解析实例: SQL: 1.增加列 2.增加列,调整列顺序 3.增加索引 4.增加约束 5.增加全文索引FULL-TEXT 6.改变列的默认值 7.改变列名字(类型,顺序) 8. ...
- MySQL ALTER TABLE语法
先看一下定义(密密麻麻) ALTER TABLE tbl_name [alter_specification [, alter_specification] ...] [partition_optio ...
- MySQL alter table时执行innobackupex全备再看Seconds_Behind_Master
1.场景描述 早上7:25 接到Report中心同学告警,昨天业务报表数据没有完整跑出来,缺少500位业务员的数据,并且很快定位到,缺少的是huabei_order库上的数据.Report中心的数据是 ...
- 【转载】alter table move 和 alter table shrink space的区别
move 和shrink 的共同点1.收缩段2.消除部分行迁移3.消除空间碎片4.使数据更紧密 shrink 语法: alter table TABLE_NAME shrink space [com ...
- [每日一题] OCP1z0-047 :2013-07-26 alter table set unused之后各种情况处理
有疑问可以去itpub讨论:http://www.itpub.net/thread-1804872-1-1.html 对于alter table setunused的用法,查官方文档: alter_t ...
- MySQL--当mysqldump --single-transaction遇到alter table
部分生产环境采用mysqldump --single-transaction的方式在夜间进行数据库备份,而同事恰好在备份期间执行了alter table操作,操作部分成功部分失败,为啥呢? 在mysq ...
- MySQL--当mysqldump --single-transaction遇到alter table(1)
部分生产环境采用mysqldump --single-transaction的方式在夜间进行数据库备份,而同事恰好在备份期间执行了alter table操作,操作部分成功部分失败,为啥呢? ##=== ...
- 曲演杂坛--使用ALTER TABLE修改字段类型的吐血教训
--===================================================================== 事件起因:开发发现有表插入数据失败,查看后发现INT类型 ...
随机推荐
- C# 获取windows特殊路径
虽然是古老的问题,最近用到这个,查一下还不少东东呐 一.使用Environment.SpecialFolder 该方法最简单,直接使用即可,只是提供的特殊路径比较少. (1)使用方法:string p ...
- POJ 2265 Bee Maja (找规律)
题目链接 题意 : 给你两个蜂巢的编号,给你一个的编号让你输出在另外一个蜂巢中对应的编号. 思路 : 先将蜂巢分层,第一层一个数,第二层6个数,第三层12个数…………然后用公式表示出第n层的最后一个数 ...
- Windows 回调监控 <一>
在x86的体系结构中,我们常用hook关键的系统调用来达到对系统的监控,但是对于x64的结构,因为有PatchGuard的存在,对于一些系统关键点进行hook是很不稳定的,在很大几率上会导致蓝屏的发生 ...
- MongoDB (二) MongoDB 优点
任何关系型数据库,具有典型的架构设计,显示表和这些表之间的关系.虽然在 MongoDB中,没有什么关系的概念. MongoDB比RDBMS的优势 架构:MongoDB是文档型数据库,其中一个集合保存不 ...
- threadlocal精髓是为每一个线程保证一个共享对象,保证一个,保证是同一个
threadlocal精髓是为每一个线程保证一个共享对象,保证一个,保证同一个线程中是同一个共享对象. 如果是静态变量是共享的话,那必须同步,否则尽管有副本,还是会出错,故C错
- Linux SHELL脚本
在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具.Shell不仅仅是命令的收集,而且是一门非常棒的编程语言.可以通过使用shell使大量的任务自动化,shell ...
- USACO Section 3.1: Agri-Net
minimal spanning tree的经典题 /* ID: yingzho1 LANG: C++ TASK: agrinet */ #include <iostream> #incl ...
- springmvc 中常用的注解配置使用说明
很久没有用springmvc了,今天复习了一下,然后记录一下总结. @Controller 使用 @Controller 注释对将成为 MVC 中控制器的类进行注释并处理 HTTP 请求. @ ...
- Virtualbox: Shared directory- “unknown filesystem type vboxsf”
1. "设置”中,"共享文件夹”,把要共享的文件夹添加上. 2. 然后打开系统,找到“安装增强功能”,这时桌面上多了一个光盘或者看/media/下面是不是已经文件了,虽然这个时候可 ...
- django如何检查创建的模型(model)是否有语法错误或者逻辑错误
首先,用下面的命令验证模型的有效性: python manage.py validate validate 命令检查你的模型的语法和逻辑是否正确. 如果一切正常,你会看到 0 errors found ...