MODIFY 子句

使用 MODIFY 子句更改列的数据类型、长度或缺省值,添加或删除列的安全标签,允许或不允许列中有 NULL 值或者重置 SERIAL 、SERIAL8 或 BIGSERIAL 列的序列号。

MODIFY Clause
Modify Column Clause
元素 描述 限制 语法
column 要修改的列 必须在表中存在。不能是集合或 IDSSECURITYLABEL 数据类型。 标识符

您不能将列的数据类型更改为 COLLECTION 或 ROW 类型。

受保护表的 IDSSECURITYLABEL 列不能被不同的数据类型修改,现有的列也不能被更改为 IDSSECURITYLABEL 类型。

当修改列时, 所有 先前与该列相关联的属性(即,缺省值、单列检查约束或引用约束)被删除。当希望保留列的某些属性,例如 PRIMARY KEY ,您必须在同一 MODIFY 子句中重新指定那些属性。

例如,如果您将现有列 quantity 的数据类型更改为 SMALLINT ,但希望保留其缺省值(在这种情况中,为 1)和 NOT NULL 列属性,可以发出以下语句:
ALTER TABLE items MODIFY (quantity SMALLINT DEFAULT 1 NOT NULL);
注: 在 MODIFY 子句中两个属性都再次被指定。
当在 MODIFY 子句中指定 PRIMARY KEY 约束,数据库服务器也会默示地在同一列创建 NOT NULL 约束或将同一组列更改为主键。
当更改列的数据类型时,数据库服务器不会在适当的位置执行修改。下个示例将 VARCHAR(15) 列更改为 LVARCHAR(3072) 列:
ALTER TABLE stock MODIFY (description LVARCHAR(3072));
当修改有列约束与之相关联的列时,以下约束被删除:
  • 所有单列约束被删除。
  • 所有引用该列的引用约束被删除。
  • 如果被修改列是多列主键或者唯一约束的一部分,则所有引用多列的引用约束也被删除。

例如,如果修改具有唯一约束的列,则该唯一约束被删除。如果其它表中的列引用该列,则这些引用约束也被删除。另外,如果该列是多列主键或唯一约束的一部分,则不删除多列约束,但其它表放置在该列上的任何引用约束要被删除。

另一个示例,假设列是多列主键约束的一部分。其它两个表中的外键引用该主键。如果修改此列,则不删除多列主键约束,但是其它表放置在它上面的引用约束要被删除。

考虑以下语句定义的表:

CREATE TABLE tab1(c1 INT, c2 INT);

要添加 NOT NULL 约束,则需要 ALTER TABLE MODIFY 语句:

ALTER TABLE tab1 MODIFY (c1 INT NOT NULL);

不能使用 ADD CONSTRAINT 子句添加 NULL 或 NOT NULL 约束。

1 请参阅 数据类型
2 请参阅 DEFAULT 子句
3 请参阅 单列约束格式
4 请参阅 Modify Column Security
5 该路径只能使用一次