更改大型表中的mysql字段名
我有一个有2100万行的表。我必须更改其中一行的名称。当我尝试查询“alter table company change id new_id int(11)”时;查询永远不会结束更改大型表中的mysql字段名,mysql,alter,Mysql,Alter,我有一个有2100万行的表。我必须更改其中一行的名称。当我尝试查询“alter table company change id new_id int(11)”时;查询永远不会结束 有没有一种简单的方法来更改大mysql表的字段名 您认为: 导出所有数据并截断表 更改表格 更改导出文件中行的名称 导入文件 这只是一个快速的想法,但不会很快(导出/导入) 或者在夜间几个小时的维护中试着做些改变?:) 首先,在备份表之前: mysqldump -uroot -p db big_table > /
有没有一种简单的方法来更改大mysql表的字段名 您认为:
或者在夜间几个小时的维护中试着做些改变?:) 首先,在备份表之前:
mysqldump -uroot -p db big_table > /tmp/big_table.backup.sql
执行ALTER命令时要记住的一件事是,绝对要确保ALTER的列详细信息与您不希望更改的列详细信息相同
例如:
ALTER TABLE big_table MODIFY COLUMN id INT(11)
将跳过任何其他内容,如自动增量
和非空
。所以最好也将其包含在alter语句中
ALTER TABLE big_table MODIFY COLUMN id INT(11) NOT NULL AUTO_INCREMENT;
基本上只需复制ID列的create语句区域,替换所需内容并将其包含到modify语句中即可。您只需执行以下操作:
ALTER TABLE big_table MODIFY COLUMN id INT(11) NOT NULL AUTO_INCREMENT;
MyISAM表
InnoDB表
完成后,big_table_bak
是您的备份
如果您对新的big_表
感到满意,则可以运行
DROP TABLE big_table_bak;
DROP TABLE big_table;
ALTER TABLE big_table_bak RENAME big_table;
如果要恢复,可以运行
DROP TABLE big_table_bak;
DROP TABLE big_table;
ALTER TABLE big_table_bak RENAME big_table;
试试看 在一个巨大的Mysql表中更改一个字段的名称,最省时的方法是: 创建新表格\u大表格\u表格
从大表格中选择id作为新的表格id、字段1、字段2、字段3。使用pt online schema change进行长期运行的表格更改,而不将自己锁定在表格之外 完成更改通常需要更长的时间,但您仍然可以在表执行工作时读取和写入表 您还可以收听作者的网络研讨会,讨论其工作原理和一些注意事项:
您在PHPMyAdmin中尝试过吗?这可能会使用我在PHPMyAdmin和commandline中尝试过的更有效的方法。然后重新导入数据。该列是否定义为int(11)且没有其他属性?如果只是更改名称,MySQL应该只更新元数据而不触及行。您使用的是什么存储引擎?文档中说,重命名列(InnoDB存储引擎除外)只会修改表元数据,而不会立即修改表数据,方法是更改表的.frm文件,而不接触表内容。但是我的情况不是这样。另外,如果alter由于某种原因出错,那么您可以搜索并替换
id INT(11)CREATE TABLE
字段,位于big_TABLE.backup.sql
备份文件中的CREATE TABLE
语句中,以匹配所需内容,然后使用mysql-uroot-p db
正常导入。谢谢。我正在尝试。我将发布结果。我已经尝试了建议。是的,它工作正常。我已经使用了拆分和cat以编辑大sql文件。太好了。也许可以添加您为使其完全工作而必须进行的更改和步骤,然后让我们结束这个问题:)如果您有2100万行,这并不是那么简单……是的,我有7700万条记录。这可能需要太长时间,我想,会评论晚了需要多长时间