南大通用GBase8s 常用SQL语句(七十)
DEFAULT 子句
使用 DEFAULT 子句为数据库服务器指定插入列的值(当没有为列指定显式值时)。
不能为 SERIAL 、BIGSERIAL 或 SERIAL8 列指定缺省值。
DEFAULT 子句
元素 | 描述 | 限制 | 语法 |
label | 安全标签的名称 | 必须存在并且属于保护该表的安全策略。该列必须是 IDSSECURITYLABEL 类型。 | 标识符 |
literal | 字母或数字字符的字符串 | 必须是适合该列的数据类型。请参阅将文字值作为缺省值。 | 表达式 |
将 NULL 作为缺省值
如果没有为列指定缺省值,除非您在该列上放置了 NOT NULL 约束,否则缺省值为 NULL 。在这种情况中,不存在缺省值。
如果将 NULL 指定为列的缺省值,则不能将 NOT NULL 约束指定为列定义的一部分。(有关 NOT NULL 约束的更多信息,请参阅 使用 NOT NULL 约束。)
当列是主键的一部分时,NULL 不是该列的有效缺省值。
当列是 BYTE 或 TEXT 数据类型时,NULL 是唯一有效的缺省值。
在 GBase 8s 中,如果列是 BLOB 或 CLOB 数据类型,则 NULL 是唯一有效的缺省值。
将文字值作为缺省值
可将文字值指定为缺省值。文字值是字母或数字字符组成的字符串。要将文字值用作缺省值,您必须遵循以下表中的语法限制。
对数据类型的列 | 缺省值的格式 |
BOOLEAN | 将 't' 或 'f' (分别代表 true 或 false)用作 引用字符串 。 |
CHAR, CHARACTER VARYING, DATE, VARCHAR, NCHAR, NVARCHAR, LVARCHAR | 引用字符串。请参阅 DATE 后的说明。 |
DATETIME | 文字的 DATETIME |
BIGINT, DECIMAL, FLOAT, INT8, INTEGER, MONEY, SMALLFLOAT, SMALLINT | 精确数值 |
INTERVAL | 文字的 INTERVAL |
Opaque data types | 引用字符串 ,以 单列约束格式 标识 |
DATE 文字必须是 DBDATE (或 GL_DATE)环境变量指定的格式。在缺省的语言环境中,如果没有设置 DBDATE 也没有设置 GL_DATE ,则日期文字必须是 mm/dd/yyyy 的格式。
使用常量表达式作为缺省值
可以将常量表达式作为缺省列值。
下表列出了您可指定的常量表达式,以及相应的列的数据类型要求和建议的大小(以字节为单位)。
常量表达式 | 数据类型要求 | 建议大小 |
CURRENT, SYSDATE | DATETIME 列及匹配的限定符 | 足够的字节存储语言环境中最长的 DATETIME 值 |
DBSERVERNAME, SITENAME | CHAR 、VARCHAR 、NCHAR 、NVARCHAR 或 CHARACTER VARYING 列 | 128 字节 |
TODAY | DATE 列 | 足够的字节存储语言环境中最长的 DATE 值 |
USER, CURRENT_USER | CHAR 、VARCHAR 、NCHAR 、NVARCHAR 或 CHARACTER VARYING 列 | 32 字节 |
这些是我们建议的列大小,因为如果在 INSERT 或 ALTER TABLE 操作期间由于列长度太小无法存储缺省值时,数据库服务器将返回一个错误。
您不能为保存 OPAQUE 或 DISTINCTY 数据类型的列指定行为类似可变函数的常量表达式(即 CURRENT 、 SYSDATE 、USER 、TODAY 、SITENAME 或 DBSERVERNAME)作为缺省值。另外,如果数据值是加密或使用 UTF-8 语言环境中 Unicode 字符集编码的话,则需要较大的列大小。(关于对加密数据所需的存储大小的更多信息,请参阅本章随后关于 SET ENCRYPTION 语句的描述。)
有关这些函数的描述,请参阅 常量表达式。
以下示例创建了一个名为 accounts 的数据库。在 accounts 中,acc_num 、acc_type 和 acc_descr 列中有文字缺省值。acc_id 列的缺省值是用户的登录名。
CREATE TABLE accounts (
acc_num INTEGER DEFAULT 1,
acc_type CHAR(1) DEFAULT 'A',
acc_descr CHAR(20) DEFAULT 'New Account',
acc_id CHAR(32) DEFAULT CURRENT_USER);