如何利用pt-online-schema-change进行MySQL表的主键变更
业务运行一段时间,发现原来的主键设置并不合理,这个时候,想变更主键。这种需求在实际生产中还是蛮多的。
下面,看看pt-online-schema-change解决这类问题的处理方式。
首先,创建一张测试表
create table t2(c1 int primary key, c2 int);
构造测试数据
delimiter //
create procedure p1()
begin
;
;
do
);
;
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
. row ***************************
Table: t2
Create Table: CREATE TABLE `t2` (
`c1` ) ',
`c2` ) 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
. row ***************************
Table: t2
Create Table: CREATE TABLE `t2` (
`c1` ) ',
`c2` ) 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
. row ***************************
Table: t2
Create Table: CREATE TABLE `t2` (
`c1` ) ',
`c2` ) 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
. row ***************************
Table: t2
Create Table: CREATE TABLE `t2` (
`c1` ) ',
`c2` ) NOT NULL,
PRIMARY KEY (`c2`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
row in set (0.02 sec)
如何利用pt-online-schema-change进行MySQL表的主键变更的更多相关文章
- PHP查询MYSQL表的主键
$sql = "SELECT * from Person"; $result = mysql_query($sql,$con); while ($property = mysql_ ...
- sqoop从hive导入数据到mysql时出现主键冲突
今天在将一个hive数仓表导出到mysql数据库时出现进度条一直维持在95%一段时间后提示失败的情况,搞了好久才解决.使用的环境是HUE中的Oozie的workflow任何调用sqoop命令,该死的o ...
- Online Schema Change for MySQL
It is great to be able to build small utilities on top of an excellent RDBMS. Thank you MySQL. This ...
- mysql数据库表操作-表的主键索引和普通索引
数据库索引就象书的目录一样,如果在字段上建立了索引,那么以索引列为查询条件时可以加快查询数据的速度.查询数据库,按主键查询是最快的,每个表只能有一个主键列,但是可以有多个普通索引列,主键列要求列的所有 ...
- MySQL基础2-创建表和主键约束
1.创建表 在操作数据表之前,应该使用"USE 数据库名"指定操作是在哪个数据库中进行 主键约束(唯一标识) ****非空*** ****唯一*** ****被引用****(学习外 ...
- Mysql,SqlServer,Oracle主键自动增长的设置
1.把主键定义为自动增长标识符类型 MySql 在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值.例如: )); insert into customers ...
- MySQL与Oracle主键Query性能测试结果
测试结果总结如下: 1. 按主键读:SQL形式:SELECT * FROM table WHERE id=?. 1.1. 主键为数字.如果所有ID均不存在,纯比较SQL解析能力.MySQL解析SQL的 ...
- Mysql 创建联合主键
Mysql 创建联合主键2008年01月11日 星期五 下午 5:21使用primary key (fieldlist) 比如: create table mytable ( ...
- mysql insert插入时实现如果数据表中主键重复则更新,没有重复则插入的四种方法
[CSDN下载] Powerdesigner 设计主键code不能重复等问题 [CSDN博客] Oracle中用一个序列给两个表创建主键自增功能的后果 [CSDN博客] MySQL自增主键删除后重复问 ...
随机推荐
- NodeJs在Linux下使用的各种问题
环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...
- ExtJS 4.2 Date组件扩展:添加清除按钮
ExtJS中除了提供丰富的组件外,我们还可以扩展他的组件. 在这里,我们将在Date日期组件上添加一个[清除]按钮,用于此组件已选中值的清除. 目录 1. Date组件介绍 2. 主要代码说明 3. ...
- PowerDesigner-VBSrcipt-自动设置主键,外键名等(SQL Server)
在PowerDesigner中的设计SQL Server 数据表时,要求通过vbScript脚本实现下面的功能: 主键:pk_TableName 外键:fk_TableName_ForeignKeyC ...
- 关于VS2015 ASP.NET MVC添加控制器的时候报错
调试环境:VS2015 数据库Mysql WIN10 在调试过程中出现类似下两图的同学们,注意啦. 其实也是在学习的过程中遇到这个问题的,找了很多资料都没有正面的解决添加控制器的时候报错的问题,还是 ...
- VS2015常用快捷键总结
生成解决方案 F6,生成项目Shift+F6 调试执行F5,终止调试执行Shift+F5 执行调试Ctrl+F5 查找下一个F3,查找上一个Shift+F3 附加到进程Ctrl+Alt+P,逐过程F1 ...
- Ubuntu手动设置DSL连接
在安装完Ubuntu之后,发现图形界面的DSL连接不管用了,郁闷了好几天,想想移动每个月120个小时的流量岂不是白白浪费了.正当我想重返Windows系统的时候,却发现了手动设置连接DSL的好方法,感 ...
- Alwayson的IP冲突
Alwayson的IP冲突 https://social.technet.microsoft.com/Forums/office/en-US/4d50cb1c-eef7-4dcc-b937-3c8eb ...
- linux下mono,powershell安装教程
1简介 简单来说pash就是bash+powershell 2官网 https://github.com/Pash-Project/Pash 3下载fedora20---lxde桌面---32位版. ...
- 最新Linux部署.NET,Mono and DNX
这几天一直在折腾在Linux下的ASP.NET 5,就下在看来在其它操作系统中ASP.NET 5或.NET应用,要想在完整的MS VM(CoreCLR)上运行还不远远达不到,应用的效果. 目前只能在M ...
- SQL SERVER全面优化-------Expert for SQL Server 诊断系列
现在很多用户被数据库的慢的问题所困扰,又苦于花钱请一个专业的DBA成本太高.软件维护人员对数据库的了解又不是那么深入,所以导致问题迟迟不能解决,或只能暂时解决不能得到根治.开发人员解决数据问题基本又是 ...