mysql - 在不重新创建 MySQL 表的情况下更改列名

标签 mysql alter

有没有办法在不进行重大更改的情况下重命名 InnoDB 表上的列?

table 很大,我想避免大的停机时间。

最佳答案

不幸的是,重命名列(使用 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'

更新:MySQL 5.6 可以在不重建表的情况下执行某些类型的 ALTER 操作,更改列名是支持在线更改的操作之一。参见 http://dev.mysql.com/doc/refman/5.6/en/innodb-create-index-overview.html了解哪些类型的改变支持或不支持这一点。

关于mysql - 在不重新创建 MySQL 表的情况下更改列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8172540/

相关文章:

mysql - 没有使用 MySQL Connector/J 的服务器端准备语句

MySQL/Linux : Custom stopword file - permission denied

MySql - 同时更改几个表

oracle - 如何更改 Oracle 中的触发器?

javascript - 我可以在 ALTER 查询中使用问号吗?

php - JSON 输出包括索引号

php - 在 div 中发布表单,菜单 div 分开

mysql - 将表从 DBeaver 导出到 MySQL 数据库时如何修复丢失的行/数据?

mysql - 更改MySQL表的表结构

sql - 微软 Access : adding column if not exist (or try/catch it)