zoukankan      html  css  js  c++  java
  • 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操作

  • 相关阅读:
    《Mathematical Olympiad——组合数学》——染色问题
    《啊哈算法》——栈、队列、链表
    《Mathematical Olympiad——组合数学》——抽屉原理
    2749: [HAOI2012]外星人
    bzoj4241: 历史研究
    bzoj3210: 花神的浇花集会
    bzoj4998: 星球联盟
    bzoj2728: [HNOI2012]与非
    bzoj2669: [cqoi2012]局部极小值
    bzoj5441: [Ceoi2018]Cloud computing
  • 原文地址:https://www.cnblogs.com/gaogao67/p/11177557.html
Copyright © 2011-2022 走看看