Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
在数据库中创建域。
CREATE { DOMAIN | DATATYPE } [ AS ] domain-name data-type [ [ NOT ] NULL ] [ DEFAULT default-value ] [ CHECK ( condition ) ] [ AS USER user-name ]
domain-name : identifier
data-type : built-in data type, with precision and scale
DOMAIN | DATATYPE 子句 建议使用 CREATE DOMAIN 而不是 CREATE DATATYPE,因为 CREATE DOMAIN 是在 SQL/2008 标准中定义的。
NULL 子句 此子句可用于指定域的为空性。当使用域定义列时,将按如下方式确定为空性:
在列定义中指定为空性。
在域定义中指定为空性。
如果未在列定义或域定义中显式指定为空性,则使用 allow_nulls_by_default 选项的设置。
CHECK 子句 使用 CHECK 约束创建域时,可以在 CHECK 约束的搜索条件中使用以 @ 符号为前缀的变量名称。如果使用该数据类型定义列,这样的变量将被列名称替换。这样就可以使域的 CHECK 约束应用到每个使用该域定义的表列。
AS USER 子句 指定对象的所有者。
域是内置数据类型的别名,在适用的时候还会包括精度值和小数位数值。它们提高了方便性并促进了数据库的一致性。
域是数据库中的对象。其名称必须遵守标识符规则。与内置数据类型名一样,域名始终不区分大小写。
创建数据类型的用户会自动成为此数据类型的所有者。在 CREATE DATATYPE 语句中不能指定所有者。域名必须唯一,且所有用户都可以访问此数据类型,而不必使用所有者作为前缀。
域可以有 CHECK 条件和 DEFAULT 值,您可以指示数据类型是否允许使用 NULL 值。在域上定义的任何列都将继承这些条件和值。在列定义中显式指定的任何条件或值会替换为域指定的条件或值。
您必须具有 CREATE DATATYPE 或 CREATE ANY OBJECT 系统特权才能创建由您拥有的域。您无法创建由他人拥有的域。
自动提交。
SQL/2008 域支持是 SQL/2008 标准中的可选 SQL 语言功能 F251。
以下语句创建名为 address 的域,它包含长度为 35 个字符的字符串并且可以为 NULL。
CREATE DOMAIN address CHAR( 35 ) NULL;
以下语句创建名为 ID 的域,它不允许使用 NULL,且在缺省情况下被设为自动递增。
CREATE DOMAIN ID INT NOT NULL DEFAULT AUTOINCREMENT;
以下语句创建名为 PhoneNumber 的域,它在 CHECK 约束内使用正则表达式确保字符串是格式正确的北美洲电话号码:12 个字符长,包含 3 位地区号、3 位交换码和 4 位号码,由横线或空格分隔。
CREATE DOMAIN PhoneNumber CHAR(12) NULL CHECK( @PhoneNumber REGEXP '([2-9][0-9]{2}-[2-9][0-9]{2}-[0-9]{4})|([2-9][0-9]{2}\s[2-9][0-9]{2}\s[0-9]{4})');
数据库中的一些列用于存储雇员姓名,其它列用于存储地址。那么,您可以定义以下域。
CREATE DOMAIN persons_name CHAR(30) CREATE DOMAIN street_address CHAR(35);
定义了这些域后,则可以按照类似使用内置数据类型的方式使用它们。可以使用这些定义来定义表,如下所示。需要 CREATE PROCEDURE 特权才能执行以下语句。
CREATE TABLE myCustomers ( ID INT DEFAULT AUTOINCREMENT PRIMARY KEY, Name persons_name, Street street_address);
在上例中,表的主键指定为整数类型。实际上,许多表都需要相似的标识符。创建一个标识符域供这些应用程序使用,要比将主键指定为整数更为方便。
创建域时,可以指定一个缺省值,并提供检查约束,以确保不能将不适当的值键入任何属于这种类型的列。
通常使用整数值作为表标识符。正整数非常适合于用作唯一标识符。由于可能在许多表中使用这样的标识符,因此可以定义以下域。
CREATE DOMAIN identifier UNSIGNED INT DEFAULT AUTOINCREMENT;
可以使用此定义重写 Customers 表的定义,如上所示。
CREATE TABLE Customers2 ( ID identifier PRIMARY KEY, Name persons_name, Street street_address );