CREATE DOMAIN

CREATE DOMAIN

定义一个新的域。

概要

CREATE DOMAIN name [AS] data_type [DEFAULT expression] 
       [CONSTRAINT constraint_name
       | NOT NULL | NULL 
       | CHECK (expression) [...]]

描述

CREATE DOMAIN 创建一个新的域。域 本质上是一种带有可选约束(在允许的值集合上的限制)的数据类型。 定义一个域的用户将成为它的拥有者。 域的名称在其模式中的类型和域之间 必须保持唯一。

域主要被用于把字段上的常用约束抽象到一个单一的位置以便维护。例如, 几个表可能都包含电子邮件地址列, 而且都要求相同的 CHECK 约束来验证地址的语法。可以为此定义一个域,而不是在每个表上都单独设置一个约束。

参数

name
要被创建的域的名称(可以被方案限定)。
data_type
域的底层数据类型。可以包括数组指示符。
DEFAULT expression
子句为该域数据类型的列指定一个默认值。该值是任何没有变量的表达式(但不允许子查询)。 默认值表达式 的数据类型必须匹配域的数据类型。如果没有指定默认值,那么 默认值就是空值。 默认值表达式将被用在任何没有指定列值的插入操作中。如果为一个 特定列定义了默认值,它会覆盖与域相关的默认值。 继而,域默认值会覆盖任何与底层数据类型相关的默认值。
CONSTRAINT constraint_name
一个约束的名称(可选)。如果没有指定,系统会生成一个名称。
NOT NULL
这个域的值通常不能为空值。
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 标准。