CREATE DOMAIN
定义一个新域。
概要
CREATE DOMAIN name [AS] data_type [DEFAULT expression]
[ COLLATE collation ]
[ CONSTRAINT constraint_name
| NOT NULL | NULL
| CHECK (expression) [...]]
描述
CREATE DOMAIN
创建一个新域。
域本质上是具有可选约束(对允许的值集的约束)的数据类型。
定义域的用户将成为其所有者。
域名在其模式中存在的数据类型和域之间必须唯一。
如果提供了模式名称(例如CREATE DOMAIN myschema.mydomain ...
),则将在指定的模式中创建域。
否则,它将在当前模式中创建。
域对于将字段上的公共约束抽象到单个位置进行维护很有用。
例如,几个表可能包含电子邮件地址列,所有这些列都需要相同的CHECK
约束来验证地址语法。
定义域比为每个具有电子邮件列的表设置列约束要容易得多。
为了能够创建域,您必须对基础类型具有USAGE
特权。
参数
name
要创建的域的名称(可以由模式指定)。
data_type
域的基础数据类型。这可能包括数组说明符。 DEFAULT expression
为域数据类型的列指定默认值。 该值是任何无变量的表达式(但不允许子查询)。 默认表达式的数据类型必须与域的数据类型匹配。 如果未指定默认值,则默认值为空值。 默认表达式将在未为列指定值的任何插入操作中使用。 如果为特定列定义了默认值,它将覆盖与该域关联的任何默认值。 反过来,域默认值将覆盖与基础数据类型关联的任何默认值。
COLLATE collation
域的可选归类。
如果未指定排序规则,则使用基础数据类型的默认排序规则。
如果指定了COLLATE
,则基础类型必须可整理。
CONSTRAINT constraint_name
约束的可选名称。如果未指定,系统将生成一个名称。
NOT NULL
通常可以防止该域的值为null。
但是,如果为该域分配了已变为空的匹配域类型仍然是可行的,
例如,通过左连接或诸如INSERT INTO tab (domcol) VALUES ((SELECT domcol FROM tab WHERE false))
之类的命令。
NULL 该域的值允许为空。 这是默认值。 此子句仅用于与非标准SQL数据库兼容。 不建议在新应用中使用它。
CHECK(expression)
CHECK
子句指定完整性约束或测试域必须满足的值。
每个约束必须是一个产生布尔结果的表达式。
它应该使用关键字VALUE
来引用要测试的值。
当前,CHECK
表达式不能包含子查询,也不能引用VALUE
以外的变量。
示例
创建us_zip_code
数据类型。
使用正则表达式测试来验证该值看起来像是有效的美国邮政编码。
CREATE DOMAIN us_zip_code AS TEXT CHECK
( VALUE ~ '^\d{ 5}$' OR VALUE ~ '^\d{ 5}-\d{ 4}$' );
兼容性
CREATE DOMAIN
符合SQL标准。
另见
[ALTER DOMAIN](ALTER_DOMAIN.html#topic1)
,
[DROP DOMAIN](DROP_DOMAIN.html#topic1)
Parent topic: SQL Command Reference