域是内置数据类型的别名,包括适用的精度值和小数位数值,还可以包括 DEFAULT 值和 CHECK 条件。Adaptive Server Anywhere 中预先定义了一些域(如货币数据类型),您也可以添加更多自己的域。
域(也被称为用户定义的数据类型)允许整个数据库中的列都被自动定义成相同的数据类型,有相同的 NULL 或 NOT NULL 条件、相同的 DEFAULT 设置和相同的 CHECK 条件。域有利于整个数据库的一致性,并且可以消除一些错误类型。
域是通过 CREATE DOMAIN 语句来创建的。有关完整的语法说明,请参见 CREATE DOMAIN 语句。
下面的语句创建了一个名为 street_address 的数据类型,它是一个有 35 个字符的字符串。
CREATE DOMAIN street_address CHAR( 35 )
可以使用 CREATE DATATYPE 替代 CREATE DOMAIN,但不建议这样做,因为 CREATE DOMAIN 是 SQL/3 标准草案中使用的语法。
创建数据类型时需要资源权限。创建了某个数据类型后,执行 CREATE DOMAIN 语句的用户 ID 就是该数据类型的所有者。任何用户都可以使用该数据类型。与其它数据库对象不同,所有者名称从不作为数据类型名称的前缀。
在定义列时,street_address 数据类型的使用方式与任何其它数据类型完全相同。例如,在以下有两列的表中,第二列为 street_address 列:
CREATE TABLE twocol (
id INT,
street street_address
)域可被其所有者或 DBA 使用 DROP DOMAIN 语句加以删除:
DROP DOMAIN street_address
只有当数据类型没有在数据库中的任何表中使用时,才能执行该语句。如果尝试删除正在使用中的域,会显示消息 [表'SYSUSERTYPE'中行的主键正在另一个表中被引用]。
在域中可以内置许多与列关联的属性,如允许 NULL 值、具有 DEFAULT 值等。以这样的数据类型(域)定义的任何列都自动继承 NULL 设置、CHECK 条件和 DEFAULT 值。这样就可以以一种类似的含义在整个数据库的列中内置一致性。
例如,示例数据库中的很多主键列是持有 ID 号的整数列。以下语句创建了对这些列可能有用的数据类型:
CREATE DOMAIN id INT NOT NULL DEFAULT AUTOINCREMENT CHECK( @col > 0 )
以数据类型 id 创建的任何列都不能包含 NULL,它缺省为自动递增值,而且必须为正数。在 @col 变量中,可以使用任何标识符取代 col。
在需要时,可以通过显式提供列的属性,替换数据类型的属性。一个以数据类型 id 创建的、但显式允许 NULL 值的列允许包含 NULL,而不考虑 id 数据类型的设置。
命名约束和缺省值 在 Adaptive Server Anywhere 中,创建的域具有基本数据类型、可选的 NULL 或 NOT NULL 条件,一个缺省值和一个 CHECK 条件。不支持命名约束和命名缺省值。
创建数据类型 在 Adaptive Server Anywhere 中,可以使用 sp_addtype 系统过程添加域,也可以使用 CREATE DOMAIN 语句。在 Adaptive Server Enterprise 中,则必须使用 sp_addtype。
SQL Anywhere Studio 9.0.2
版权所有 © 1989–2005 Sybase, Inc. 部分版权所有 © 2001–2005 iAnywhere Solutions, Inc. 保留所有权利。