• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > pt-online-schema-change进行MySQL表的主键变更

pt-online-schema-change进行MySQL表的主键变更

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了MySQL等相关知识,希望本文的分享对您有所帮助
业务运行一段时间,发现原来的主键设置并不合理,这个时候,想变更主键。这种需求在实际生产中还是蛮多的。

下面,看看pt-online-schema-change解决这类问题的处理方式。

首先,创建一张测试表

create table t2(c1 int primary key, c2 int);

构造测试数据

delimiter //
create procedure p1()
begin
  declare v1 int default 1;
  set autocommit=0;
  while v1 <=100000 do
    insert into test.t2(c1,c2) values(v1,v1+100);
    set v1=v1+1;
    if v1%1000 =0 then
      commit;
    end if;
  end while;
end //
delimiter ;
call p1;

下面,开始使用pt-online-schema-change对t2表进行主键变更

1. 对c1列加上unique key

# pt-online-schema-change --execute --alter "modify c1 int unique key" --print D=test,t=t2

此时,t2表的表结构如下:

mysql> show create table t2\G
*************************** 1. row ***************************
       Table: t2
Create Table: CREATE TABLE `t2` (
  `c1` int(11) NOT NULL DEFAULT '0',
  `c2` int(11) DEFAULT NULL,
  PRIMARY KEY (`c1`),
  UNIQUE KEY `c1` (`c1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
row in set (0.03 sec)

2. 删除c1列上的主键

# pt-online-schema-change --execute --alter "drop primary key" --no-check-alter --print D=test,t=t2

注意:删除主键需加上 --no-check-alter选项

此时,t2的表结构如下:

mysql> show create table t2\G
*************************** 1. row ***************************
       Table: t2
Create Table: CREATE TABLE `t2` (
  `c1` int(11) NOT NULL DEFAULT '0',
  `c2` int(11) DEFAULT NULL,
  UNIQUE KEY `c1` (`c1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
row in set (0.05 sec)

3. 添加c2列上的主键

# pt-online-schema-change --execute --alter "modify c2 int primary key" --print D=test,t=t2

此时,t2的表结构如下:

mysql> show create table t2\G
*************************** 1. row ***************************
       Table: t2
Create Table: CREATE TABLE `t2` (
  `c1` int(11) NOT NULL DEFAULT '0',
  `c2` int(11) NOT NULL,
  PRIMARY KEY (`c2`),
  UNIQUE KEY `c1` (`c1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
row in set (0.02 sec)

4. 删除c1列上的unique key

# pt-online-schema-change --execute --alter "drop key c1" --print D=test,t=t2

此时,t2的主键变更完成

mysql> show create table t2\G
*************************** 1. row ***************************
       Table: t2
Create Table: CREATE TABLE `t2` (
  `c1` int(11) NOT NULL DEFAULT '0',
  `c2` int(11) NOT NULL,
  PRIMARY KEY (`c2`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
row in set (0.02 sec)
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2018-12-05Oracle Max函数使用中出现的问题
  • 2018-12-05Mysql主从同步原理实现的详情介绍(图文)
  • 2018-12-05手工还原SQL时提示xp_dirtree出错的处理办法
  • 2018-12-05JDBC如何连接MySQL数据库?
  • 2017-05-11查看MySQL的错误日志的方法
  • 2018-12-05SQL语句效率问题的几点总结
  • 2018-12-05SQL错误:相关的信息为:用户 sa 登录失败。原因: 未与信任 SQL
  • 2018-12-05使用navicat 8实现创建数据库和导入数据 管理用户与权限[图文方
  • 2018-12-05mysql innodb的监控(系统层,数据库层)详解
  • 2018-12-05C#如何连接Mysql数据库?详解报错异常和增删改查

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • MySql实现跨表查询的方法详解
    • Mysql使用命令实现分级查找帮助的方法
    • redo和undo的一点关系及删除联机日志文件组的注意事项
    • Table ‘xxx’ is marked as crashed and should be repaired 错
    • MySQL数据库优化推荐的编译安装参数小结
    • 卸载MySQL数据库的完整步骤(图)
    • SQL Server访问Exchange数据
    • SQL Server SA权限总结经典技术
    • MySQL架构
    • MySql .frm数据库文件导入的问题

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有