首页 > 数据库 > 国内数据库 > YashanDB ROWID UROWID类型
YashanDB单机、共享集群部署中表对象的默认存储方式为HEAP方式,数据按行(Row)组织,系统根据每一行数据所在物理地址信息生成一个全局唯一记录,即ROWID。ROWID用于检索表数据时的寻址,也可以用作每一行数据的唯一标识。
ROWID是一种特殊的数据类型,既能作为数据类型被用户进行列字段声明,也能作为伪列(非表结构中定义的列,但可以被当作列字段进行查询)被使用。
UROWID(Universal ROWID)即通用ROWID,在YashanDB中作为数据类型的一种,用于以二进制串形式存储行表的ROWID。
| 类型 | 字节长度 |
|---|---|
| ROWID | 16 |
| UROWID | 1~8000,默认长度为4000 |
定义格式:
| 类型 | 格式 | 规则 |
|---|---|---|
| ROWID | ROWID | 见下文数据格式 |
| UROWID | UROWID(Size) | 变长二进制串,若不指定Size则默认长度为4000 |
Size:宽度,表示最大字节长度。
ROWID的数据格式为
dataoid:spaceid:fileid:blockid:dir。
在用于存储行表的ROWID时,UROWID的数据格式为
0x1+ROWID的十六进制表述。
data object id,行所在的Segment的ID,该值可从USER_OBJECTS等视图中的DATA_OBJECT_ID字段查询获得。
space id,行所在的表空间的ID,该值可从V$TABLESPACE等视图中的ID字段查询获得。
file id,行所在数据文件在对应表空间中的数据文件ID,该值可从V$DATAFILE等视图中的ID字段查询获得。
block id,行所在数据块在对应文件中的块ID。
dir,行在数据块上的槽位。
ROWID可以作为伪列字段来使用,但必须被显式指定,即通过SELECT *语句无法查询到ROWID的值。
ROWID也可以作为字段的数据类型,用来存储ROWID类型数据,且支持对其进行增删改查等DML操作。
在DML操作中,YashanDB支持ROWID与UROWID/RAW/字符型的隐式数据类型转换。但将ROWID作为函数的参数,且与函数要求的参数数据类型不一致时,函数不会对其进行数据类型的隐式转换,而是提示错误返回。
对于ROWID类型数据的使用限制如下:
对于ROWID伪列字段的使用限制如下:
示例(HEAP表)
YashanDB内部将UROWID等同于 RAW类型,因此UROWID使用规则与RAW使用规则完全一致。
示例(HEAP表)
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70028812/viewspace-3079380/ ,如需转载,请注明出处,否则将追究法律责任。