行ID值

行ID 是唯一标识表中某行的值。 列或宿主变量可以具有行ID数据类型。

ROWID列允许编写查询语句,直接跳转到表格中的某一行,因为该列隐含了行的位置。 ROWID列中的每个值必须唯一。 尽管行位置可能会改变,例如由于桌子空间重新布局,但 Db2 会永久保留行ID值的内部表示。 当一行插入表中时, Db2 会为ROWID列生成一个值,除非已提供该值。 如果提供了值,则该值必须是由 Db2 先前生成的有效行 ID 值,并且该列必须定义为默认生成。 用户无法更新 ROWID 列的值。

更改开始用户无法看到行ID值的内部表示。 该数值永远不会进行字符转换,因为其被视为包含二进制数据。 在目录表SYSCOLUMNS的LENGTH列中描述的ROWID列的长度是内部长度,即17字节。 SYSCOLUMNS目录表的 LENGTH2 列中描述的长度是检索到的ROWID值的长度,即40字节。 检索到的 ROWID 值不是永久性的。 如果在插入值后、检索值前对表空间执行提交操作和REORG,则行的物理位置可能会发生变化。更改结束

ROWID列可以由用户自定义,也可以由 Db2 隐式生成。 您可以使用CREATE TABLE语句或ALTER TABLE语句来定义ROWID列。 如果在表中定义了LOB列,而该表没有ROWID列,则 Db2 会隐式生成一个ROWID列。 Db2 采取以下行动:

  • 创建名为DB2_GENERATED_ROWID_FOR_LOBSnn 的列,其中,如果列名在表中已经存在,则 Db2 会追加 nn ,将 nn 替换为'00',并递增1,直到该名称在行中唯一。
  • 将列定义为“始终生成”和“隐含隐藏”。
  • 在所有其他明确定义的列之后,将列添加到行的末尾。

隐含隐藏的 ROWID 列

更改开始隐式隐藏的 ROWID 列也可以用 IMPLICITLY HIDDEN 子句明确定义。 隐式隐藏 ROWID 列时,只有当选择子句明确指定列名时,选择语句的结果才会包含该列。 也就是说,仅选择列的 SQL 语句(例如使用 SELECT * 时)不会返回隐式隐藏的 ROWID 列。更改结束

如果向已经有一个隐式生成的隐藏 ROWID 列的表添加一个 ROWID 列, Db2 确保每列中的对应值都相同。 如果您添加的 ROWID 列定义为 GENERATED BY DEFAULT,则 Db2 会将隐藏的 ROWID 列的属性更改为 GENERATED BY DEFAULT。