YashanDB ROWID UROWID 类型
本文内容来自 YashanDB 官网,原文内容请见 https://doc.yashandb.com/yashandb/23.3/zh/%E5%BC%80%E5%8F%91%E6%89%8B%E5%86%8C/SQL%E5%8F%82%E8%80%83%E6%89%8B%E5%86%8C/%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B/ROWID%20UROWID.html
YashanDB 单机、共享集群部署中表对象的默认存储方式为 HEAP 方式,数据按行(Row)组织,系统根据每一行数据所在物理地址信息生成一个全局唯一记录,即 ROWID。ROWID 用于检索表数据时的寻址,也可以用作每一行数据的唯一标识。
ROWID 是一种特殊的数据类型,既能作为数据类型被用户进行列字段声明,也能作为伪列(非表结构中定义的列,但可以被当作列字段进行查询)被使用。
UROWID(Universal ROWID)即通用 ROWID,在 YashanDB 中作为数据类型的一种,用于以二进制串形式存储行表的 ROWID。
存储属性

定义格式:

Size:宽度,表示最大字节长度。
数据格式
ROWID 的数据格式为dataoid:spaceid:fileid:blockid:dir
。
在用于存储行表的 ROWID 时,UROWID 的数据格式为0x1+ROWID的十六进制表述
。
# dataoid
data object id,行所在的 Segment 的 ID,该值可从 USER_OBJECTS 等视图中的 DATA_OBJECT_ID 字段查询获得。
# spaceid
space id,行所在的表空间的 ID,该值可从 V$TABLESPACE 等视图中的 ID 字段查询获得。
# fileid
file id,行所在数据文件在对应表空间中的数据文件 ID,该值可从 V$DATAFILE 等视图中的 ID 字段查询获得。
# blockid
block id,行所在数据块在对应文件中的块 ID。
# dir
dir,行在数据块上的槽位。
ROWID 使用规则
ROWID 可以作为伪列字段来使用,但必须被显式指定,即通过 SELECT *语句无法查询到 ROWID 的值。
ROWID 也可以作为字段的数据类型,用来存储 ROWID 类型数据,且支持对其进行增删改查等 DML 操作。
在 DML 操作中,YashanDB 支持 ROWID 与 UROWID/RAW/字符型的隐式数据类型转换。但将 ROWID 作为函数的参数,且与函数要求的参数数据类型不一致时,函数不会对其进行数据类型的隐式转换,而是提示错误返回。
对于 ROWID 类型数据的使用限制如下:
不能作为分区键
仅适用于 HEAP 表,分布式 HEAP 表不支持 ROWID。
对于 ROWID 伪列字段的使用限制如下:
不能在包含 DISTINCT\GROUPBY\CONNECTBY\JOIN 算子、ROWNUM 伪列字段或聚合函数的子查询语句中使用 ROWID 伪列。
示例(HEAP 表)
UROWID 使用规则
YashanDB 内部将 UROWID 等同于RAW类型,因此 UROWID 使用规则与 RAW 使用规则完全一致。
示例(HEAP 表)
版权声明: 本文为 InfoQ 作者【YashanDB】的原创文章。
原文链接:【http://xie.infoq.cn/article/dde2883dfeab19973062b8bfe】。文章转载请联系作者。
评论