是否可以在不使用alter语句的情况下将新列添加到现有表中?在不使用更改语句的情况下添加新列
回答
其他人都毫不含糊地回答: “不,这是不可能的。”这是你的字面问题的答案。但我想知道为什么你问这个问题。
MySQL最大的难点之一就是使用ALTER TABLE
锁定表格,而您正在进行像添加列这样的更改,并且表格中的数据越多,重新构建表格的时间越长。我猜这是你的问题,并且你正在尝试获得一个替代方案,在添加新列时不会阻止对表的访问。
(。在将来,它会帮助人们给你最好的答案,如果你解释一下你正在试图做什么)
的这个问题的答案是肯定的,有一个解决方案:pt-online-schema-change是一个免费的工具,可以完成这件事。
您可以像使用ALTER TABLE一样使用它,但可以在命令行而不是SQL查询中使用它。
pt-online-schema-change --alter "ADD COLUMN c1 INT" D=sakila,t=actor
在此示例中,数据库名称为sakila
和表名是actor
。该脚本做了很多工作在幕后:
- 创建像原来表的表,但空行的
- ALTER TABLE来添加列或任何其他改变你告诉它。你可以做任何你通常用ALTER TABLE做的事情。实际上,它正在为你做ALTER TABLE,而不是空副本表。
- 将原始表中的行复制到后台的新表中。
- 创建触发器以捕获对原始表进行的任何更改,同时逐渐复制大量数据。
- 所有数据都被复制后,交换新表(带额外的列)和原始表的名称。
- 放下原始表格。
这有几点注意事项,就像原始表必须有一个主键,并且不能有现有的触发器。
它比传统的ALTER TABLE需要更长的时间,但由于它不阻止对原始表的访问,所以它更方便。
这有帮助吗?
非常感谢您的回复。 –
实际上,这个问题是在面试中问我的。面试官问我是否执行alter语句的处理时间超过了大表号的加载时间。的列,可以使用替代alter语句的替代方法向表中添加新列。我对面试官的回答与上面提到的相似,只是需要进一步澄清。 –
是否可以在不使用alter语句的情况下将新列添加到现有表中?
号
- 1. 如何在不添加大括号的情况下使用If语句?
- 2. 在不更改源代码的情况下添加钩子
- 3. 如何在不更改配置的情况下添加地图?
- 4. 在不更改WSDL文件的情况下添加soap故障?
- 5. highchart:在不改变系列线条的情况下添加点
- 6. Switch语句。使用默认情况下
- 7. 在不更新Web.config的情况下添加WCF Web服务
- 8. 在不加载新页面的情况下更改网址
- 9. 在不重新加载网页的情况下更改标题
- 10. 在不重新加载页面的情况下更改URL
- 11. 如何在不更改凭据的情况下更新用户
- 12. 在不改变VB代码的情况下在Excel中添加新列
- 13. 在不添加新类的情况下更改css中的颜色?
- 14. 如何在不加载ActiveRecord对象的情况下更新列
- 15. 如何在不使用if语句的情况下重写?
- 16. 如何在不使用union的情况下编写Sql语句?
- 17. 只有在它为空的情况下更新列 - 内部替换为语句
- 18. 在不使用UDF的情况下向pyspark数据框添加新列?
- 19. 添加情况下Yii的SQL命令对象语句
- 20. 在不重新加载页面的情况下更改列表内容
- 21. 改进我使用PDO和添加更新语句的SELECT
- 22. 在sqlalchemy的情况下选择语句
- 23. 在不重新启动的情况下应用vimrc更改
- 24. 是否可以在不使用foreach的情况下重新创建此语句?
- 25. 在不更改app_id的情况下更新XAP sllauncher.exe
- 26. 如何在不更改版本的情况下更新nuget
- 27. 如何在不更改rowversion的情况下更新记录
- 28. 在不更改版本的情况下更新受管文档
- 29. 如何在不运行无限循环的情况下添加if-else语句?
- 30. 在不用Java重新编译的情况下添加实现?
“ALTER”有什么问题? – Ravi
为什么你不使用ALTER –
删除并创建... – soft87