向 MariaDB 中现有的不可空列添加 DEFAULT 约束需要太长时间

问题描述 投票:0回答:1

我在 MariaDB 中有一个表,其中有一个

NOT NULL
列,没有
DEFAULT
约束。我正在尝试向列添加
DEFAULT
约束,但花费的时间太长。该表仅包含 20k 行,这根本不重要,因为不需要更新任何数据。 确切的 DDL 查询是:

ALTER TABLE my_table MODIFY COLUMN external_id int(11) DEFAULT 0 NOT NULL;

请注意,该列已经不可为空,并且没有添加列,因此不需要更改任何数据。新的默认值应仅适用于从现在开始插入的新记录,并且不应以任何方式影响任何现有记录。

这是 MariaDB 的一个怪癖吗?它尝试更新表中的所有行,即使它不需要?

mariadb
1个回答
0
投票

事实证明这不完全是 MariaDB/MySQL 问题。使用以下命令添加默认值,立即完成:

ALTER TABLE my_table MODIFY COLUMN external_id int DEFAULT 0 NOT NULL;

注意本例中缺少的列长度。 然而以下几点:

DESCRIBE my_table;

演出:

...
external_id int(11) NOT NULL
...

因此,即使对于 MariaDB,列长度为 11,将长度设置为 11(即没有更改)也会触发整个表的完整更新。

当然另一种选择是使用以下内容:

ALTER TABLE my_table ALTER COLUMN external_id SET DEFAULT 0;
© www.soinside.com 2019 - 2024. All rights reserved.