问题描述
以下关于ROWID和ROWNUM的说法,错误的是?(单选)
A. ROWID是物理地址,用于定位数据存储位置
B. ROWNUM表示查询结果的行号,随排序条件变化
C. ROWID在数据删除后会被其他数据覆盖复用
D. ROWNUM在WHERE条件筛选前生成
ROWID和ROWNUM的本质区别
ROWID是数据的“身份证号”
ROWID是Oracle为每行数据生成的唯一物理地址,包含数据文件号、块号、行号等信息,用于快速定位数据存储位置。即使数据被删除,原ROWID也不会被新数据直接覆盖(除非新数据插入同一物理位置)。
应用场景:根据ROWID快速更新或删除特定行,例如:
UPDATE employees SET salary = 10000 WHERE ROWID = 'AAASe9AABAAAAMUAAA';
ROWNUM是结果的“临时编号”
ROWNUM是逻辑行号,在数据筛选后、排序前按查询结果的输出顺序生成。若使用ORDER BY,ROWNUM会因排序结果变化而改变。
典型误区:
-- 错误!ROWNUM在WHERE之后生成,无法直接取第5-10行
SELECT FROM (SELECT FROM employees) WHERE ROWNUM BETWEEN 5 AND 10;
-- 正确写法需嵌套子查询
SELECT FROM (SELECT e., ROWNUM rn FROM employees e) WHERE rn BETWEEN 5 AND 10;
选项C为什么错误?
ROWID对应的是物理存储位置,即使数据被删除,该位置可能暂时空闲,但ROWID本身不会被其他数据“复用”,除非新数据恰好插入到同一位置(通常由存储机制决定,而非主动覆盖)。
实战技巧
性能优化:用ROWID替代全表扫描,例如通过索引获取ROWID后精准定位数据。
分页陷阱:ROWNUM分页必须嵌套子查询,否则排序会导致分页错乱。
调试工具:通过SELECT ROWID, t.* FROM table t查看数据的物理存储分布。
📚 今日知识点总结
特性 ROWID ROWNUM
性质 物理地址(唯一不变) 逻辑行号(动态变化)
生成时机 数据插入时确定 查询结果筛选后生成
使用场景 精准数据操作、性能优化 分页查询、结果限制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




