zoukankan      html  css  js  c++  java
  • 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;

  • 相关阅读:
    BZOJ 2034 【2009国家集训队】 最大收益
    vijos P1780 【NOIP2012】 开车旅行
    BZOJ 2115 【WC2011】 Xor
    BZOJ 3631 【JLOI2014】 松鼠的新家
    BZOJ 4717 改装
    BZOJ 2957 楼房重建
    BZOJ 4034 【HAOI2015】 T2
    BZOJ 1834 【ZJOI2010】 network 网络扩容
    BZOJ 2440 【中山市选2011】 完全平方数
    BZOJ 2733 【HNOI2012】 永无乡
  • 原文地址:https://www.cnblogs.com/lzhdim/p/1360612.html
Copyright © 2011-2022 走看看