列定义

使用 CREATE TABLE 语句的列定义部分列出新表的单列的名称和数据类型(可选的缺省值以及约束或安全标签)。

列定义
元素 描述 限制 语法
column 表中列的名称 在此表中必须是唯一的 标识符

由于行的最大大小是 32,767 字节,所以表中最多只能有大约 97 列可以是 COLLECTION 数据类型(SET 、LIST 和 MULTISET)。表中最多大约有195 列可以是数据类型 BYTE 、TEXT 、ROW 、LVARCHAR 、NVARCHAR 、VARCHAR 和可变长度的 UDT。(此处的 195 列是使用 2 KB 基本页大小的平台的最低的近似值。对于 4 KB 基本页大小的平台,如 Windows™ 和 AIX® 系统,这些数据类型的上限值大约为 450 列。)

这些数据类型的列的数目的上限还取决于描述数据库服务器存储在同一分区的表的其它数据。对于某些表,列数的最大值可能很小,如果压缩和存储在磁盘上的所有的 SQL 标识符(包括数据库名称、表名称和索引名称)的聚合长度减少了用于列的可用空间,则最大列数可能变小。

字符列大小语义

除非将 SQL_LOGICAL_CHAR 配置参数设置为在数据类型定义中的启用逻辑字符语义,否则内置字符类型列(如 CHAR 、LVARCHAR 、NCHAR 、NVARCHAR 或 VARCHAR)的任何显式或缺省存储大小规范以字节为单位进行解释。

将大小声明解释为逻辑字符语义可降低 INSERT 和 UPDATE 操作中列值存储不足的风险。当数据长度超出列的最大大小时,该结果取决于数据库的 ANSI 兼容的状态:
  • 如果数据库不兼容 ANSI ,则 GBase 8s 删除该值。当此删除发生时不会生成警告。
  • 如果数据库兼容 ANSI ,则 INSERT 或 UPDATE 操作失败并返回它们的错误。
      -1279: Value exceeds string column length.

请参阅 GBase 8s 管理员参考手册 中有关 SQL_LOGICAL_CHAR 配置参数的描述,以获取有关设置在多字节代码集(如,UTF-8)的语言环境中的效果的更多信息,其中单个逻辑字符可能需要多个字节的存储空间。

IDSSECURITYLABEL 列上的限制

以下限制影响列定义子句指定 DSSECURITYLABEL 数据类型的列以支持基于标签访问控制(LBAC)的使用:
  • 如果表没有安全策略,则持有 DBSECADM 角色的用户还必须包含 SECURITY POLICY 子句以指定安全策略。
  • 只有持有 DBSECADM 角色的用户可指定 IDSSECURITYLABEL 类型列。
  • 一个表只能具有一个 IDSSECURITYLABEL 类型的列。
  • IDSSECURITYLABEL 列不能具有列包含。
  • IDSSECURITYLABEL 列具有隐式的 NOT NULL 约束。如果在 DEFAULT 子句中没有为缺省的安全标签指定 label 名称,则该列的缺省值是由用户持有的写访问权的安全标签。
  • IDSSECURITY LABEL 列不能有任何显式单列约束,并且它不能是多列引用或检查约束的一部分。
  • IDSSECURITYLABEL 列不能被加密。

与任何 SQL 标识符一样,如果列名称是关键字,或者与表的名称相同,或者您以后与其它表一起使用的的另一个表的名称,则可能发生语义模糊(有时还会出现错误消息或意外行为)。有关 GBase 8s 的关键字的信息,请参阅 GBase 8s 的 SQL 关键字

如果您将表的一列定义为已命名的 ROW 类型,则该表不会采用该已命名的 ROW 的任何约束。

1 请参阅 数据类型
2 请参阅 DEFAULT 子句
3 请参阅 单列约束格式
4 请参阅 列安全子句