主键索引维护

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操作的更多相关文章

  1. MySQL Index--CREATE INDEX在各版本的优化

    FIC(Fast index creation)特性在MySQL 5.5版本中引入FIC(Fast index creation)特性,创建索引时无需再拷贝整表数据,以提升索引的创建速度. FCI 操 ...

  2. Mysql 5.7.10以上版本安装大坑

    mysql解压缩版的配置已经方便无比了,但是也正是由于官方的不断优化,导致传统的套路一次次被修改.也让像我这样的萌新撞了个大墙. [注:本篇博客适用mysql5.7.10~5.7.15,如果版本已太过 ...

  3. 【MySQL】MySQL 5.7+ 版本的初始化

    MySQL 5.7.7以上二进制包就不包括原data目录的初始化系统表,官网说明: http://dev.mysql.com/doc/refman/5.7/en/data-directory-init ...

  4. 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: ...

  5. MySQL 5 绿色版(BAT版本) mysql50green转自http://hi.baidu.com/dburu/blog/item/e753fcc4362458aa8226accb.htmlMySQL 5 绿色版(BAT版本) By )

    以前提供下载的那个 MySQL 绿色版是来自于 Web 开发工具箱之 Apache PHP MySQL 绿色套装版, 原作者是为了方便自己开发所做的一套整合了 Apache, PHP, MySQL 的 ...

  6. mysql的mvcc(多版本并发控制)

    mysql的mvcc(多版本并发控制) 我们知道,mysql的innodb采用的是行锁,而且采用了多版本并发控制来提高读操作的性能. 什么是多版本并发控制呢 ?其实就是在每一行记录的后面增加两个隐藏列 ...

  7. 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 ...

  8. mysql安装5.7.20版本

    安 装 命 令:mysqld install 初始化命令:mysqld –initialize 参考这个链接 http://blog.csdn.net/wlc57627451/article/deta ...

  9. win10环境下MySql(5.7.21版本)安装过程

    windows10上安装mysql(详细步骤) 2016年09月06日 08:09:34 阅读数:60405 环境:windwos 10(1511) 64bit.mysql 5.7.14 时间:201 ...

随机推荐

  1. Linux 等待信号(sigsuspend)

    /* sigsuspend()函数说明 */ #include <stdio.h> #include <signal.h> /* 知识补充: sigsuspend()函数 函数 ...

  2. 利用nvidia-smi 管理和监控NVIDIA GPU设备

    NVIDIA系统管理界面介绍 原文来源:https://developer.nvidia.com/nvidia-system-management-interface NVIDIA系统管理界面(nvi ...

  3. 媲美GWAS Catalog,囊括45万人数据,778个表型,3千万个位点的公共数据库:GeneATLAS

    欢迎关注微信公众号"bio生物信息" GeneATLAS的数据全部来自 UK Biobank 的452,264个英国白人样本. 总共囊括的表型有778个,位点有三千万个. 优点 网 ...

  4. Hive、Inceptor数据倾斜详解及解决

    一.倾斜造成的原因 正常的数据分布理论上都是倾斜的,就是我们所说的20-80原理:80%的财富集中在20%的人手中, 80%的用户只使用20%的功能 , 20%的用户贡献了80%的访问量. 俗话是,一 ...

  5. Flask 学习(三)路由介绍

    Flask路由规则都是基于Werkzeug的路由模块的,它还提供了很多强大的功能. 两种添加路由的方式 方式一: @app.route('/xxxx') # @decorator def index( ...

  6. docker 国内镜像加速

    CentOS7 对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件): {"registry-mirrors& ...

  7. PostgreSQL的递归查询(with recursive) ,替代oracle 的级联查询connect by

    开发有需求,说需要对一张地区表进行递归查询,Postgres中有个 with recursive的查询方式,可以满足递归查询(一般>=2层). 测试如下: create table tb(id ...

  8. RTSP Spectification

    Refer: https://www.ietf.org/rfc/rfc2326.txt Network Working Group H. SchulzrinneRequest for Comments ...

  9. elasticsearch-head

    elasticsearch-head 是用于监控 Elasticsearch 状态的客户端插件,包括数据可视化.执行增删改查操作等 安装前先安装nodejs 1.下载  地址 2.安装 npm ins ...

  10. ASP.NET Core 之跨平台的实时性能监控

    前言 前面我们聊了一下一个应用程序 应该监控的8个关键位置. . 嗯..地址如下: 应用程序的8个关键性能指标以及测量方法 最后卖了个小关子,是关于如何监控ASP.NET Core的. 今天我们就来讲 ...