使用 ALTER TABLE 查询添加 DEFAULT 约束的标准方法是什么?

What is the standard way to add DEFAULT constraint using ALTER TABLE query?

我想在 MySQL 中创建 table 后更改列的默认值。以下哪一项查询是在创建 table 后更改列默认值的标准方法?

  1. ALTER TABLE table_name 
    MODIFY attribute_name DATATYPE DEFAULT default_value;
    
  2. ALTER TABLE table_name 
    ALTER attribute_name SET DEFAULT default_value;
    

两者都有效。

如果您使用 MODIFY COLUMN,您必须记住包括列数据类型和该列上可能存在的其他选项,例如 NOT NULL、AUTO_INCREMENT 或 ZEROFILL。如果您忘记了这些选项之一,它会从列定义中删除。

这可能会产生意想不到的副作用。例如,更改列的默认值是仅元数据更改,因此即使 table 很大,它也是即时的。但是将列的可空性更改为 NOT NULL 或从 NOT NULL 更改需要 table 重组。因此,如果您不小心通过将该选项排除在外而更改了列的可空性,您会发现自己在不必要的情况下等待了几个小时。

如果您使用 ALTER COLUMN ... SET DEFAULT,则不必拼出所有这些列选项。它们保持不变。如果您只想更改默认值,这样更方便且不易出错。

至于哪个是标准的,ALTER COLUMN .. SET DEFAULT在ANSI/ISOSQL规范中。 MODIFY COLUMN 是为了 Oracle 兼容性而对标准的 MySQL 扩展。