多列约束格式

使用此选项将一个或多个约束指定到现有表中的一个列或一组列。

它与 CREATE TABLE 语句的多列约束格式极其类似,但是可选的 INDEX DISABLED 关键字在 CREATE TABLE 语句定义的外键约束中无效(返回错误)。

多列约束格式
FOREIGN KEY 定义
元素 描述 限制 语法
column 放置约束的列 不超过 16 列 标识符
constraint 禁用的外键约束的名称 在数据库中的索引和约束的名称中它必须唯一 标识符

在 CREATE TABLE 语句中,ALTER TABLE 的多列约束格式与单列约束格式不同之处在于,当您指定外键约束时,在 REFERENCES 子句之前需要 FOREIGN KEY 关键字。此外,如它的名称所指,多列约束格式可指定列列表作为新约束的范围,此语法同样对单列有效。

有关 INDEX DISABLED 关键字选项的更多信息,请参阅 在外键的定义中使用 INDEX DISABLED 关键字

多列约束具有以下基数和大小限制:
  • 可包含的列名不多于 16 个。
  • 最该列列表的总长度的最大值依赖于页大小,计算公式为:
    MAXLength = (((PageSize - 93)/5) -1)
    • 对于 2K 的页大小,总长度不能超过 390 字节。
    • 对于 16K 的页大小,总长度不能超过 3257 字节。
此处的反斜杠( / )符号代表整除。

如果您在同一列上定义了 NOT NULL 约束和 NULL 约束或在缺省值为 NULL 的列上定义了 NOT NULL 约束,则该语句失败并返回错误。

您不能在 LIST 、MULTISET 、SET 、或 IDSSECURITYLABEL 数据类型的列上定义 NULL 约束。

如果一组列中有一列存储了加密数据,则 GBase 8s 无法强制执行此组列的约束。您可以发布此约束的名称并将用 约束定义 设置它的方式。

如果 ALTER TABLE ADD CONSTRAINT 语句在同一表中了定义多个引用约束,则每个约束需要它自己所有的REFERENCES 子句,因此每个单独的约束可指定(或忽略)类似 ON DELETE CASCADE 的选项,而不是将其应用至所有的约束。

如果数据库服务器在同一非 opaque 列或列组上隐式地创建了索引作为引用约束,则会自动计算指定列的分别存储统计或多列约束的主列。

这些分布存储统计相当于 STATISTICS 语句在 HIGH 方式中创建的分布,且当其作为创建了新约束的表查询计划时,可用于查询优化器。有关在现有表上创建索引或约束时计算分布存储的其它信息,请参阅 CREATE INDEX 语句中自动计算分布统计信息章节中的描述。

1 GBase 8s 扩展
2 使用此路径不超过 16 次
3 请参阅 CHECK 子句
4 请参阅 REFERENCES 子句
5 请参阅 约束定义
6 在 ALTER TABLE ADD CONSTRAINT 语句中无效。请参阅 MODIFY 子句.