ALTER DOMAIN name { SET DEFAULT expression | DROP DEFAULT } ALTER DOMAIN name { SET | DROP } NOT NULL ALTER DOMAIN name ADD domain_constraint [ NOT VALID ] ALTER DOMAIN name DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ] ALTER DOMAIN name RENAME CONSTRAINT constraint_name TO new_constraint_name ALTER DOMAIN name VALIDATE CONSTRAINT constraint_name ALTER DOMAIN name OWNER TO new_owner ALTER DOMAIN name RENAME TO new_name ALTER DOMAIN name SET SCHEMA new_schema
ALTER DOMAIN 修改一个域的定义。它有几种子形式:
这些形式设置或者删除一个域的缺省值。请注意缺省值只适用于随后的 INSERT 命令;他们并不影响使用该域已经在表中的行。
这些形式改变一个域是否标记为允许 NULL 值或者是不允许 NULL 值。 在使用域的字段包含非空的值的时候,你只可以使用 SET NOT NULL。
这种形式向域中增加一种新的约束,使用的语法和 CREATE DOMAIN 一样。 当一个新的约束增加至域中时,使用这个域的所有列将会按新增的约束条件进行检查。 这些检查也可以通过使用NOT VALID选项来增加新的约束条件进行关闭; 约束也可以以后通过ALTER DOMAIN ... VALIDATE CONSTRAINT语句生效。 新插入或是更新的记录将会按所有约束进行检查,甚至是标记为NOT VALID的约束。 NOT VALID只是对CHECK约束生效。
这种形式删除一个域上的约束。如果使用了IF EXISTS 选项并且约束并不存在时,系统不会抛出错误提示, 这种情况下系统只会发出一个提示信息。
这种形式更改一个域上的约束名称。
这种形式将域上以前以NOT VALID选项增加的约束进行生效,这样会对域中所有列的数据按这个指定的约束进行验证。
这种形式将域的所有者改变为一个指定的用户。
这种形式将改变域的名称。
这种形式将改变域的模式。所有与这个域有关的约束也会移至新的模式。
要使用ALTER DOMAIN语句,您必须是该域的所有者。 要修改一个域的模式, 您还必须在新模式上拥有CREATE权限。 要修改所有者, 您还必须是新的所有角色的直接或间接成员,并且该成员必须在此域的模式上有CREATE权限。 (这些限制强制了修改该所有者不会做任何通过删除和重建域不能做的事情。不过,超级用户可以以任何方式修改任意域的所有关系。)
一个要修改的现有域的名字(可以有模式修饰)。
域的新域约束。
要删除或是重命名的原有约束名。
不对已有数据进行约束的有效性验证。
自动级联删除依赖这个约束的对象。
如果有任何依赖对象,则拒绝删除约束。这是缺省行为。
域的新名称。
约束的新名称。
域的新的所有者的用户名。
域的新的模式名。
目前,如果命名的域或者任何派生的域用于数据库中任何一个表的一个复合列中, 那么 ALTER DOMAIN ADD CONSTRAINT和ALTER DOMAIN SET NOT NULL 将失败。 最终,他们应该加以改进以达到能够验证这种嵌套列的新约束。
给一个域增加一个NOT NULL 约束:
ALTER DOMAIN zipcode SET NOT NULL;
从一个域里删除一个NOT NULL约束:
ALTER DOMAIN zipcode DROP NOT NULL;
向一个域里增加一个检查约束:
ALTER DOMAIN zipcode ADD CONSTRAINT zipchk CHECK (char_length(VALUE) = 5);
从一个域里删除一个检查约束:
ALTER DOMAIN zipcode DROP CONSTRAINT zipchk;
从一个域里的检查约束重命名:
ALTER DOMAIN zipcode RENAME CONSTRAINT zipchk TO zip_check;
把域移动到另外一个模式:
ALTER DOMAIN zipcode SET SCHEMA customers;