添加新列而不使用Alter

时间:2017-09-30 12:44:04

标签: mysql sql database

是否可以在不使用alter statement的情况下将新列添加到现有表中?

2 个答案:

答案 0 :(得分:2)

  

是否可以在不使用alter语句的情况下将新列添加到现有表中?

没有

答案 1 :(得分:1)

其他人明确回答"不,这是不可能的。"这是你的字面问题的答案。但是我想知道你为什么问这个问题。

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花费更长的时间,但由于它不会阻止对原始表的访问,因此它更方便。

这有帮助吗?