ITPub博客

首页 > Linux操作系统 > Linux操作系统 > rowid 伪列

rowid 伪列

原创 Linux操作系统 作者:pingley 时间:2012-04-01 16:44:07 0 删除 编辑
rowid 伪列
rowid 是一个伪列,表示的是记录所在的物理位置。rowid 由以下几部分组成:
1、对象的编号也就是object。
2、记录(行)所在的数据文件编号,file,第一个数据文件编号是1.
3、记录(行)所在的数据块编号,block。
4、记录(行)在数据库中所处的位置,第一行编号是0.
rowid 唯一的标识一个表中的记录(行),但是不同的表中的rowid 是相同的。
一般的rowid 是下面这样的形式。
SQL> select rowid, last_name  
  2     from employees
  3     where department_id = 20;
ROWID              LAST_NAME
------------------ -------------------------
AAAQe8AAEAAAADbAAD Hartstein
AAAQe8AAEAAAADbAAE  Fay
可以使用dbms_rowid 以容易阅读的形式来查看rowid 信息。
查看object = 67516 所对应的对象信息。没错就是那个employees 表。
SQL> select object_name,object_id
  2  from  user_objects
  3  where object_id = 67516;
OBJECT_NAME      OBJECT_ID
--------------- ----------
EMPLOYEES            67516
查看那个file = 4 所对应的数据文件。没错就是那个user01.dbf 因为hr 的默认表空间是users。
SQL> select file#,name     
  2  from V$datafile;
     FILE# NAME
---------- ---------------------------------------------
         1 /opt/oracle11g/oradata/oracl/system01.dbf
         2 /opt/oracle11g/oradata/oracl/sysaux01.dbf
         3 /opt/oracle11g/oradata/oracl/undotbs01.dbf
         4 /opt/oracle11g/oradata/oracl/users01.dbf
         5 /opt/oracle11g/oradata/tbs.dbf
确定用户所在的表空间,进而确定所使用的数据文件就是那个user01.dbf。
SQL> select username,default_tablespace
  2  from user_users;
USERNAME                       DEFAULT_TABLESPACE
------------------------------ ------------------------------
HR                             USERS
rowid 有以下几个重要的用途:
1、使用rowid 是访问一条记录(行)最快的方式。
2、 使你明白表中的 记录(行)是怎么存储的。
3、唯一的标识表中的一条 记录(行)。
下面给出了一个使用rowid 的示例。先查找出某些列的rowid。
SQL> select rowid, last_name  
  2     from employees
  3     where department_id = 20;
ROWID              LAST_NAME
------------------ -------------------------
AAAQe8AAEAAAADbAAD Hartstein
AAAQe8AAEAAAADbAAE Fay
以后使用已知的rowid 进行操作提高效率。
SQL> select last_name
  2  from employees
  3  where rowid = 'AAAQe8AAEAAAADbAAD';
LAST_NAME
-------------------------
Hartstei
SQL> delete from employees
  2  where rowid = 'AAAQe8AAEAAAADbAAD';
delete from employees
*
ERROR at line 1:
ORA-02292: integrity constraint (HR.DEPT_MGR_FK) violated - child record found
使用rowid 来进行删除,操作因为外键约束的关系删除不了,况且我也不想真的删除这条记录。所以到此打住。
会影响一个表中rowid 组成分成的的因素都会改变rowid:
1、比如删除一个表,然后重建。
2、import 一个表到其他数据库。
3、删除某些记录然后再次将这些记录插入。
4、update 引起的行迁移。
不限上述情况。
注:已经说过rowid 是一个伪列,所以rowid 不是实际存储在数据库中的。所以你不能对其进行delete,update,insert.不要和rownum 混淆起来。

s3.JPG

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26110315/viewspace-720190/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 聚集函数之rollup
请登录后发表评论 登录
全部评论

注册时间:2012-02-06

  • 博文量
    169
  • 访问量
    717971