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类型 ...
随机推荐
- hdu2025查找最大元素
#include<iostream> #include<stdio.h> #include<math.h> #include<stdlib.h> #in ...
- C++运算符重载——重载一元运算符
0.重载一元操作符的方法 一元运算符即只需要一个操作用的运算符,如取地址运算符(&).复数(-).自减(--).自加(++)等. 运算符重载可以分为3种方式:类的非静态成员函数.类的友元函数. ...
- React编写文本评论框
一.需求分析 二.代码 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset= ...
- Eclipse配置Flex开发环境(转)
Eclipse配置Flex开发环境 开发环境:Eclipse3.2.Flex Builder31.下载安装Flex Builder3,下载地址:http://subject.csdn.net/adob ...
- AdventureWorksDW2008R2 attach: Unable to open the physical file. Operating system error 5: "5(Access is denied.)
http://stackoverflow.com/questions/26014133/adventureworksdw2008r2-attach-unable-to-open-the-physica ...
- 在eclipse中调试web项目的时候如何把web项目分配给配置好的服务器
举个例子,我今天在做spring和struts2整合的例子 新建项目blk 1.配置好web.xml,struts.xml,applicationContext.xml,写好jsp页面 2.把stru ...
- json 得到时分秒为00:00:00,拿不到时分秒 解决办法
数据库查询时间没有了时分秒的解决办法 问题出处,公司一个项目中使用动态sql方式查询Oracle数据库,在展示时Date类型字段只展示日期,无时分秒. 分析: ...
- 测试用例生成工具ALLPAIRS(转)
ALLPAIRS是一个测试用例设计工具,用于Windows,但移植到了多种平台,以适应该脚本文件的一些小改动.它自动对所有实验技术进行设计,通过这个工具的方法可以在海量的数据组合中选择少量的数据生成测 ...
- MyBatis的foreach语句详解 list array map
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有 item,index,collection,open,separator,close.it ...
- c语言类型转换注意事项
转载自: http://blog.csdn.net/zhuimengzh/article/details/6728492 1.隐式转换 C在以下四种情况下会进行隐式转换: 1.算 ...