首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL将主键从varchar移动到int

问MySQL将主键从varchar移动到int
EN

Stack Overflow用户
提问于 2015-08-21 05:29:54
回答 2查看 869关注 0票数 0

我在MySQL (innodb) (X、Y和Z)中有三个表。X是一个有超过1000万行的表,其主键Y作为外键。类似地,Z是有超过3000万行的表,主键Y作为外键。

现在的问题是Y的主键是VARCHAR (类似于md5哈希或GUID)。我想将这个键移动到INT (AUTO_INCREMENT)。在mysql中实现这一目标的方法是什么,而不使用任何其他语言编写脚本呢?

此外,表Z的主键也是VARCHAR (md5/GUID)。我也想把它改成整数。(在任何表格中都不是外键)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-22 00:58:36

(这可能比Ritobroto的建议更好,也可能不会更好。)

假设X链接到Y. (根据所有FKs的需要进行调整)

  1. 为每一张桌子做这样的事。 更改表X删除外键.,--我们稍后再添加id INT,不带符号的非空AUTO_INCREMENT,--替换PK删除主键,假设是guid添加主键(Id),添加索引(X_guid),-丢失FK;仍然(目前)需要索引添加列Y_id INT,不带符号的NULL -未来FK到Y;
  2. 将新的ids链接起来(以替换guids)。对于每个链接: 更新X.Y_guid = Y.guid SET x.y_id =y.id上的X连接Y; )这需要很长时间。
  3. 重新建立FKs。每一表: 换桌子..。添加外键.,--将id与guid下拉索引(X_guid)绑定;--除非您需要它来做其他事情

在测试机上练习!!

票数 3
EN

Stack Overflow用户

发布于 2015-08-21 05:45:57

步骤1

创建具有相同列名的表,但是Y的主键的数据类型应该在INT AUTO INCREMENT中,对于表Z也是如此。

步骤2

使用此查询:

代码语言:javascript
复制
INSERT INTO table_name (column_names of present table except the primary key column_name) SELECT all the columns except the primary key column FROM Y/Z(which ever table you want from the data to be inserted).

然后你就可以放下原来的桌子了。

这是一个痛苦的过程,如此之多的数据,但会做你想要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32132961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档