Oracle数据中的序列、索引、视图、事务操作

简介: Oracle数据中的序列、索引、视图、事务操作详解以及rowid 和 rownum的简单介绍(绝对干货!)

1. 序列(sequence)

序列是 Oracle 中特有的对象, 用于生成一个自动递增的数列. 通常被用来作为主键的值.

1.1 创建序列

a) 语法

create sequence seq_name  
increment by n  
start with n  
maxvalue n|nomaxvalue // 10^27 or -1  
minvalue n|no minvalue  
cycle|nocycle  
cache n|nocache] 
解释:
**increment by, 代表每次增长的步长, 默认是 1, 可以是负数, 表示每次递减;
start with, 从哪个值开始, 默认是 1;
maxvalue, 序列能到达的最大值
nomaxvalue, 此时正数最大值是 10^27, 负数最大值是-1;
minvalue, 序列能到达的最小值 , 默认值是nominvalue, 此时正数的最小值是 1, 负数的最小值是-10^26;
cycle|nocycle, 表示是否循环. 如果是 cycle, 达到最大值时会重新从头开始, 如果是 nocycle, 最大值后会报错.
cache n|nocache, 表示高速缓存, 可以优化序列, 缓存的默认值是 20. nocache 表示没有缓存.**

b) 创建学生序列

create sequence seq_student; 

1.2 序列的使用

1.2.1 nextval(序列的下一个值)

查看序列的下一个值

select seq_student.nextval from dual; 

1.2.2 currval(序列的当前值)

查看序列的当前值

select seq_student.currval from dual; 

1.2.3 在插入数据时使用序列

insert into student values (seq_student.nextval, '小红', '女', 19, sysdate, 'hong@sxt.com', 102); 

1.3 删除序列

drop sequence seq_student;

ps:
-- 清空表格(保留表结构,注意与drop区别)

truncate table student;

2. 索引(index)

为了提高查询效率, 可以建立类似目录的数据库对象, 实现数据快速查询, 这就是索引(Index)

2.1 索引的创建

2.1.1 自动创建

Oracle 对 primary key 和 unique 约束的列, 会自动创建索引.

2.1.2 手动创建

对于不是 primary key 和 unique 约束的列, 如果经常会被查询或用于排序, 可以手动给其创建索引, 例如:
create index idx_sname on student (sname desc); 

2.2 索引的使用

索引被创建后, 查询时会自动生效, 提高查询效率.

2.3 索引的删除

drop index idx_sname; 

2.4 索引的优缺点

2.4.1 优点

当数据量比较庞大时, 索引可以大大提高查询的效率

2.4.2 缺点

a) 索引会单独存放, 索引过多会占用大量的存储空间;
b) 索引会降低 DML 的效率, 因为数据发生变化时, 还需要重新维护索引;
c) 对于唯一性不好的数据, 不适合创建索引.

3. 视图(view)

视图是从若干基本表和(或)其他视图构造出来的表.
视图中并不会存放数据, 只会存放视图的定义语句.
在用户使用视图时, 才去动态检索数据.

3.1 创建视图

a) 语法

create [or replace] view 视图名 as (查询) [with read only]

b) 创建简单视图

create or replace view v_student as (select * from student); 

c) 可以对视图进行 DQL 和 DML 操作

3.2 查询视图

 `select * from v_student;` 

3.3新增视图

insert into v_student values (seq_student.nextval, '小刚', '男', 20,
 sysdate, 'gang@sxt.com', 102); 

## 3.4 修改视图

update v_student set age=21 where sno=2;

3.5 删除视图

 delete from v_student where sno=2; 

3.6 只读视图

只读视图, 只能对视图进行查询(DQL)操作, 不能执行增删
改(DML)操作 (with read only)
create or replace view v_student as (select * from student) with read only; 
 

在这里插入图片描述

3.7 视图的作用

在这里插入图片描述
在这里插入图片描述

4. 事务(Transaction)

**事务(Transaction)是一个操作序列。
这些操作要么都做, 要么都不做, 是一个不可分割的工作单元,
是数据库环境中的最小工作单元。**

4.1 事务的特性(ACID)

4.1.1 Atomicity(原子性)

原子性是指事务包含的所有操作要么全部成功, 要么全部失
败回滚, 因此事务的操作如果成功就必须要完全应用到数据
库, 如果操作失败则不能对数据库有任何影响.

4.1.2 Consistency(一致性)

一致性是指事务必须使数据库从一个一致性状态变换到另
一个一致性状态, 也就是说一个事务执行之前和执行之后都
必须处于一致性状态.

4.1.3 Isolation(隔离性)

隔离性是当多个用户并发访问数据库时, 比如操作同一张表
时, 数据库为每一个用户开启的事务, 不能被其他事务的操
作所干扰, 多个并发事务之间要相互隔离.

