MySQL DDL--MySQL 5.7版本Online DDL操作
主键索引维护
1、新增主键索引
## 可以使用ALGORITHM=INPLACE+LOCK=NONE方式,操作期间允许读写。
ALTER TABLE tb001
ADD PRIMARY KEY (ID),
ALGORITHM = INPLACE;
Query OK, 0 rows affected (22.13 sec)
Records: 0 Duplicates: 0 Warnings: 0 2、官网称如果创建主键索引时需要隐式转换列为NOT NULL则不能使用INPLACE方式(ALGORITHM=INPLACE is not permitted under certain conditions if columns have to be converted to NOT NULL)。
但在MySQL 5.7.19版本中测试发现在允许为NULL的列上创建主键,采用REBUILD INPLACE方式的Online DDL,操作期间允许表并发读写。
2、删除主键索引
## 只能使用ALGORITHM=COPY+LOCK=SHARED方式,操作期间允许读不允许写。
ALTER TABLE tb001
DROP PRIMARY KEY,
ALGORITHM = INPLACE;
ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Dropping a primary key is not allowed without also adding a new primary key. Try ALGORITHM=COPY. ALTER TABLE tb001
DROP PRIMARY KEY,
ALGORITHM=COPY;
Query OK, 800001 rows affected (20.01 sec)
Records: 800001 Duplicates: 0 Warnings: 0
3、删除并新增主键索引
## 可以使用ALGORITHM=INPLACE+LOCK=NONE方式,操作期间允许读写。
ALTER TABLE TB001
DROP PRIMARY KEY,
ADD PRIMARY KEY(C1),
ALGORITHM=INPLACE,
LOCK=NONE;
Query OK, 0 rows affected (22.57 sec)
Records: 0 Duplicates: 0 Warnings: 0
4、修改主键列类型
## 只能使用ALGORITHM=COPY+LOCK=SHARED方式,操作期间允许读不允许写。
ALTER TABLE TB001
CHANGE C1 C1 BIGINT NOT NULL,
ALGORITHM=INPLACE, LOCK=NONE;
ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY. ALTER TABLE TB001
CHANGE C1 C1 BIGINT NOT NULL,
ALGORITHM=COPY, LOCK=NONE;
ERROR 1846 (0A000): LOCK=NONE is not supported. Reason: COPY algorithm requires a lock. Try LOCK=SHARED. ALTER TABLE TB001
CHANGE C1 C1 BIGINT NOT NULL,
ALGORITHM=COPY, LOCK=SHARED;
Query OK, 799998 rows affected (20.49 sec)
Records: 799998 Duplicates: 0 Warnings: 0
二级索引维护
1、新增二级索引
## 可以使用ALGORITHM=INPLACE+LOCK=NONE方式,操作期间允许读写。
ALTER TABLE TB001 ADD INDEX IDX_C1(C1);
Query OK, 0 rows affected (10.53 sec)
Records: 0 Duplicates: 0 Warnings: 0
2、删除二级索引
## 仅需元数据修改操作,操作时间极短。
ALTER TABLE TB001 DROP INDEX IDX_C1;
Query OK, 0 rows affected (0.13 sec)
Records: 0 Duplicates: 0 Warnings: 0
3、修改二级索引名
## 仅需元数据修改操作,操作时间极短。
ALTER TABLE TB001
RENAME INDEX IDX_C1 TO IDX_C1_NEW,
ALGORITHM=INPLACE, LOCK=NONE;
Query OK, 0 rows affected (0.09 sec)
Records: 0 Duplicates: 0 Warnings: 0
4、修改二级索引列类型
## 只能使用ALGORITHM=COPY+LOCK=SHARED方式,操作期间允许读不允许写。
ALTER TABLE TB001 CHANGE C1 C1 INT;
Query OK, 800000 rows affected (25.03 sec)
Records: 800000 Duplicates: 0 Warnings: 0 ALTER TABLE TB001
CHANGE C1 C1 BIGINT,
ALGORITHM = INPLACE;
ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.
自增属性修改
1、修改普通主键列为自增主键列
## 只能使用ALGORITHM=COPY+LOCK=SHARED方式,操作期间允许读不允许写。
ALTER TABLE TB001 MODIFY ID BIGINT AUTO_INCREMENT;
Query OK, 800000 rows affected (26.15 sec)
Records: 800000 Duplicates: 0 Warnings: 0
2、修改自增主键列为普通主键列
## 只能使用ALGORITHM=COPY+LOCK=SHARED方式,操作期间允许读不允许写。
ALTER TABLE TB001 MODIFY ID BIGINT NOT NULL;
Query OK, 800000 rows affected (28.27 sec)
Records: 800000 Duplicates: 0 Warnings: 0
3、修改表自增开始值
## 仅需要修改元数据信息,操作时间极短。
ALTER TABLE TB001 AUTO_INCREMENT=800020;
Query OK, 0 rows affected (0.07 sec)
Records: 0 Duplicates: 0 Warnings: 0
列属性修改
1、新增列
## 可以使用ALGORITHM=INPLACE+LOCK=NONE方式,操作期间允许读写。
## 无论是新增可为NULL的列还是NOT NULL的列
ALTER TABLE TB001
ADD C2 INT NOT NULL DEFAULT 99999,
ALGORITHM=INPLACE, LOCK=NONE; Query OK, 0 rows affected (33.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
2、删除列
## 可以使用ALGORITHM=INPLACE+LOCK=NONE方式,操作期间允许读写。
ALTER TABLE TB001
DROP COLUMN C5,
ALGORITHM=INPLACE, LOCK=NONE;
Query OK, 0 rows affected (33.57 sec)
Records: 0 Duplicates: 0 Warnings: 0
3、修改列数据类型(INT至BIGINT)
## 只能使用ALGORITHM=COPY+LOCK=SHARED方式,操作期间允许读不允许写。
ALTER TABLE TB001
CHANGE C5 C5 BIGINT NULL,
ALGORITHM=INPLACE, LOCK=NONE;
ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY. ALTER TABLE TB001
CHANGE C5 C5 BIGINT NULL,
ALGORITHM=COPY, LOCK=SHARED; Query OK, 0 rows affected (29.63 sec)
Records: 0 Duplicates: 0 Warnings: 0
4、修改列类型显示长度(INT(10)至INT(8)或INT(8)至INT(10))
## 无论使用CHANGE命令还是MODIFY命令,都是修改元数据,操作时间极短。
ALTER TABLE tb001
MODIFY C2 INT(8),
ALGORITHM=INPLACE, LOCK=NONE;
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0 ALTER TABLE tb001
CHANGE C2 C2 INT(8) DEFAULT NULL,
ALGORITHM=INPLACE, LOCK=NONE;
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
5、修改列类型扩展存储长度(VARCHAR(300)至VARCHAR(500))
## 无论使用CHANGE命令还是MODIFY命令,都是修改元数据,操作时间极短。
ALTER TABLE tb001
CHANGE C3 C3 varchar(500) DEFAULT NULL,
ALGORITHM=INPLACE, LOCK=NONE;
Query OK, 0 rows affected (0.14 sec)
Records: 0 Duplicates: 0 Warnings: 0 ALTER TABLE tb001
MODIFY COLUMN C3 VARCHAR(500),
ALGORITHM=INPLACE, LOCK=NONE;
Query OK, 0 rows affected (0.14 sec)
Records: 0 Duplicates: 0 Warnings: 0
6、修改列类型扩展存储长度(VARCHAR(10)至VARCHAR(100))
## 只能使用ALGORITHM=COPY+LOCK=SHARED方式,操作期间允许读不允许写。
ALTER TABLE tb001
MODIFY COLUMN C3 VARCHAR(100),
ALGORITHM=INPLACE, LOCK=NONE;
ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY. ALTER TABLE tb001
MODIFY COLUMN C3 VARCHAR(100),
ALGORITHM=COPY, LOCK=SHARED;
Query OK, 0 rows affected (33.57 sec)
Records: 0 Duplicates: 0 Warnings: 0
7、修改列类型收缩存储长度(VARCHAR(500)至VARCHAR(300))
## 只能使用ALGORITHM=COPY+LOCK=SHARED方式,操作期间允许读不允许写。
ALTER TABLE tb001
CHANGE C3 C3 VARCHAR(300) DEFAULT NULL,
ALGORITHM=INPLACE, LOCK=NONE;
ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY. ALTER TABLE tb001
MODIFY COLUMN C3 VARCHAR(300),
ALGORITHM=INPLACE, LOCK=NONE;
ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY. ALTER TABLE tb001
MODIFY COLUMN C3 VARCHAR(300),
ALGORITHM=COPY, LOCK=SHARED;
Query OK, 800009 rows affected (27.28 sec)
Records: 800009 Duplicates: 0 Warnings: 0
8、修改修改列注释
## 仅需修改元数据,操作时间极短
ALTER TABLE tb001
MODIFY COLUMN C3` varchar(300) DEFAULT NULL COMMENT '测试1';
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0 ALTER TABLE tb001
CHANGE C3 C3 varchar(300) DEFAULT NULL COMMENT '测试2';
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
MySQL 5.7版本下DDL操作
MySQL DDL--MySQL 5.7版本Online DDL操作的更多相关文章
- MySQL Index--CREATE INDEX在各版本的优化
FIC(Fast index creation)特性在MySQL 5.5版本中引入FIC(Fast index creation)特性,创建索引时无需再拷贝整表数据,以提升索引的创建速度. FCI 操 ...
- Mysql 5.7.10以上版本安装大坑
mysql解压缩版的配置已经方便无比了,但是也正是由于官方的不断优化,导致传统的套路一次次被修改.也让像我这样的萌新撞了个大墙. [注:本篇博客适用mysql5.7.10~5.7.15,如果版本已太过 ...
- 【MySQL】MySQL 5.7+ 版本的初始化
MySQL 5.7.7以上二进制包就不包括原data目录的初始化系统表,官网说明: http://dev.mysql.com/doc/refman/5.7/en/data-directory-init ...
- mysql 5.5及以前版本的编码问题“Incorrect string value: '\xE6\x9B\xB9\xE5\x86\xAC...' for column 'realname' at row 1”
遇到这个问题,所有的编码都设为utf8了,还是没有用,各种乱码,后来发现这是mysql自己的问题,它在5.5及之前的版本只支持3字节的utf8编码,出现4字节的utf编码时出现错误,参考: http: ...
- MySQL 5 绿色版(BAT版本) mysql50green转自http://hi.baidu.com/dburu/blog/item/e753fcc4362458aa8226accb.htmlMySQL 5 绿色版(BAT版本) By )
以前提供下载的那个 MySQL 绿色版是来自于 Web 开发工具箱之 Apache PHP MySQL 绿色套装版, 原作者是为了方便自己开发所做的一套整合了 Apache, PHP, MySQL 的 ...
- mysql的mvcc(多版本并发控制)
mysql的mvcc(多版本并发控制) 我们知道,mysql的innodb采用的是行锁,而且采用了多版本并发控制来提高读操作的性能. 什么是多版本并发控制呢 ?其实就是在每一行记录的后面增加两个隐藏列 ...
- Mysql下Limit注入方法(此方法仅适用于5.0.0<mysql<5.6.6的版本)
SQL语句类似下面这样:(此方法仅适用于5.0.0<mysql<5.6.6的版本) SELECT field FROM table WHERE id > 0 ORDER BY id ...
- mysql安装5.7.20版本
安 装 命 令:mysqld install 初始化命令:mysqld –initialize 参考这个链接 http://blog.csdn.net/wlc57627451/article/deta ...
- win10环境下MySql(5.7.21版本)安装过程
windows10上安装mysql(详细步骤) 2016年09月06日 08:09:34 阅读数:60405 环境:windwos 10(1511) 64bit.mysql 5.7.14 时间:201 ...
随机推荐
- C#实现通过HttpWebRequest发送POST请求实现网站自动登陆
C#实现通过HttpWebRequest发送POST请求实现网站自动登陆 怎样通过HttpWebRequest 发送 POST 请求到一个网页服务器?例如编写个程序实现自动用户登录,自动提交表单数 ...
- abd shell的相关命令
http://adbshell.com/commands/adb-shell-pwd adb shell pwd adb shell rm -rf /sdcard/DCIM/
- 011-Spring aop 002-核心说明-切点PointCut、通知Advice、切面Advisor
一.概述 切点Pointcut,切点代表了一个关于目标函数的过滤规则,后续的通知是基于切点来跟目标函数关联起来的. 然后要围绕该切点定义一系列的通知Advice,如@Before.@After.@Af ...
- Qt编写安防视频监控系统18-云台控制
一.前言 云台控制是视频监控系统中必备的一个功能,对球机进行上下左右的移动,还有焦距的控制,其实核心就是控制XYZ三个坐标轴,为了开发这个模块,特意研究了各种云台控制的方法和开源库比如soap,有些厂 ...
- pan wutong团队隐私协议
本隐私权政策详细说明了pan wutong团队(“我们”或“我们的”)通过我们的应用程序和网站收集的信息,以及我们将如何使用这些信息. 1.我们不会通过我们的应用程序或网站收集儿童的个人信息. 我们深 ...
- 开发日记:DotNetCore 批处理 发布
@echo off@title 中医科院 - 发布@echo ******************************************************@echo ========= ...
- 【数据集】WiderFace-A Face Detection Benchmark
前言 参考 1.WiderFace; 完
- Postgresql常用命令汇总
sudo -u postgres psql #进入postgresql ALTER USER postgres WITH password 'postgres'; #修改postgres用户密码 ps ...
- redis 简单教程
一.redis的安装 安装环境:centos 7 1) 下载redis 这里我们下载的是redis-4.0.10.tar.gz 2)将redis tar包移动至 /usr/local 执行如下命令 c ...
- SQL Server ---- 创建好的表修改不了字段
注意这个 是 sqlserver 2008 R2 当修改字段后出现来这个错误 解决方法 1.点击工具 选择选项 2.选择 designers 把阻止更改点掉就行了 建议,改好之后最 ...