一、视图(Views)与 同义词

  1、视图:实际上是对查询结果集的封装,视图本身不存储任何数据,所有的数据都存放在原来的表中;

     在逻辑上可以把视图看作是一张表

  2、作用:

    • 封装查询语句,简化复杂的查询需求
    • 屏蔽表中的细节

  3、语法:

create [or replace] view 视图的名称 as 查询语句 [with read only]

  4、视图和同义词:

    • 屏蔽了查询过程步骤
    • 屏蔽了真实的表名 增加了代码被破解的难度

  5、示例:

select * from emp;

-- 封装成一个视图: 获取10号部门的员工信息
create or replace view view_test1 as select * from emp where deptno=10;
select * from view_test1;

-- 简化查询语句
CREATE VIEW view_test2 AS SELECT
SUM(cc) total,
SUM(CASE yy WHEN '' THEN cc END) "1980",
SUM(CASE yy WHEN '' THEN cc END) "1981",
SUM(CASE yy WHEN '' THEN cc END) "1982",
SUM(CASE yy WHEN '' THEN cc END) "1987"
FROM(
SELECT
TO_CHAR(HIREDATE, 'YYYY') YY,
COUNT(*) CC
FROM
EMP
GROUP BY
TO_CHAR(HIREDATE, 'YYYY')
) TT ;
select * from view_test2;

-- 屏蔽表中的细节
create or replace view view_test3 as select ename,job,mgr,hiredate from emp;
-- 通过视图修改数据
update view_test3 set ename='SMITH' where ename='SMI%TH';
-- 创建只读视图
create view view_test4 as select ename,job,mgr,hiredate from emp with read only;
-- 报错 ORA-01733: virtual column not allowed here
update view_test4 set ename='SMITH2' where ename='SMITH';
-- 同义词: 相当于是取了一个别名
create synonym yuangong for view_test3;
select * from yuangong;

二、序列

  序列: 1,2,3,4,5,6,7....

  作用: 模拟类似mysql中auto_increment自动增长的编号

  1、语法:

create sequence 序列名称
start with 从几开始
increment by 每次递增多少
minvalue | nominvalue
maxvalue | nomaxvalue
cycle | nocycle
cache 缓存几个数 3
1,2,3
4,5,6
-- currval:序列当前取到哪个值,必须是调用了一次nextval之后才能正常使用
-- nextval:序列中的下一个值
-- 注意:序列中的值,一旦被取过,无论回滚/发生异常,序列都是永不回头向下递增的

  2、使用示例

-- 1,2,3,4,5,6,1,2,3,4,5,6
create sequence seq_test01
start with 1
minvalue 1
maxvalue 6
cycle
cache 3; -- 需先执行nextval语句后才有效
select seq_test01.currval from dual;
select seq_test01.nextval from dual; -- 开发过程,通常写法如下:
create sequence seq_test02;
-- 建表
create table louceng(
lou number primary key
);
-- 执行两次
insert into louceng values(seq_test02.nextval);
-- 1 2
select seq_test02.currval from dual; select * from louceng;

三、索引

3.1 索引概述   

  索引:索引是一种已经排好序的帮助数据库快速查找数据的数据结构,主要是用来帮助数据库快速的找到数据 相当于一本书的目录。

  语法:

create index 索引名称 on 表名(列名1,列名2....);

  主键约束: 自带唯一索引

  唯一约束: 自带唯一索引

3.2 索引作用示例

 -- 创建测试数据500万
-- 创建一张表
create table wbw(
c1 number primary key,
c2 varchar2(20),
c3 varchar2(20)
);
-- 插入500万条记录
create sequence seq_wbw; -- PLSQL中的循环(283s)
declare begin
for i in 1..5000000 loop
insert into wbw values(seq_wbw.nextval,'c2:'||i,'c3:'||i);
end loop;
commit;
end; -- 在没有创建索引的情况下(2.37s)
select * from wbw where c2='c2:4000000'; -- 0.00s
select * from wbw where c1=4000000; -- 创建索引(35.77s)
create index wbw_c2 on wbw(c2);
-- 索引列下 0.15s
select * from wbw where c2='c2:4000000';
-- 非索引列下 2.38s
select * from wbw where c3='c3:4000000';

3.3 索引扩展

  3.3.1 索引优化概述

  SQL语句的执行计划(SQL语句分析的时候): 将SQL语句发送给数据库, 数据库分析执行这条语句需要经历哪些步骤,消耗多少资源

  SQL优化的步骤:

1.找到需要优化的语句

2.通过执行计划去分析SQL语句

3.确定优化方案

  索引的原理: 索引是一种已经排好序的帮助数据库快速查找数据的数据结构 BTree : B树, Balance, 平衡多路查找树

  索引的利弊:

    好处: 提高查询的效率

    缺点: 占资源,反向影响增删改的效率

  什么时候创建索引?

1.数据量比较大时候

2.哪些列经常作为查询的条件

  3.3.2 使用示例:

 -- 没有创建多列索引的情况下  0.50s
select * from wbw where c2='c2:4000001' and c3='c3:4000001'; -- 创建索引(41.43s)
create index wbw_c23 on wbw(c2,c3); -- 创建多列索引的情况下 0.25s
select * from wbw where c2='c2:4000001' and c3='c3:4000001';
-- 1.80s
select * from wbw where c3='c3:4000001';

  3.3.3 执行计划图解

