一条sql语句引发的遐想:select t.*, t.rowid from STUDENT t

       在学习oracle 过程当中,当在看tables时,比如STUDENT,右击——查看——查询,会自动有这样的一条查询语句:

select t.*, t.rowid from STUDENT_TJB t

       其中,作为一个sql小白,我想问的就是rowid是什么用法,还有t.*定位的什么表还是用户呢?

       经过查询资料,获得了几个重要的知识点:

 一、 ROWID(行ID)

      ROWID也是一种数据类型,但是这种数据类型是Oracle 服务器使用并管理的。它具有以下几个特性:

  •  ROWID是数据库每一行的唯一标识符。
  •  ROWID作为列值是隐式存储的。
  •  ROWID不直接给出行的物理地址,但是可以用ROWID来定位行。
  •  ROWID提供了最快速地访问表中行的方法。

查询以下STUDENT表中的ROWID: select rowid from STUDENT; 结果如下:

 

      可以看出, Oracle的物理扩展ROWID有18位。

      ROWID的每位采用64位编码,分别用A~Z、a~z、0~9、+、/共64个字符表示。其中,A表示0,B表示1,……Z表示25,

a表示26,……z表示51,0表示52,……,9表示61,+表示62,/表示63。

       例如,

create table test_rowid (id number, row_id rowid); --1.创建一临时表 
insert into test_rowid values(1,null); --2.插入一行记录 
update test_rowid set row_id = rowid where id = 1; --修改刚插入的记录 
select rowid,row_id from test_rowid; --4.查看rowid 

     返回结果为:
  

                  rowid                                 row_id 
            AAAO0DAAJAAAAMYAAA                    AAAO0DAAJAAAAMYAAA

 

       ROWID具体划分可以分为4部分。

       (1).OOOOOO:前6位表示DATA OBJECT NUMBER,将起转化位数字后匹配DBA_OBJECTS中的DATA_OBJECT_ID,可以确定表信息。

        如上面的例子DATA OBJECT NUMBER是AAAO0D,转化位数字是14×64×64 +52×64 + 3。 
         输入以下查询: 
      

  select owner, object_name from dba_objects 
     where data_object_id = 14*64*64 + 52*64 + 3; 

         返回: 

                 OWNER    OBJECT_NAME 
                 WG        TEST_ROWID 


      (2).FFF:第7到9位表示相对表空间的数据文件号。 
         上面的例子中是AAJ,表示数据文件9。 
      (3).BBBBBB:第10到15位表示这条记录在数据文件中的第几个BLOCK中。

         上面的例子是AAAAMY,转化位数字是12×64+24,表示这条记录在数据文件中的第792个BLOCK。

      (4).RRR:最后3位表示这条记录是BLOCK中的第几条记录。

         上面的例子是AAA,表示第0条记录(总是从0开始计数)。

 二、select t.* ,rowid.t from 表 t

      1.

       select t.*   是选出t表的所有信息
       select *     是选出 关键字from后面的所有表的信息
       如果from 后面只有一个表,那么两者无区别。

      2.       

      当from后面只有一个表名时,select t.*,rowid 能用, select *,rowid为什么不能用?提示“未找到要求的FROM关键字”。

因为select *,rowid的时候,会把rowid当作表的一个字段来用,而在select t.*,rowid的时候没有作为所查表的字段。

    3. 

     比如select t.* from table t,那么t就是你查的那张表table的别名,后面写的时候,table可以用t代替,简单点,这里的t.*就是查询table表的所有列名,有多少,查出多少,*就是全部的意思、     

 

转载于:https://www.cnblogs.com/xiaoxiaoweng/p/7443484.html

Oracle 利用 rowid 提升 update 性能 需要注意的是,ROWID是定位行的绝对地址,如果表中的数据发生移动(例如,表的重组),那么原来的ROWID将不再有效,查询结果可能会返回不同的行。因此,在大多数情况下,使用ROWID来定位行的性能优势并不如人意,尤其是在表的数据量较大,且经常进行DML操作时。在这个更新中,使用了ORDER BY b.ROWID 进行了排序,每个数据块里面都有多条记录,这样按rowid 进行排序,那么这样每次访问数据块的时候就会相同,就会减小block 在调用的次数,从而提高效率。居然比我虚拟机上测试的还慢。 阅读详情

