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: 02、官网称如果创建主键索引时需要隐式转换列为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: 0ALTER 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: 0ALTER 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: 0ALTER 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: 0ALTER 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操作
转载于:https://www.cnblogs.com/gaogao67/p/11177557.html
MySQL DDL--MySQL 5.7版本Online DDL操作相关推荐
- MySQL基础--(2) [SQL(结构化查询语言), DDL(数据定义语言)]
目录 Sql(结构化查询语言) sql的概念以及特点 DDL(数据定义语言) 创建,删除,修改数据库. 数据库存储数据的特点 数据库表 数据库表中数据的数据类型 数据库表中数据的约束 创建表 设置修改 ...
- MySQL基础(mysql下载,图形化界面工具,DDL)
目录 1.Mysql下载安装启动 1.下载 2.安装 3.配置 4. 启动mysql 5.客户端连接 2.图形化界面工具 1.安装 2. 使用 3.SQL 1.SQL分类 1.DDL 1.数据库操作 ...
- .tar.gz mysql 安装_mysql tar.gz 版本 linux系统的安装-Go语言中文社区
mysql下载地址: https://dev.mysql.com/downloads/mysql/ 1. 上传下载的tar.gz文件发送到linux 上传的路径: /usr/local/mysql/ ...
- mysql cluster 安装NDB二进制版本
2019独角兽企业重金招聘Python工程师标准>>> mysql cluster 基于NDB CLUSTER存储引擎的完整的分布式数据库系统.MYSQL CLUSTER是一个sha ...
- 1、MySQL 8.0.20最新版本在Linux上安装
文章目录 1.下载安装包 2.解压安装 3.拷贝到 /usr/local并重命名为mysql 4.删除/opt目录下解压的文件(也可以保留)只留下安装包 5.创建mysql用户组和用户并修改权限 6. ...
- Mysql 5.7.10以上版本安装大坑
mysql解压缩版的配置已经方便无比了,但是也正是由于官方的不断优化,导致传统的套路一次次被修改.也让像我这样的萌新撞了个大墙. [注:本篇博客适用mysql5.7.10~5.7.15,如果版本已太过 ...
- MySQL 的发展历史和版本分支:
时间 里程碑 1996 年 MySQL 1.0 发布.它的历史可以追溯到1979 年,作者Monty 用BASIC 设计的一个报表工具. 1996 年10 月 3.11.1 发布.MySQL 没有2. ...
- mysql客户端版本太低_windows一机多装mysql,5.5低版本+5.8高版本
安装第一个mysql,压缩版或者安装版,过程省略,目录如下: 运行中输入"regedit" 进入后,找到 HKEY_LOCAL_MACHINE\SYSTEM\Curren ...
- mysql 5.6.4以上版本innodb支持全文索引的测试
对于mysql 5.6.4以上版本innodb支持全文索引的测试 在mysql官网,innodb引擎在5.6.4版本提供了对全文索引的支持,笔者对此做了测试,发现对中文全文检索的支持依然不理想,但却确 ...
最新文章
- Windows API一日一练(56)SetEndOfFile和GetFileSizeEx函数
- it程序员刷题 面试 中文网站收集
- abap 选择屏幕事件AT SELECTION-SCREEN
- C++ 面向对象(二)多态 : 虚函数、多态原理、抽象类、虚函数表、继承与虚函数表
- 世界各地奇葩讨债方法,竟百发百中
- 【专升本计算机】甘肃省专升本计算机C语言经典程序案例代码合集(持续更新)
- sql语句中的in用法示例_PHP中的循环语句和示例
- Java 随心笔记7
- 模拟运行php,window_PHP+Javascript模拟Matrix画面, 直接存为*.php文件运行即 - phpStudy...
- 在Java中实现在线语音识别
- linux内存管理初始化
- 如何从12306网站下载自己喜欢的手机铃声
- 基于导频的信道估计实现
- 计算机课题推荐人意见,课题申请推荐人意见怎么写
- 量子计算机解泊松方程,学界 | 从泊松方程的解法,聊到泊松图像融合
- 2021-6-10-今日收获
- 批处理---findstr命令详解
- 李希贵:教育改革最大的阻力来自我们内心
- Android CameraServer:Disconnect
- 程序员真的是一个吃青春饭的行业吗?
热门文章
- delphi oracle新建用户,Delphi 中如何用另外一个用户的身份来运行一人程序
- shell命令卸载mysql_centos8中的MySQL卸载和安装
- 网络营销专员浅析如何以低成本高获取实现网络营销?
- 网站功能页面构建有何技巧?
- java jackson json_java – 使用Jackson从JSON获取单个字段
- linux上热编译react,如何使用react进行热加载
- mysql总结 博客园_mysql总结
- linux哪些分区用固态硬盘,关于linux:简单聊聊固态硬盘的物理结构
- TensorRT加速 ——NVIDIA终端AI芯片加速用,可以直接利用caffe或TensorFlow生成的模型来predict(inference)...
- python 写创建和追加一个文件