南大通用GBase8s 常用SQL语句(七十)

DEFAULT 子句

使用 DEFAULT 子句为数据库服务器指定插入列的值(当没有为列指定显式值时)。

不能为 SERIAL 、BIGSERIAL 或 SERIAL8 列指定缺省值。

DEFAULT 子句

db2 缺省值为uuid sql缺省值怎么写_数据库

 

元素

描述

限制

语法

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);