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类型 ...
随机推荐
- linq lambda 分组后排序
1.lamdba分组排序foodBusinessDistrict. GroupBy(x => new ...
- iis 重启 (三种方法)
iis 重启 (三种方法) WINDOWS提供WEB服务的IIS有时候会出现访问过大导致网站打不开,这时重启IIS是最好的选择. 方法/步骤 1 1.界面操作 打开“控制面板”->“管理工具”- ...
- linux下tomcat下部署项目如何打包压缩备份
范例一:将整个 /etc 目录下的文件全部打包成为 /tmp/etc.tar[root@linux ~]# tar -cvf /tmp/etc.tar /etc <==仅打包,不压缩![root ...
- 利用反射完成初级万能DAO
一.目标 利用反射完成初级万能DAO 二.注意 1.Field[] fi = clazz.getDeclaredFields(); for(Field ff : fi){ ff.setAccessib ...
- Java:日历类、日期类、数学类、运行时类、随机类、系统类
一:Calendar类 java.util 抽象类Calendar 1.static Calendar getInstance()使用默认时区和语言环境获得一个日历. 2. int get(int ...
- Friends(老友记)(六人行)相关资源
迅雷账号:104303980 老友记 Friends 的所有种子: http://www.ttmeiju.com/meiju/Friends.html 老友记(friends)高清(720p)+字幕 ...
- Maven Project configuration is not up-to-date with pom.xml错误解决方法
导入一个Maven项目之后发现有一个如下的错误: Project configuration is not up-to-date with pom.xml. Run project configura ...
- oracle数据库sql的基本使用
整理了下关于oracle数据库中SQL的基本使用语句,整理如下,方便记忆. oracle的基本术语 数据字典,数据库元数据信息的数据字典表和用户可以读取的数据字典视图组成.存放oracle数据库所用的 ...
- Android之TelephonyManager类的使用案例
TelephonyManager类主要提供了一系列用于访问与手机通讯相关的状态和信息的get方法.其中包括手机SIM的状态和信息.电信网络的状态及手机用户的信息.在应用程序中可以使用这些get方法获取 ...
- 串口log
使用windows自带的超级终端: 可从开机log开始保存: -----