我在 MariaDB 中有一个表,其中有一个
NOT NULL
列,没有 DEFAULT
约束。我正在尝试向列添加 DEFAULT
约束,但花费的时间太长。该表仅包含 20k 行,这根本不重要,因为不需要更新任何数据。
确切的 DDL 查询是:
ALTER TABLE my_table MODIFY COLUMN external_id int(11) DEFAULT 0 NOT NULL;
请注意,该列已经不可为空,并且没有添加列,因此不需要更改任何数据。新的默认值应仅适用于从现在开始插入的新记录,并且不应以任何方式影响任何现有记录。
这是 MariaDB 的一个怪癖吗?它尝试更新表中的所有行,即使它不需要?
事实证明这不完全是 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;