Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 参考 » 使用 SQL » SQL 数据类型

 

是内置数据类型的别名,包括适用的精度值和小数位数值,还可以包括 DEFAULT 值和 CHECK 条件。SQL 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 语句的用户 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 值。这样就能以一种类似的含义在整个数据库的列中构建一致性。

例如,SQL Anywhere 示例数据库中的许多主键列是保存 ID 号的整数列。以下语句创建的数据类型可能会对此类列有帮助:

CREATE DOMAIN id INT
NOT NULL
DEFAULT AUTOINCREMENT
CHECK( @col > 0 );

缺省情况下,使用 id 数据类型创建的列不允许为 NULL,其缺省值为自动递增值,而且必须保存正数。在 @col 变量中,可以使用任何标识符取代 col

可以通过显式地提供列的属性来替换该数据类型的属性。无论 id 数据类型的设置为何,以数据类型 id 创建并显式地允许 NULL 值的列都允许使用 NULL 值。

兼容性
  • 命名约束和缺省值   在 SQL Anywhere 中,创建的域具有基本数据类型,也可以具有 NULL 或 NOT NULL 条件、缺省值和 CHECK 条件。不支持命名约束和命名缺省值。

  • 创建数据类型   在 SQL Anywhere 中,可以使用 sp_addtype 系统过程添加域,也可以使用 CREATE DOMAIN 语句。