更改列名而不重新创建MySQL表

Ran*_*Ran 6 mysql alter

有没有办法重命名InnoDB表上的列而没有重大改变?

该表非常大,我想避免重大停机时间.

Bil*_*win 7

重命名一个列(with ALTER TABLE ... CHANGE COLUMN)不幸地需要MySQL运行一个完整的表副本.

查看pt-online-schema-change.这有助于您对表进行多种类型的ALTER更改,而不会在ALTER的持续时间内锁定整个表.在将数据复制到新表时,您可以继续读取和写入原始表.通过触发器捕获更改并将其应用于新表.

例:

pt-online-schema-change h=localhost,D=databasename,t=tablename \
  --alter 'CHANGE COLUMN oldname newname NUMERIC(9,2) NOT NULL'
Run Code Online (Sandbox Code Playgroud)

更新: MySQL 5.6可以在不重建表的情况下执行某些类型的ALTER操作,并且更改列的名称是在线更改所支持的名称之一.有关哪种类型的更改支持或不支持此操作的概述,请参阅http://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html.