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 标准。