使用 ALTER TABLE 查询添加 DEFAULT 约束的标准方法是什么?
What is the standard way to add DEFAULT constraint using ALTER TABLE query?
我想在 MySQL 中创建 table 后更改列的默认值。以下哪一项查询是在创建 table 后更改列默认值的标准方法?
-
ALTER TABLE table_name
MODIFY attribute_name DATATYPE DEFAULT default_value;
-
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 扩展。
我想在 MySQL 中创建 table 后更改列的默认值。以下哪一项查询是在创建 table 后更改列默认值的标准方法?
-
ALTER TABLE table_name MODIFY attribute_name DATATYPE DEFAULT default_value;
-
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 扩展。