在oracle数据库表中没有添加rowid字段为啥会出现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在oracle数据库表中没有添加rowid字段为啥会出现相关的知识,希望对你有一定的参考价值。

rowid 是 oracle 数据库表中的伪列, rowid 首先是一种数据类型,它唯一标识一条记录物理位置, 基于64位编码的18个字符显示。因为 rowid 是伪列, 所以并未真的存储在表中,但可以从表中查询,但不支持插入,更新,删除它们的值。

其他的伪列还有 rownum (行号)追问

将rownum设为主键时建立几条模拟数据后当根据rownum查询时只能查询出来第一条记录,后来的记录则呢么就查不到了啊,谢谢了。

追答

rownum 是伪列,你不可能把 rownum 作为表的主键的。需要注意的是 rownum 是指查询结果集的行号,而不是表的行号。比如:

select * from tab where rownum=9; 即使 tab 表中有很多记录,但这个 sql 语句是永远也查不出数据的, 因为你指定了 rownum =9 作为查询条件,因而是单行查询,查询结果最多只能返回一条记录,也就是说 rownum 最多=1, 是不可能等于9 的。

参考技术A 这是个伪列,总是存在的。大部分时候(索引组织表除外),rowid表示的就是数据行在数据库中的具体位置。追问

将rownum设为主键时建立几条模拟数据后当根据rownum查询时只能查询出来第一条记录,后来的记录则呢么就查不到了啊,谢谢了。

参考技术B 自带的
可以唯一键使用追问

将rownum设为主键时建立几条模拟数据后当根据rownum查询时只能查询出来第一条记录,后来的记录则呢么就查不到了啊,谢谢了。

oracle数据库基本操作

一、数据基本类型

  1、oracle的伪列

    Oracle 中伪列就像一个表列,但是它并没有存储在表中伪列可以从表中查询,但不能插入、更新和删除它们的值常用的伪列有ROWID和ROWNUM;

    ROWID 是表中行的存储地址,该地址可以唯一地标识数据库中的一行,可以使用 ROWID 伪列快速地定位表中的一行   

    ROWNUM 是查询返回的结果集中行的序号,可以使用它来限制查询返回的行数;

select rowid,rownum,id,name,price from goods;

  2、数据定义语言(DDL)

  create----alter----drop----truncate

  3、数据操纵语言(DML)

  insert---select---delete---update

  4、事务控制语言(TCL)

 

  commit---savepoint---rollback

  5、数据控制语言(DCL)

  grant---revoke

二、oracle数据库基本简介

  1、表名的长度最大为30个字符;

    2、同一用户模式下,不同的表不能有相同的名称;

    3、oracle数据库中的表名、列名、用户名和其他对象名,不区分大小写,系统会自动转成大写;

三、数据库基本操作

   1、选择无重复的行

  DISTINCT字句筛除结果集中内容全部相同的行,仅保留一行;

  2、带条件和排序的select命令(与mysql类似)

select stuNo,stuName,stuAge from student where stuAge>16 order by studentName asc,stuAge desc;

  3、oracle数据库列别名的添加与mysql类似

create table newStudent as select * from student

  4、也可以只复制表结构,不复制数据

create table newStudent as select * from student where 1=2

三、DML语言操作

  1、查看表中行数 

----效率低
select count(*) from student

----效率高
select count(1) from student

  2、取出表中对应列不存在重复数据的记录 

select stuName,stuAge from student group by stuName,stuAge having(count(stuName||stuAge)<2)

四、事物控制语言(TCL)

  1、commit:提交事物;

  2、rollback:回滚事物;

  3、savepoint:在事物中创建存储点

五、数据控制语言  

  1、创建表

--oracle没有自增
因此创建一个序列,在插入数据的时候,将序列插入到定义的主键当中
create sequence stu_id;

create table student(
    id number primary key,
    name varchar2(20),
    age number      
);

insert into student(stu_id.nextval,张三,10);

  2、添加约束(与mysql相同)

  3、向表中添加列 

alter table student add(address varchar2(20),email varchar2(20));

  4、删除列

alter table test1 drop column name;

  5、修改一个字段

alter table test1 modify (name varchar2(16) default ‘unknown’);

  6、分页 

select * from(
select a.*,rownum x from(
select * from goods
)a
) where x>2 and x<=4

 



以上是关于在oracle数据库表中没有添加rowid字段为啥会出现的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库表中用Edit data 打开表,每张表都有一个相同字段rowid,但是表结构里面没有这个字段rowid字段

关于ORACLE 1410:invalid ROIWD,然后借着机会学习了一波ROWID。

Oracle数据库的伪列

Oracle系列:(25)索引

在oracle 数据伪列 rowid中删除重复的数据时。为啥数据插入的早,rowid 就小啊?我看不出来哪里小了

oracle数据库基本操作