我在MySQL (innodb) (X、Y和Z)中有三个表。X是一个有超过1000万行的表,其主键Y作为外键。类似地,Z是有超过3000万行的表,主键Y作为外键。
现在的问题是Y的主键是VARCHAR (类似于md5哈希或GUID)。我想将这个键移动到INT (AUTO_INCREMENT)。在mysql中实现这一目标的方法是什么,而不使用任何其他语言编写脚本呢?
此外,表Z的主键也是VARCHAR (md5/GUID)。我也想把它改成整数。(在任何表格中都不是外键)。
发布于 2015-08-22 00:58:36
(这可能比Ritobroto的建议更好,也可能不会更好。)
假设X链接到Y. (根据所有FKs的需要进行调整)
guid添加主键(Id),添加索引(X_guid),-丢失FK;仍然(目前)需要索引添加列Y_id INT,不带符号的NULL -未来FK到Y;ids链接起来(以替换guids)。对于每个链接:
更新X.Y_guid = Y.guid SET x.y_id =y.id上的X连接Y;
)这需要很长时间。id与guid下拉索引(X_guid)绑定;--除非您需要它来做其他事情在测试机上练习!!
发布于 2015-08-21 05:45:57
步骤1
创建具有相同列名的表,但是Y的主键的数据类型应该在INT AUTO INCREMENT中,对于表Z也是如此。
步骤2
使用此查询:
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).然后你就可以放下原来的桌子了。
这是一个痛苦的过程,如此之多的数据,但会做你想要的。
https://stackoverflow.com/questions/32132961
复制相似问题