CREATE DOMAIN

Name

CREATE DOMAIN  --  定义一个新域

Synopsis

CREATE DOMAIN domainname [AS] data_type
    [ DEFAULT default_expr ]
    [ constraint [, ... ] ]

这里 constraint 是∶

[ CONSTRAINT constraint_name ]
{ NOT NULL | NULL }
  

参数

domainname

要创建的域名字(可以有大纲修饰).

data_type

域的下层数据类型.它可以包含数组声明字. 请参考用户手册获取更多有关数据类型和数组的信息.

DEFAULT default_expr

DEFAULT 子句为域数据类型声明一个缺省值. 该值是任何不含变量的表达式(但不允许子查询). 缺省表达式的数据类型必需匹配域的数据类型.

缺省表达式将用在任何不为该字段声明数值的插入操作. 如果域没有缺省值,那么缺省是 NULL.

注意: 如果为特定的字段声明了缺省值,那么它覆盖任何和该域相关联的缺省值. 然后,域的缺省覆盖任何与下层数据类型相关的缺省.

CONSTRAINT constraint_name

一个约束的可选名称.如果没有声明,系统生成一个名字.

NOT NULL

这个域的数值不允许为 NULL.

NULL

这个域的数值允许为空.它是缺省.

这个子句只是用于和非标准的 SQL 数据库兼容用. 我们不建议在新的应用中使用它.

输出

CREATE DOMAIN

如果域成功创建,返回此信息.

描述

CREATE DOMAIN 允许用户为当前数据库在 PostgreSQL列注册一个新的用户数据域. 定义域的用户成为其所有者.

如果给出一个大纲名称(比如,CREATE DOMAIN myschema.mydomain ...), 那么该域是在指定的大纲中创建的.否则它会在当前大纲中创建 (在搜索路径中最前面的那个;参阅 CURRENT_SCHEMA()). 域名字必需在其所在大纲中的现有类型和域中唯一.

域可以便于我们把不同表之间的公共域抽取到一个位置进行维护. 一个电子邮件地址字段可能在多个表中使用,所有的都是同样的属性. 我们可以定义并使用一个域,而不是分别设置每个表的约束.

例子

这个例子创建了 country_code 数据类型并且在 一个表定义中使用了该类型.

CREATE DOMAIN country_code char(2) NOT NULL;
CREATE TABLE countrylist (id INT4, country country_code);

又见

DROP DOMAIN, PostgreSQL 程序员手册