表层次结构中的 SERIAL 类型

表层次结构可以包含具有 SERIAL 和 BIGSERIAL 或 SERIAL8 类型的列。然而,在表层次结构中只允许一个 SERIAL 和一个 BIGSERIAL 列或一个 SERIAL8 列。假定您创建以下类型和表层次结构:
CREATE ROW TYPE parent_t (a INT);
CREATE ROW TYPE child1_t (s_col SERIAL) UNDER parent_t;
CREATE ROW TYPE child2_t (s8_col SERIAL8) UNDER child1_t;
CREATE ROW TYPE child3_t (d FLOAT) UNDER child2_t;

CREATE TABLE parent_tab of type parent_t; 
CREATE TABLE child1_tab of type child1_t UNDER parent_tab;
CREATE TABLE child2_tab of type child2_t UNDER child1_tab;
CREATE TABLE child3_tab of type child3_t UNDER child2_tab;

parent_tab 表不包含 SERIAL 类型。child1_tab 将 SERIAL 计数器引入到层次结构中。child2_tabchild1_tab 继承 SERIAL 列并添加了 SERIAL8 列。child3_tab 继承了 SERIAL 和 SERIAL8 列。

插入到层次结构中的任何表的 s_cols8_col 列中的 0 值将插入单调递增值,而不管此插入操作由哪个表执行。

不能在 CREATE ROW TYPE 语句中设置 SERIAL 或 SERIAL8 类型的起始计数器值。要设置表层次结构中的 SERIAL 或 SERIAL8 列的起始值,可使用 ALTER TABLE 语句。以下语句说明如何变更表,从而修改要插入到表层次结构中的任何位置的下一个 SERIAL 和 SERIAL8 值:
ALTER TABLE child3_tab 
MODIFY (s_col SERIAL(100), s8_col SERIAL8 (200))

除先前描述的行为以外,所有适用于无类型表中的 SERIAL、BIGSERIAL 和 SERIAL8 类型列的规则也都适用于表层次结构中的 SERIAL、BIGSERIAL 和 SERIAL8 类型列。有关更多信息,请参阅选择数据类型和《GBase 8s SQL 指南:参考》。