4.1.4 Durability(持久性)

持久性是指一个事务一旦被提交了, 那么对数据库中的数据
的改变就是永久性的, 即便是在数据库系统遇到故障的情况
下也不会丢失提交事务的操作.

4.2 事务的提交和回滚

a) 提交, 在确保事务执行成功时, 应该将事务进行提交. 提
交后, 数据被永久保存, 不能进行回滚.
commit;
b) 回滚, 当事务执行出现故障时, 应该进行事务的回滚操作,
本次事务的所有操作将被还原, 保证数据库的一致性.
Rollback

5. rowid 和 rownum

5.1 rowid

a) rowid 在记录创建时生成,而且是不变,直接指向硬件上
的存储位置
b) 通过 rowid 查询是效率最高的, 但是 rowid 是由 Oracle
维护的, 人力无法做到

5.2 rownum

rownum 是一个伪列, 查询的时候除非特别指定,否则不会显
示. 表示行号, 常用于控制查询返回的行数.

5.2.1 通过 rownum 进行 TOP-N 查询

当 rownum 和 order by 一起使用时,会首先选出符合 rownum
条件的记录,然后再进行排序. 因此, 需要用子查询来完成.

例如: 查询工资排名前 5 的员工信息

select * from (      
select e.* from emp e order by sal desc
) where rownum<=5;

5.2.2 通过 rownum 进行分页查询

由于先要进行 where 条件判断, 满足条件后才能生成rownum, 所以导致 rownum 无法进行大于(>)和大于等于(>=)的判断. 此时, 需要使用嵌套子查询来实现.

例如: 分页查询员工信息, 按工资降序排序. 用 page 表示当前页数, size 表示每页显示的记录数, 则分页查询语句为:

select * from (       
select rownum rn, t.*       
from (            
select * from emp order by sal desc       
) t       
where rownum<=page*size ) tt 
where tt.rn>(page-1)*size;

相关文章
|
19天前
|
存储 Oracle 关系型数据库
【赵渝强老师】Oracle的还原数据
Oracle数据库中的还原数据(也称为undo数据或撤销数据)存储在还原表空间中,主要用于支持查询的一致性读取、实现闪回技术和恢复失败的事务。文章通过示例详细介绍了还原数据的工作原理和应用场景。
【赵渝强老师】Oracle的还原数据
|
4月前
|
SQL 运维 Oracle
【迁移秘籍揭晓】ADB如何助你一臂之力,轻松玩转Oracle至ADB的数据大转移?
【8月更文挑战第27天】ADB(Autonomous Database)是由甲骨文公司推出的自动化的数据库服务,它极大简化了数据库的运维工作。在从传统Oracle数据库升级至ADB的过程中,数据迁移至关重要。
73 0
|
25天前
|
SQL Oracle 关系型数据库
[Oracle]索引
本文介绍了数据库索引的基本概念、优化查询的原理及分类。索引是一种数据结构(如B树或B+树),通过排序后的`rowid`来优化查询性能。文章详细解释了索引的构建过程、B+树的特点及其优势,并介绍了五种常见的索引类型:唯一索引、组合索引、反向键索引、位图索引和基于函数的索引。每种索引都有其适用场景和限制,帮助读者更好地理解和应用索引技术。
45 1
[Oracle]索引
|
19天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的联机重做日志文件与数据写入过程
在Oracle数据库中,联机重做日志文件记录了数据库的变化,用于实例恢复。每个数据库有多组联机重做日志,每组建议至少有两个成员。通过SQL语句可查看日志文件信息。视频讲解和示意图进一步解释了这一过程。
|
19天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的数据文件
在Oracle数据库中,数据库由多个表空间组成,每个表空间包含多个数据文件。数据文件存储实际的数据库数据。查询时,如果内存中没有所需数据,Oracle会从数据文件中读取并加载到内存。可通过SQL语句查看和管理数据文件。附有视频讲解及示例。
|
3月前
|
存储 Oracle 关系型数据库
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
从基本特性、技术选型、字段类型、事务提交方式、SQL语句、分页方法等方面对比Oracle和MySQL的区别。
566 18
Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL
|
2月前
|
Oracle 关系型数据库 数据库
oracle数据创建同义词
oracle数据创建同义词
51 0
|
4月前
|
SQL 监控 Oracle
Oracle数据误删不用怕,跟我来学日志挖掘
Oracle数据误删不用怕,跟我来学日志挖掘
53 0
|
4月前
|
SQL Oracle 关系型数据库
Oracle误删数据怎么恢复?
Oracle误删数据怎么恢复?
50 0
|
4月前
|
SQL Oracle Java
实时计算 Flink版产品使用问题之采集Oracle数据时,为什么无法采集到其他TABLESPACE的表
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。

推荐镜像

更多