在一个巨大的表中更改mysql字段名称

dem*_*can 6 mysql alter

我有一个2100万行的表.我必须更改其中一个行名.当我尝试查询"alter table company change id new_id int(11)"; 查询永远不会结束

有没有一种简单的方法来改变大的mysql表的字段名称?

mat*_*sko 5

首先,在任何事情之前,备份表:

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_INCREMENTNOT NULL.因此最好将其包含在alter语句中.

ALTER TABLE big_table MODIFY COLUMN id INT(11) NOT NULL AUTO_INCREMENT;
Run Code Online (Sandbox Code Playgroud)

基本上只需复制ID列的create语句区域并替换所需的内容并将其包含在modify语句中.


Bil*_*win 5

使用 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


Ada*_*ski 0

你有什么想法:

  1. 导出所有数据并截断表
  2. 改变表
  3. 更改导出文件中的行名称
  4. 导入文件

这只是一个快速的想法,但它不会很快(导出/导入)。

或者只是尝试在夜间几个小时的维护期间进行更改?:)