相关推荐

UVM验证中,为什么我的pack_bytes()返回长度是0?手把手教你排查自定义do_pack函数

本文深入解析UVM验证中pack_bytes()返回长度为0的常见原因及系统排查方法。从UVM打包机制原理出发,详细列举了super.do_pack()缺失、field automation冲突等典型问题,并提供动态数组处理、位宽计算等进阶调试技巧,帮助开发者快速定位和解决自定义do_pack函数问题。

weixin_42523693的博客 106

Oracle中在pl/sql developer修改表的2种方法

一、方式一 select * from student for update student表需要操作人修改完commit之后才可以做其他的操作,否则该表会被锁住。   二、方式二 select t.*,t.rowid from student t 在pl/sql developer中右击某表,显示的就是该语句,这样做不会将该表锁住。 想修改某几个字段也没有问题select num,name,t.rowid from student t。 您可能感兴趣的文章:oracle sqlplus 常用命令大全plsql连接oracle数据库报ora 12

STM32实战开发(128):智能位移检测 - 使用STM32实现位移检测

STM32作为一款功能强大的微控制器,由于其出色的处理能力、丰富的外设接口和低功耗特点,成为实现智能位移检测系统的理想选择。未来,可以通过结合更多传感器、多种数据处理算法以及云平台技术,进一步提升系统的智能化水平,优化位移测量的精度和稳定性。本篇博客将介绍如何使用STM32微控制器实现智能位移检测系统,涉及硬件设计、传感器选择、软件开发等多个方面,提供详细的设计步骤,并给出完整的代码示例,帮助开发者快速搭建智能位移检测系统。蜂鸣器连接到STM32的GPIO端口,当位移超过设定的阈值时,蜂鸣器发出警报。

2201_76125393的博客 883

oracle学习51-select t.*,t.rowid

oracle

qq_41632427的博客 1009

oracle select 语句中增加rowid才可以进行手动的修改数据

oracle select 语句中增加rowid才可以进行手动的修改数据 select t.* from all_unified_audit_actions t select t.rowid,t.* from all_unified_audit_actions t 然后提交回滚就可以了

weixin_37519463的博客 4172

MySQL(进阶)万字吃透 MySQL SQL 调优:索引原理 + Explain 执行计划 + 全场景 SQL 优化 + 索引失效避坑实战

业务出现数据库卡顿、接口超时排查顺序:SQL & 索引优化 → 表结构优化 → MySQL 参数调优 → 操作系统内核优化 → 硬件扩容先做软件层面低成本优化,最后再考虑硬件升级,避免盲目扩容造成资源浪费。有索引:并发越高性能衰减平缓;无索引:少量并发就会造成 IO、CPU 打满,查询耗时指数级上涨,形成性能雪崩。百万数据下,无索引查询速度比主键索引慢几十倍;高并发场景,缺失索引会引发雪崩式性能衰减,严重影响业务;索引的核心价值:大幅减少磁盘扫描行数,降低 IO 与 CPU 消耗;

eternal__day的博客 470

MySQL 入门

本文全面介绍了MySQL数据库及其相关技术,内容涵盖: 数据库基础概念:包括数据库系统组成、关系型与非关系型数据库对比、MySQL核心特点等; MySQL操作管理:详细讲解了安装配置、SQL语句分类、数据类型、索引原理等核心内容; 高级特性:深入分析事务、锁机制、存储引擎、主从复制等关键特性; 扩展架构:系统介绍了读写分离、集群部署、分库分表等企业级解决方案; 开发集成:提供了JDBC连接、MyCat中间件等实践指南。 文章采用结构化组织方式,从基础到高级层层递进,包含了大量实用性强的代码示例和配置模板

weixin_51689532的博客 1216

知识体系之MySQL

mysql

JaweG 5235

MySQL(五):数据约束与表设计

约束是关系型数据库系统强制执行的一种数据验证规则。它通常在创建表或修改表结构时,定义在特定的列(字段)或列组合上从底层实现来看,约束是数据库管理系统在执行数据变更操作(如 INSERT、UPDATE、DELETE)时自动触发的校验机制。任何不符合约束规则的数据操作请求,都会被数据库拒绝执行并抛出错误。通过这种方式,约束将业务逻辑中的数据规范直接沉淀到了数据库层面默认值是绑定在表字段上的一个属性。

