我有一个2100万行的表.我必须更改其中一个行名.当我尝试查询"alter table company change id new_id int(11)"; 查询永远不会结束
有没有一种简单的方法来改变大的mysql表的字段名称?
首先,在任何事情之前,备份表:
mysqldump -uroot -p db big_table > /tmp/big_table.backup.sql
Run Code Online (Sandbox Code Playgroud)
在执行ALTER命令时要记住的一件事是绝对确保您拥有相同的列详细信息,以便您不希望更改.
例如:
ALTER TABLE big_table MODIFY COLUMN id INT(11)
Run Code Online (Sandbox Code Playgroud)
会跳过任何其他类似AUTO_INCREMENT和NOT NULL.因此最好将其包含在alter语句中.
ALTER TABLE big_table MODIFY COLUMN id INT(11) NOT NULL AUTO_INCREMENT;
Run Code Online (Sandbox Code Playgroud)
基本上只需复制ID列的create语句区域并替换所需的内容并将其包含在modify语句中.
使用 pt-online-schema-change 进行长时间运行的 ALTER TABLE 更改,而不会将自己锁定在表之外。
http://www.percona.com/doc/percona-toolkit/pt-online-schema-change.html
完成更改通常需要更长的时间,但您仍然可以在表执行其工作时读取和写入表。
您还可以收听作者的网络研讨会,讨论其工作原理及其一些注意事项:
http://www.percona.com/webinars/2012-05-02-zero-downtime-schema-changes-in-mysql
你有什么想法:
这只是一个快速的想法,但它不会很快(导出/导入)。
或者只是尝试在夜间几个小时的维护期间进行更改?:)