Oracle数据库基本操作(二) —— 视图、序列、索引、同义词的更多相关文章

  1. Oracle入门基础(十)一一数据库其他对象-视图/序列/索引/同义词

    SQL> --视图 SQL> create view empinfoview as select e.empno,e.ename,e.sal,e.sal*12 annsal,d.dname ...

  2. Oracle学习总结_day06_视图&序列&索引

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! day 06 视图,索引,序列 视图 什么是视图: 视 ...

  3. oracle数据库表约束、视图、索引—该记录为本人以前微博的文章

    一.Oracle 数据库常用操作续关于创建表时创建约束1.创建表的时候增加约束----约束是定义表中的数据应该遵循的规则或者满足的条件----约束是建立在列上的,让某一列或者某几列数据之间有约束--- ...

  4. Oracle数据库基本操作(一) —— Oracle数据库体系结构介绍、DDL、DCL、DML

    一.Oracle数据库介绍 1.基本介绍 Oracle数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/ ...

  5. 【Oracle】曾经的Oracle学习笔记(8-15)ER图,三大范式,数据库字典,视图,索引,序列

    一.数据库建模 二.建表 三.数据库字典 四.DML语句 五.视图 六.索引 七.序列 八.DDL语句 Lesson 8 Overview of Data Modeling and Database ...

  6. Oracle 数据库基本操作——实用手册、表操作、事务操作、序列

    目录: 0. 参考链接与参考手册1. oracle 实用(常用操作)指令2. 数据库基本操作语法 a) 表操作 1)创建表 2)更新表 3)删除表 4)查询 b) 事务操作 c) 序列操作 1)创建序 ...

  7. oracle数据库什么情况下创建索引比较好

    索引就好象一本字典的目录.凭借字典的目录,我们可以非常迅速的找到我们所需要的条目.数据库也是如此.凭借Oracle数据库的索引,相关语句可以迅速的定位记录的位置,而不必去定位整个表. 虽 然说,在表中 ...

  8. Oracle数据库DDL,DML,视图,PLSQL编程

    动手敲~~~ --创建一个表空间--beijing create tablespace beijing datafile 'c:\beijing.dbf' size 100m autoextend o ...

  9. 数据库 Oracle数据库对象二

    视图 --视图是对表逻辑抽象 --视图的好处:简化查询 --视图是一种虚表 --视图建立在已有表的基础上,视图赖以建立的这些吧称为基表. --向视图提供数据内容的语句为select语句,可以将视图理解 ...

随机推荐

  1. [Flex] 组件Tree系列 —— 运用variableRowHeight和wordWrap设置可变行高

    mxml: <?xml version="1.0" encoding="utf-8"?> <!--功能描述:运用variableRowHeig ...

  2. python爬取小说详解(一)

    整理思路: 首先观察我们要爬取的页面信息.如下:  自此我们获得信息有如下: ♦1.小说名称链接小说内容的一个url,url的形式是:http://www.365haoshu.com/Book/Cha ...

  3. Spring aop+自定义注解统一记录用户行为日志

    写在前面 本文不涉及过多的Spring aop基本概念以及基本用法介绍,以实际场景使用为主. 场景 我们通常有这样一个需求:打印后台接口请求的具体参数,打印接口请求的最终响应结果,以及记录哪个用户在什 ...

  4. 记录一次因为意外断电造成gitlab(docker容器)重启之后无法访问的问题

    容器启动成功,但是处于unhealthy状态,登录界面500. docker logs gitlab 最终错误是 err="opening storage failed: open bloc ...

  5. leetcode-8-字符串转整数 (atoi)

    题目描述: 实现 atoi,将字符串转为整数. 在找到第一个非空字符之前,需要移除掉字符串中的空格字符.如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字符 ...

  6. iOS11 & iPhone X 适配指南

    苹果WWDC开发者大会上,终于发布了大家期待已久的iOS 11,有些新特性功能确实出人意料.不过大的方面苹果貌似也就 AR 和 GM 机器学习了,9月13日凌晨1点,苹果开了新品发布会,相信大家都已经 ...

  7. Tomcat 基础优化

    作者:北京运维 本文档是身边一些朋友.技术大佬之前分享的一些笔记,记录了 Tomcat 优化方法,笔记较多而且比较杂乱,经过整理.分类我个人觉得大致可以从以下几个方面优化 Tomcat: Tomcat ...

  8. Codeforces Round #517

    传送门 A. Cram Time 你有一本书,阅读第\(i\)页需要花费\(i\)的时间.你第一天有\(a\)的时间,第二天有\(b\)的时间,问你的总阅读页数的最大值. Input: 一行包含\(2 ...

  9. (Android+IOS)正在做一个新闻App,做的差不多了,听听大家的建议 (图)

    (Android+IOS)正在做一个新闻App,做的差不多了,听听大家的建议! 新闻采集器做好了,前端展示APP界面感觉还不是很好,还需要改进改进,希望发布(Android和IOS版本)前听听大家的建 ...

  10. auguements实参对象的数组化

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...