cui_ruicheng的博客 1186

Oracle常用sql总结

一、常用查询语句 1、oracle查询伪列 查询伪列的目的: (1)物理文件上区分一条记录的唯一标识,使用ROWID可以快速定位表中的某一行, (2)想快速为一个表添加几个字段无需手动写sql,前提是使用plsql工具。 select t.*,t.rowid from 表名 t; 2、查询指定表字段名称和字段类型 select t.COLUMN_NAME,t.DATA_TYPE from USER_TAB_COLUMNS t where t.TABLE_NAME = '表名' 注意:此处的表名需要大写!

cheng17329353267的博客 1161

select t.* , t.rowid from-对查询出来的sql语句进行编辑

很简单,sql语句后面加上for update即可:

兴趣是最好的老师 1万+

Oracle:for update 和select t.*,t.rowid编辑数据的区别

1.select * from ls.lims_employees where empno='0001' for update 只有当前用户能查看SELECT记录,其他用户可以select * from ls.lims_employees where empno='0001'  查询,但要加for update则必须等待前一个用户提交才能查。是加锁查下 通过锁查询可以查询到锁 sel

测试蜗牛,一步一个脚印 1万+

SQLite数据库rowid使用

SQLite数据库rowid使用 SQLite中每个表都默认包含一个隐藏列rowid,使用WITHOUT ROWID定义的表除外。通常情况下,rowid可以唯一的标记表中的每个记录。表中插入的第...

791

oracle 常用高级sql语句,Oracle常用SQL语句整理

一、查询操作1.1 查询单表语句select t.*, t.rowid from Table t;1.2 查询多表关联语句select T.id NVL(T.nesid,0) nesid,T2.name FROM Table T,(select * from Table2 where id>10) T2 WHERE T.fid =T2.id(+);或者:select T.id NVL(T.n...

weixin_42520909的博客 698

Oracle中ROWID详解及应用

一、rowid认识 Oracle数据库的表中的每一行数据都有一个唯一的标识符,或者称为rowid,在oracle内部通常就是使用它来访问数据的。rowid需要 10个字节的存储空间,并用18个字符来显示。该值表明了该行在oracle数据库中的物理具体位置。可以在一个查询中使用rowid来表明查询结果中包含该值。 保存rowid需要**10个字节**或者是80个位二进制位。这80个二进制位分...

我本善良编程专栏 4645

select t.*和select *

select t.*是选出t表的所有信息 select * 是选出 关键字from后面的所有表的信息 如果from 后面只有一个表,那么两者无区别。 转载于:https://www.cnblogs.com/447262548qq/p/3842996.html...

akang4152的博客 1589

数据库的一些查询

(1)查询库存表某商品的库存 select t.*, t.rowid from stock_count t where t.itm_myid = '000000-0000025029' (2)查询库存表某商品的库存系统库存,拣货库存,分开各个储位。 select

dududu01的专栏 807

for update、for update nowait、select t.*,t.rowid from table的区别

for update:会对所查询到得结果集进行加锁,不允许其他程序修改 for update nowait:也会对所查询到得结果集进行加锁,别的线程对结果集进行操作时会报错ORA-00054,提示:内容是资源正忙, 但指定以 NOWAIT 方式获取资源。 select t.*,t.rowid:用ROWID来定位记录是最快的,比索引还快,不会锁表

胡威的技术博客 4395

如何让plsql查询的数据可编辑及两种方法的比较

我们执行一个查询sql,比如select * from Table t;的时候, 想要去编辑他的结果,点击工具栏上那个小锁,会有提示:“这些查询结果不可更新,请包括ROWID..........” 然后我们来看plsql自带的一些功能 在某个表名上右击点击“查询数据”出现的sql语句是:select * from Table t; 在某个表名上右击点击“修改数据”出现的sql语句...

weixin_30819085的博客 504

安全帽数据集YOLO目标检测

安全帽数据集:1、1万多张标注好的数据图片,2、类别:person、hat,3、标签格式分别为txt和xml格式两种,4、直接用于YOLO目标检测

上一篇: Lambda表达式和LTNQ
下一篇: HDU1816(二分+2-SAT)
weixin_30802171
博客等级 码龄11年 122粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值