mysql 如何在我的sql中删除列当ndb_allow_copying_alter_table=OFF时

esbemjvw  于 2023-05-28  发布在  Mysql
关注(0)|答案(2)|浏览(149)

我们正在使用mysql alter命令删除一个列,但管理员最近设置了ndb_allow_copying_alter_table=OFF,现在在运行alter查询时,我们得到以下错误:
错误1846(0A000):不支持隐式复制alter。原因:ndb_allow_copying_alter_table=0。尝试ALGORITHM=COPY以强制更改。
以前有人遇到过这种情况吗?

4bbkushb

4bbkushb1#

我会尝试使用instant方法来看看是否有效:即时操作
这应该看起来像这样:

ALTER TABLE tbl_name DROP COLUMN column_name, ALGORITHM=INSTANT;

如果你再次得到一个错误,你应该使用“算法=复制”,而不是,请让我知道。

q9yhzks0

q9yhzks02#

config:ndb_allow_copying_alter_table=OFF确认修改后的表结构不会显示
当你的mysql版本> 8.0,你可以使用

ALTER TABLE tbl_name DROP COLUMN column_name, ALGORITHM=INSTANT;

它会强制修改表结构,但是这个操作会修改集群中的其他mysql机器,你必须清楚知道你在做什么。
该命令可用于立即删除表列,而无需复制表,无需临时表,使其更快,更有效,如果删除的列不存在于任何其他相关对象(如索引,约束,触发器等),则可以使用ALGORITHM=INSTANT选项执行立即删除。否则,MySQL将回退到复制表来执行删除操作。
如果要使用复制方法删除此列,可以使用其他命令:

ALTER TABLE table_name DROP COLUMN column_name, ALGORITHM=COPY;

相关问题