主键索引维护

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. Python - Django - 扩展默认 auth 表

    models.py: from django.db import models from django.contrib.auth.models import AbstractUser class Us ...

  2. 【转】kettle7.1资源库无法打开,找不到connect按钮的问题处理

    转自:https://www.aboutyun.com/home.php?mod=space&uid=71645&do=blog&id=3535 kettle是一个比较好用的E ...

  3. locale区域语言设置

    查看当前配置 # 默认配置[maintain@localhost:~]$ locale LANG=zh_CN.utf8 LC_CTYPE="zh_CN.utf8" LC_NUMER ...

  4. 转 java 8 lamba stream

    一直在写中间件相关的代码,提供SDK给业务方使用,但很多业务方还一直停留在1.7版本,迟迟不升级,为了兼容性,不敢在代码中使用Java8的一些新特性,比如Stream之类的,虽然不能用,但还是要学一下 ...

  5. Android组件化aar躺坑记:ButterKnife 报 元素值必须为常量表达式错误

    背景: 项目有需求,将自己写的模块作为一个module给到大项目使用,所以准备把自己的项目打包成aar包. 一.如何将独立项目打包成aar: 1.修改module下的application 为libr ...

  6. 深入分析——HashSet是否真的无序?(JDK8)

    HashSet 是否无序 (一) 问题起因: <Core Java Volume I-Fundamentals>中对HashSet的描述是这样的: HashSet:一种没有重复元素的无序集 ...

  7. 防范sql注入值得注意地方

    sql注入是大家基本都清楚,一般来说用参数化就能解决注入的问题,也是最好的解决方式. 有次技术群里问到一个问题,如下图 很显然tableName是外部传递过来的,暂时不考虑具体的业务环境,但如果以se ...

  8. [转帖]8个最佳Docker容器监控工具,收藏了

    8个最佳Docker容器监控工具,收藏了 https://www.sohu.com/a/341156793_100159565?spm=smpc.author.fd-d.9.1574127778732 ...

  9. Java开发笔记(一百四十六)JDBC的应用原理

    关系数据库使得海量信息的管理成为现实,但各家数据库提供的编程接口不尽相同,就连SQL语法也有所差异,像Oracle.MySQL.SQL Server都拥有自己的开发规则,倘若Java针对每个数据库单独 ...

  10. Vue框架(一)——Vue导读、Vue实例(挂载点el、数据data、过滤器filters)、Vue指令(文本指令v-text、事件指令v-on、属性指令v-bind、表单指令v-model)

    Vue导读 1.Vue框架 vue是可以独立完成前后端分离式web项目的js框架 三大主流框架之一:Angular.React.Vue vue:结合其他框架优点.轻量级.中文API.数据驱动.双向绑定 ...