ROWID与ROWNUM的简介与对比
关于ROWID: 在用户向表中插入一行数据时,ORACLE会自动在这一行数据加上一个ROWID,每行都有一个唯一ROWID,ORACLE利用ROWID定位数据行。ROWID并不显式存储为一列的(伪列--不是存在表中的实际数据,可能是内部采用函数什么的根据行所在块的信息转换的),是
关于ROWID:
在用户向表中插入一行数据时,ORACLE会自动在这一行数据加上一个ROWID,每行都有一个唯一ROWID,ORACLE利用ROWID定位数据行。ROWID并不显式存储为一列的值(伪列--不是存在表中的实际数据,可能是内部采用函数什么的根据行所在块的信息转换的),是访问一个表中行的最快机制。索引中存储的有索引行的值及索引行的ROWID的值--实际数据。
ORACLE ROWID分为物理ROWID,逻辑ROWID。详见: 通过rowid得到数据块的相关信息
关于ROWNUM:
对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum不能以任何表的名称作为前缀。ROWNUM的使用示例总结如下:
使用=时,只有rownum=1有用,=其它数值将返回空集。使用 使用>和>=时,只有>=1时返回全表数据,其它只能返回空集。rownum对于大于某值的查询条件,使用rownum>2是查不出记录的,原因是由于rownum是一个总是从1开始的伪列,Oracle 认为rownum> n(n>1的自然数)这种条件依旧不成立,所以查不到记录
小于与小于等于:
BYS@ bys3>select * from dept where rownum DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
BYS@ bys3>select * from dept where rownum DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
大于与大于等于:
BYS@ bys3>select * from dept where rownum>=1;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
BYS@ bys3>select * from dept where rownum>1;
no rows selected
BYS@ bys3>select * from dept where rownum>2;
no rows selected
BYS@ bys3>select * from dept where rownum>=2;
no rows selected
等于:
BYS@ bys3>select * from dept where rownum=1;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
BYS@ bys3>select * from dept where rownum=2;
no rows selected
不等于:--条件不成立返回空集
BYS@ bys3>select * from dept where rownum1;
no rows selected
#############
ROWNUM与ROWID在DML操作中的变化示例:
系统是按照记录插入时的顺序给记录排的号,rowid也是顺序分配的。rownum 表示查询某条记录在整个结果集中的位置,在查询的结果集中顺序分配的。
1.查询ROWID与ROWID中的行号、ROWNUM
BYS@ bys3>select rowid,dbms_rowid.rowid_row_number(rowid) rowid_num,rownum,dept.* from dept order by deptno desc;
ROWID ROWID_NUM ROWNUM DEPTNO DNAME LOC
------------------ ---------- ---------- ---------- -------------- -------------
AAAFT7AAEAAAAIFAAD 3 4 40 OPERATIONS BOSTON
AAAFT7AAEAAAAIFAAC 2 3 30 SALES CHICAGO
AAAFT7AAEAAAAIFAAB 1 2 20 RESEARCH DALLAS
AAAFT7AAEAAAAIFAAA 0 1 10 ACCOUNTING NEW YORK
以其中一行记录为例分析:
AAAFT7AAEAAAAIFAAC 2 3 30 SALES CHICAGO
这一行的ROWID是AAAFT7AAEAAAAIFAAC ,按ROWID的算法,可以得出数据块中第2行
但是此行的ROWNUM是3,是在查询出的结果集中的排序。很直观的对比出ROWID中一行数据在数据块中的第几行与ROWNUM的号码不是同一事物。
2.删除一条数据
BYS@ bys3>delete dept where deptno=30;
1 row deleted.
BYS@ bys3>commit;
Commit complete.
3.查询ROWID与ROWID中的行号、ROWNUM。发现ROWID与ROWID中的行号已经删除,但是ROWNUM被自动顺序分配了。
BYS@ bys3>select rowid,dbms_rowid.rowid_row_number(rowid) rowid_num,rownum,dept.* from dept order by deptno desc;
ROWID ROWID_NUM ROWNUM DEPTNO DNAME LOC
------------------ ---------- ---------- ---------- -------------- -------------
AAAFT7AAEAAAAIFAAD 3 3 40 OPERATIONS BOSTON
AAAFT7AAEAAAAIFAAB 1 2 20 RESEARCH DALLAS
AAAFT7AAEAAAAIFAAA 0 1 10 ACCOUNTING NEW YORK
4.插入一条数据
BYS@ bys3>insert into dept values(99,'chedan','bj');
1 row created.
BYS@ bys3>commit;
Commit complete.
5.查询ROWID与ROWID中的行号、ROWNUM。发现ROWID与ROWID中的行号自动向下分配而不是重用第3步中删除的行的ROWID。ROWNUM依然自动顺序分配
BYS@ bys3>select rowid,dbms_rowid.rowid_row_number(rowid) rowid_num,rownum,dept.* from dept order by deptno desc;
ROWID ROWID_NUM ROWNUM DEPTNO DNAME LOC
------------------ ---------- ---------- ---------- -------------- -------------
AAAFT7AAEAAAAIFAAE 4 4 99 chedan bj
AAAFT7AAEAAAAIFAAD 3 3 40 OPERATIONS BOSTON
AAAFT7AAEAAAAIFAAB 1 2 20 RESEARCH DALLAS
AAAFT7AAEAAAAIFAAA 0 1 10 ACCOUNTING NEW YORK
关于不同的排序结果使用ROWNUM,ROWNUM显示会不会变化? 实验结果是不会改变的
BYS@ bys3>select rownum,dept.* from dept;ROWNUM DEPTNO DNAME LOC
---------- ---------- -------------- -------------
1 10 ACCOUNTING NEW YORK
2 20 RESEARCH DALLAS
3 40 OPERATIONS BOSTON
4 99 chedan bj
BYS@ bys3>select rownum,dept.* from dept order by loc;
ROWNUM DEPTNO DNAME LOC
---------- ---------- -------------- -------------
3 40 OPERATIONS BOSTON
2 20 RESEARCH DALLAS
1 10 ACCOUNTING NEW YORK
4 99 chedan bj
查表中最后一行记录的方法:
BYS@ bys3>select * from dept where rowid in(select max(rowid) from dept);DEPTNO DNAME LOC
---------- -------------- -------------
40 OPERATIONS BOSTON
BYS@ bys3>select * from dept where rownum DEPTNO DNAME LOC
---------- -------------- -------------
40 OPERATIONS BOSTON

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

