Oracle数据库--------------------------------数据伪列ROWID

本文介绍了Oracle数据库中的ROWID伪列,它是每个数据行的唯一物理地址编号。通过ROWID,可以方便地定位和操作数据。文章通过实例展示了如何观察ROWID,以及如何利用ROWID删除重复记录,保持数据的唯一性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于Oracle数据库的学习记录:

二十七、数据伪列ROWID
在进行表中数据保存的时候,除了用户可以见到的数据列之外,所有表中的数据行都会有一个唯一的物理地址编号,这种编号就可以通过ROWID查到
范例:观察ROWID
SELECT ROWID,deptno,dname,loc FROM dept;

下面以"AAAR3qAAEAAAACHAAA"ROWID为例介绍一下它的组成
**数据的对象编号:AAAR3q
**数据保存文件编号:AAE
**数据保存的快好:AAAACH
**数据的保存行号:AAA

范例:利用ROWID找出记录
SELECT * FROM dept WHERE ROWID='AAAR3qAAEAAAACHAAA';
一定要记住:任何情况下,都可以通过ROWID确定唯一的一行记录

面试题:请将表中的重复记录只保存一条
有一张数据表,由于最初的设计漏洞并且在使用之也没有进行一些合理的验证,导致表中出现了大量的重复记录信息,题目准备如下:
范例:将dept表复制为mydept表
CREATE TABLE mydept AS SELECT * FROM dept;
范例:在mydept表里面增加一系列的重复数据
INSERT INTO mtdept(deptno,dname,loc) VALUES(10,'ACCOUNTING','NEW YORK');
INSERT INTO mtdept(deptno,dname,loc) VALUES(10,'ACCOUNTING','NEW YORK');
INSERT INTO mtdept(deptno,dname,loc) VALUES(10,'ACCOUNTING','NEW YORK');
INSERT INTO mtdept(deptno,dname,loc) VALUES(30,'SALES','CHICAGO');
INSERT INTO mtdept(deptno,dname,loc) VALUES(30,'SALES','CHICAGO');
将重复的记录删除掉只剩一行,并且只保留最早增加的一行记录
现在思考一下,如果是你做的系统,那么ROWID一定是属于增长的状态,那么最早增加的ROWID的内容一定是最小的,那么应该换一个思路,能不能求出每种信息最小的ROWID?
范例:将mydept表进行分组,按照deptno,dname,loc进行分组
SELECT deptno,dname,loc,MIN(ROWID)
FROM mydept
GROUP BY deptno,dname,loc;
现在已经知道了偶有的最小的ROWID,那么就表示这些ROWID是要保留的数据
范例:执行删除操作,以ROWID为条件,子查询里面一定返回多行单列,使用WHERE子句判断,同时使用IN
DELETE FROM mydept WHERE ROWID NOT IN(
       SELECT MIN(ROWID)
       FROM mydept
       GROUP BY deptno,dname,loc);
ROWID最大的作用是维护一行记录唯一的编号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值