Firebird数据库
Firebird数据库语言参考-域
2016-06-23 11:53:17

 

是关系数据库中的对象类型之一,域被当作一种特定的数据类型带有某些附加的属性而创建。一旦它被定义在数据库中,它可以重用多次定义表列,PSQL参数和PSQL局部变量。这些对象继承的所有域的属性。如果需要的话,一些属性可以重载定义在新的对象被定义时

 

本节介绍用于创建、 修改和删除域的语句的语法。详细的说明域和它们的用法可以在自定义数据类型中发现 — — 域。

 

创建域CREATE DOMAIN

 

作用:创建一个新的域
用于: DSQL, ESQL
语法:

 




 











 

 



















 











 

表 5.5. CREATE DOMAIN 语句参数

 

CREATE DOMAIN语句创建一个新的域
任何SQL数据类型都可以作为域的类型

 

 

ARRAY 类型:
• 如果域是一个数组,基本的数据可以是除了 BLOB和ARRAY的任何数据类型

• 数组的维数被规定在方括号中. (在语法块中,这些括号使用黑体出现,以区别于方括号标识的可选语法元素.)

• 对于每个数组维度,一个或两个整数数字定义其索引的上下边界范围:
- 默认情况下,数组是基于 1 的。下限是隐式的和仅上限边界需要指定。一个单独的数字小于 1 定义范围num..1 。和大于 1 的数字定义范围 1..num。
-用冒号(':')分隔的两个数字 和可选的空白,第二数大比第一大,可以用于显式的定义范围。一个或两个边界可以小于零,只要在上限边界是大于下限。

• 当数组具有多个维度时,每个维度的范围定义必须用逗号分隔和可选的空白。

• 仅当数组实际上存在时下标才会被验证。这意味着没有关于无效下标的错误消息将被返回,如果选择特定元素返回无,或者如果数组字段为空。字符类型 ︰ 可以使用 CHARACTER SET子句来指定 CHAR,VARCHAR 的字符集和 BLOB (SUB_TYPE 文本) 类型。如果未指定字符集,字符集指定为创建数据库时的默认字符集。如果没有字符集指定,默认情况下,当创建一个字符域时,将应用字符集 NONE。

 

 

 

 

 

DEFAULT 子句: 可选项DEFAULT允许为域指定一个默认值. 这值将被添加到继承此域的列,如果INSERT 语句执行时,在 DML 语句中没有为它指定值。局部变量和参数在PSQL模块参考这个域将用默认值初始化。对于默认值,使用的兼容的文本类型或一个兼容的类型的上下文变量。

 

NOT NULL 约束: 基于域的NOT NULL约束的列和变量将被阻止被作为NULL写入,即,需要一个值.

警告
在创建一个域时,注意避免指定相互矛盾限制。例如,非空和默认为空是矛盾的。

 

CHECK 约束: 可选项CHECK 子句为域指定约束 .域的约束指定条件必须满足表的列值或变量是从域继承而来,条件必须括在括号中,条件是逻辑表达式(也称为断言)能返回布尔结果TRUE、FALSE和UNKNOWN.条件考虑是否满足断言为其返回的值为 TRUE 或"未知的值"(相当于 NULL)。如果该谓词返回 FALSE,不符合接受条件。

 

VALUE 关键字: 关键字VALUE在一个域中的约束替换为基于这个域的表列或 PSQL 模块中的变量。它包含的值分配给变量或表列。
VALUE可以在CHECK约束的任何地方使用。虽然它通常用于条件的左边部分.

 

COLLATE: 可选项 COLLATE 允许指定排序序列,如果域是基于字符串数据类型之一,包括BLOB及其文本子类.如果没有指定排序规则序列,创建域是将指定一个默认的字符集的排序序列。

 

任何连接数据库的用户都能创建域。


 

1.创建一个域,使得它可以取的值大于1000,10,000为默认值。


 

2. 创建一个域,使得它可以取的值为 'Yes'或'No',使用数据创建时的指定的默认字符集 .

 

3.创建一个域使用 UTF8字符集和 UNICODE_CI_AI 排序规则序列.


 

4.创建一个DATE类型的域, 将不接受NULL值且使用当前的日期作为默认值.


 

5. 创建一个域定义NUMERIC(18, 3)类型的2个元素作为数组,开始的数据索引是1.

 

备注
一个数组类型定义的域可以仅用来定义表列。在PL SQL模块不能使用数组域来定义局部变量。

 

6. 创建一个域的元素只能是在COUNTRY表中定义的国家代码。


 

备注
给出的例子只显示使用断言和查询在域中的测试条件的可能性。不建议在实践中创建这种风格的域,除非查找表包含
永远不会删除的数据。


参阅: ALTER DOMAIN, DROP DOMAIN