随着社交媒体的迅速发展,小红书已经成为了备受青睐的社交平台之一。用户可以通过创建小红书号来展示个人身份,并与其他用户交流互动。如果你需要查找某个用户的小红书号码,可以按照以下简单步骤进行操作。一、如何用小红书号查找用户?1.打开小红书APP,点击右下角的“发现”按钮,然后选择“笔记”选项。2.在笔记列表中,找到你想查找的用户发布的那篇笔记。点击进入笔记详情页。3.在笔记详情页中,点击用户头像下方的“关注”按钮,即可进入该用户的个人主页。4.在用户个人主页右上角,点击三个点按钮,然后选择“个人信息

在Ubuntu系统中,root用户通常是禁用状态的。要激活root用户,可以使用passwd命令设置密码,然后使用su-命令以root身份登录。根用户是具有系统管理权限且不受限制的用户。他拥有访问和修改文件、用户管理、软件安装和删除,以及系统配置更改等权限。根用户与普通用户有着明显的区别,根用户拥有系统中最高的权限和更广泛的控制权。根用户可以执行重要的系统命令和编辑系统文件,而普通用户则无法做到这一点。在本指南中,我将探讨Ubuntu根用户,如何以根用户身份登录,以及它与普通用户的不同之处。注意

在当今智能手机市场上,消费者面临着越来越多的选择。随着科技的不断发展,手机厂商推出了越来越多的型号和款式,其中Vivox100和Vivox100Pro无疑是备受关注的两款产品。两款手机均来自知名品牌Vivox,但在功能、性能和价格上却有着一定的区别,那么在面对这两款手机时,究竟哪个更值得购买呢?Vivox100和Vivox100Pro在外观设计上有着明显的差

当前被币圈看好的潜力币除了SOL币还有BCH币,SOL是Solana区块链平台的原生代币,BCH是BitcoinCash项目的代币,它是比特币的一个分叉货币。因为具有不同的技术特点、应用场景和发展方向,投资者在二者之前做出选择也比较困难,就想通过分析SOL币和BCH那个更有潜力?再进行投资。但币种的比较是要根据市场、发展前景、项目实力等方面综合分析的。接下来小编为大家详细说说。SOL币和BCH那个更有潜力?相较而言SOL币更有潜力,确定SOL币和BCH那个更有潜力是一个复杂的问题,因为这取决于许

Windows10与Windows11性能对比:哪个更胜一筹?随着科技的不断发展和进步,操作系统也在不断更新和升级。微软公司作为全球最大的操作系统开发商之一,其发布的Windows系列操作系统一直备受用户关注。在2021年,微软发布了Windows11操作系统,这引发了广泛的讨论和关注。那么,究竟Windows10与Windows11在性能方面有何不同,哪个

Vivox100和Vivox100Pro对比评测:你更倾向哪款?随着智能手机的不断普及和功能的日益强大,人们对手机配件的需求也日渐增长。作为手机配件中不可或缺的一部分,耳机在人们的日常生活和工作中扮演着重要的角色。而在众多耳机品牌中,Vivox100和Vivox100Pro是备受关注的两款产品。今天,我们将对这两款耳机进行详细的对比评测,看看它们的优势和劣势

Linux系统中的用户密码存储机制解析在Linux系统中,用户密码的存储是非常重要的安全机制之一。本文将解析Linux系统中用户密码的存储机制,包括密码的加密存储、密码的验证过程以及如何安全地管理用户密码。同时,将通过具体的代码示例展示密码存储的实际操作过程。一、密码的加密存储在Linux系统中,用户密码并不是以明文的形式存储在系统中,而是经过加密后保存。L

标题:Go语言与其他编程语言的性能对比及优劣势随着计算机技术的不断发展,编程语言的选择越来越关键,其中性能是一个重要的考量因素。本文将以Go语言为例,与其他常见的编程语言进行性能对比,并分析各自的优劣势。一、Go语言概述Go语言是由Google开发的一门开源编程语言,具有快速编译、高效并发、简洁易读等特点,适合用于开发网络服务、分布式系统、云计算等领域。Go
