"oracle"中rowid怎么用?
下面第一列就是rowid,至于为什么他是确定一条记录的最快方式,你可以查查他是由哪几部分组成的。
[SCOTT@orcl] SQL>select rowid,t.empno,t.ename from emp t;
ROWID EMPNO ENAME
------------------ ---------- ----------
AAAMgzAAEAAAAAgAAA 7369 SMITH
AAAMgzAAEAAAAAgAAB 7499 ALLEN
AAAMgzAAEAAAAAgAAC 7521 WARD
AAAMgzAAEAAAAAgAAD 7566 JONES
AAAMgzAAEAAAAAgAAE 7654 MARTIN
AAAMgzAAEAAAAAgAAF 7698 BLAKE
AAAMgzAAEAAAAAgAAG 7782 CLARK
AAAMgzAAEAAAAAgAAH 7788 SCOTT
AAAMgzAAEAAAAAgAAI 7839 KING
AAAMgzAAEAAAAAgAAJ 7844 TURNER
AAAMgzAAEAAAAAgAAK 7876 ADAMS
AAAMgzAAEAAAAAgAAL 7900 JAMES
AAAMgzAAEAAAAAgAAM 7902 FORD
AAAMgzAAEAAAAAgAAN 7934 MILLER
--你可以查询
[SCOTT@orcl] SQL>select empno,ename,job from emp where rowid = 'AAAMgzAAEAAAAAgAAN';
EMPNO ENAME JOB
---------- ---------- ---------
7934 MILLER CLERK
ROWID是一种数据类型,它使用基于64为编码的18个字符来唯一标识一条记录物理位置的一个ID,类似于Java中一个对象的哈希码,都是为了唯一标识对应对象的物理位置,需要注意的是ROWID虽然可以在表中进行查询,但是其值并未存储在表中,所以不支持增删改操作,下面看个例子:
[html] view plain copy
SELECT ROWNUM,ROWID,empno,ename,job FROM emp WHERE ROWNUM <= 5;
- 结果如下:
- 至于ROWID的作用,由于ROWID用来唯一标识表中数据的唯一性,所以可以利用这个特性去除重复,举个例子,首先运行下述两行代码:
CREATE TABLE dept_bak AS SELECT * FROM dept;
INSERT INTO dept_bak SELECT * FROM dept;
- 得到一个如下的数据库表
DELETE FROM dept_bak WHERE ROWID NOT IN( SELECT MIN(ROWID) FROM dept_bak GROUP BY DEPTNO);
数据对象编号 文件编号 块编号 行编号
OOOOOO FFF BBBBBB RRR
[html] view plain copy
很明显,数据有重复的,但是ROWID肯定不会重复的,那么就可以利用这个特性去重,简单示例代码如下:
[html] view plain copy