6
A
回答
6
不幸的是需要MySQL来重命名一列(使用ALTER TABLE ... CHANGE COLUMN
)来运行一个完整的表副本。
结帐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以了解哪些类型的改动可以支持或不支持。
0
如果没有任何限制,就可以毫不费力地改变它,据我所知。如果您必须先删除约束,请修改并添加约束。
0
更改包含多行的表可能需要很长时间(但如果所涉及的列未编入索引,则可能很简单)。
如果你特别要避免使用专门为此设立了ALTER TABLE语法,你总是可以创建具有几乎相同的结构(但不同的名称)的表,所有的数据复制到它,像这样:
CREATE TABLE `your_table2` ...;
-- (using the query from SHOW CREATE TABLE `your_table`,
-- but modified with your new column changes)
LOCK TABLES `your_table` WRITE;
INSERT INTO `your_table2` SELECT * FROM `your_table`;
RENAME TABLE `your_table` TO `your_table_old`, `your_table2` TO `your_table`;
对于某些ALTER TABLE查询,上面的查询可能会快很多。但是,对于简单的列名更改,它可能很简单。我可能会尝试创建一个相同的表并在其上执行更改以查看您实际查看的时间。
相关问题
- 1. 在不重新创建MySQL表的情况下恢复数据
- 2. 在不更改资源名称的情况下更改URL
- 3. 如何在不重新创建表的情况下重命名表
- 4. 在不创建新列的情况下修改值
- 5. 在不更改扩展名的情况下更改文件的结尾名称
- 6. Android在不重新创建路径的情况下更改用户位置?
- 7. 如何在不创建页面重新加载的情况下更改Firefox window.location.hash?
- 8. 在不重新加载页面的情况下更改列表内容
- 9. 在不滚动列表的情况下重建容器列表
- 10. 如何在不创建新PDF的情况下更新PDF?
- 11. 在不更改用户对象的情况下更改TreeNode的名称
- 12. 在不更改构建文件的情况下设置Ant项目名称
- 13. 在不重新启动的情况下应用vimrc更改
- 14. 在不重新加载网页的情况下更改标题
- 15. 在不重新启动服务的情况下更改jobcron
- 16. 在不重新加载页面的情况下更改URL
- 17. Windows在不创建新文件的情况下修改文本
- 18. 如何在避免重复的情况下创建列表?
- 19. 如何在不重新创建表的情况下更改表中的字段顺序?
- 20. 如何在不允许插入的情况下创建MySQL表
- 21. 在不使用更改语句的情况下添加新列
- 22. 在不改变ggplot2中的颜色的情况下更改图例名称
- 23. 使用cookie名称创建更新表mysql创建
- 24. 如何更改脚手架名称而不重新创建?
- 25. Php MySQL仅在IP为新的情况下更新列
- 26. 在不更改页面名称的情况下更改默认子页面的名称WordPress管理员
- 27. 名称...不会在目前情况下
- 28. 如何在不中断服务的情况下重新命名/重新创建表格?
- 29. 如何在不更改扩展名的情况下重命名文件名
- 30. 如何在不知名的情况下重新命名约束
只看到ALTER的语法。 –