• oracle中的rowID


    oracle数据库的表中的每一行数据都有一个唯一的标识符,或者称为rowid,在oracle内部通常就是使用它来访问数据的。rowid需要 10个字节的存储空间,并用18个字符来显示。该值表明了该行在oracle数据库中的物理具体位置。可以在一个查询中使用rowid来表明查询结果中包含该值。

    保存rowid需要10个字节或者是80个位二进制位。这80个二进制位分别是:

    1. 数据对象编号,表明此行所属的数据库对象的编号,每个数据对象在数据库建立的时候都被唯一分配一个编号,并且此编号唯

    一。数据对象编号占用大约32位。
    2. 对应文件编号,表明该行所在文件的编号,表空间的每一个文件标号都是唯一的。文件编号所占用的位置是10位。
    3. 块编号,表明改行所在文件的块的位置块编号需要22位。
    4. 行编号,表明该行在行目录中的具体位置行编号需要16位。

    这样加起来就是80位。

    rowid使用64为的编码方案来显示,使用了‘A-Z’,’a-z’,'0-9′和’/'来表示。

    例如:
    select rowid,empid from scott.emp;
    将会得到结果:
    SQL> select rowid,empno from scott.emp;

    ROWID EMPNO
    —————— ———-
    AAAHW7AABAAAMUiAAA 7369
    AAAHW7AABAAAMUiAAB 7499
    AAAHW7AABAAAMUiAAC 7521
    AAAHW7AABAAAMUiAAD 7566
    AAAHW7AABAAAMUiAAF 7698
    AAAHW7AABAAAMUiAAG 7782
    AAAHW7AABAAAMUiAAH 7788
    AAAHW7AABAAAMUiAAI 7839
    AAAHW7AABAAAMUiAAJ 7844
    AAAHW7AABAAAMUiAAK 7876
    AAAHW7AABAAAMUiAAL 7900
    AAAHW7AABAAAMUiAAM 7902
    AAAHW7AABAAAMUiAAN 7934

    这里的AAAHW7是数据库对象编号,AAB是文件标号,AAAMU是块编号,最后四位(empno = 7369时为iAAA)是行编号。

    使用describle(或简写为desc)命令查看表结构时,输出结果中是不能看到rowid这里一列的,这是因为这一列只在数据库内部使用,

    row通常被称为一个伪列。

    在某些oracle数据库操作的IDE(例如golden)中使用这些工具自带的数据编辑功能时,必须指定rowid列才能完成,例如如果想选择

    scott.emp的数据后进行手工修改,则必须使用
    select rowid,t.* from scott.emp t;
    而不能直接写成
    select * from emp;

  • 相关阅读:
    杭电ACM1.2.6 Decimal System
    杭电ACM1.2.7 GPA
    taro hook 倒计时setTimeout版
    taro hook 倒计时setInterval版
    Vuecli3内存溢出解决方案记录
    哈希
    hashmap和hashtable区别
    HashMap[转]
    JAVA中List、Map、Set
    C++和MATLAB混合编程DLL篇[转]
  • 原文地址:https://www.cnblogs.com/lzhdim/p/1360612.html
Copyright © 2020-2023  润新知