1、视图

1.1、什么是视图

视图是从基表中导出的逻辑表,它不像基表一样物理地储存在数据库中,视图没有自己独立的数据实体。一个视图的存在反映在数据字典中具有相应的登记项。视图一旦被建立,即可在其上进行DML操作。

  • 视图就是一个虚拟表,实体表的映射。

1.2、视图概述

视图是一种数据库对象,它是从一个或多个表或视图导出的虚表,即它可以从一个或多个表中的一个列或多个列中提取数据,同真实的表一样,视图也包含一系列带有名称的列和行数据。

视图实际上是一个或多个表的预定义查询,这些表称为基表(base table)。但是,视图并不在数据库中以储存的数据值形式存在,而且系统也不会在其他任何地方专门为标准视图存储数据。视图所引用的表由行和列数据自由定义,并且在引用视图时动态生成。

  • 使用视图的作用主要表现在以下几个方面:

    • 提供面向用户将的数据表现形式
    • 提供面向用户的安全性保证
    • 隐藏数据的逻辑复杂性
    • 简化用户权限的管理
    • 重构数据库的灵活性

1.2、视图的基本操作

1.2.1、简化版创建

-- 语法
create view 视图名称 as 查询语句;

1.2.2、删除

-- 语法
drop view 视图名称;

1.2.3、具体操作:CURD

-- 0.准备数据,查询业主表
select * from t_owners;
-- 1 创建视图
create view view_owners
as select * from t_owners;-- 2 删除视图
drop view view_owners;-- 3 查询 -- 与查询表语法相同
select * from view_owners;-- 4 增删改
insert into view_owners values(11,'美廉美超市666',5,'4-2','30423',to_date('2016-10-12','yyyy-MM-dd'),3 );
commit;update view_owners set name = '大润发' where id = 11;
commit;delete from view_owners where id = 11;
commit;

1.3、含有条件(检测)的视图

  • 给视图,添加约束检查

    • replace ,如果视图已经存在,将覆盖(替换)
    • with check option ,进行有效数据检查(添加/更新数据,必须能查询出来)
-- 含条件的视图
-- 0 准备工作
select * from t_owners where ownertypeid = 1-- 1 创建视图
create or replace view view_owner1
as select * from t_owners where ownertypeid = 1
with check option-- 2 查询
select * from view_owner1;-- 3 添加数据
-- 执行不成功,提供违反约束
insert into view_owner1 values(11,'美廉美超市666',5,'4-2','30423',to_date('2016-10-12','yyyy-MM-dd'),3 );
commit;
-- 执行成功
insert into view_owner1 values(11,'美廉美超市666',5,'4-2','30423',to_date('2016-10-12','yyyy-MM-dd'),1 );
commit;
delete from t_owners where id = 11;
commit;

1.4、强制创建(了解)

  • force 强制创建视图,无论查询语句是否有误
--- 强制创建
-- 0 准备工作,查询表数据,表不存在
select * from temp;-- 1 创建视图
create force view view_owners2
as select * from temp;

1.5、只读视图

  • with read only ,要求视图必须只读。
-- 只读视图
-- 0.准备数据,查询业主表
select * from t_owners;
-- 1 创建只读视图
create view view_owners3
as select * from t_owners
with read only-- 2 查询
select * from view_owners3-- 3 添加 --不允许
insert into view_owners3 values(11,'美廉美超市666',5,'4-2','30423',to_date('2016-10-12','yyyy-MM-dd'),1 );
commit;

1.6、关联查询

1.6.1、名词解释:键保留表、非键保留表

  • 特点:在关联查询生成的视图中,只能添加/修改“键保留表”中的数据。

1.6.2、SQL编写

-- 关联查询(复杂视图)
-- 0 准备sql
select ow.id 业主编号,ow.name 业主名称,ot.name 类型名称 from t_owners ow
inner join t_ownertype ot on ow.ownertypeid = ot.id
-- 1 创建视图
create or replace view view_owners4
as select ow.id 业主编号,ow.name 业主名称,ot.name 类型名称 from t_owners ow
inner join t_ownertype ot on ow.ownertypeid = ot.id
-- 2 查询数据
select * from view_owners4
-- 3 更新数据
-- 3.1 键保留表
update view_owners4 set 业主名称 = '王小强' where 业主编号 = 2;
commit;
-- 3.2 非键保留表 (非键值保存表)--执行不成功
update view_owners4 set 类型名称 = '行政事业单位' where 业主编号 = 2;
commit;

1.7、总结

create [or replace] [force] view 视图名称
as 查询语句
[with check option]
[with read only]-- or replace 覆盖
-- force 强制
-- with check option 有效数据检查
-- with read only 只读视图

2、序列

2.1、什么是序列

  • 序列:用于生产唯一数字的数据库对象

    • 相当于MySQL自动增长列(auto_increment)
  • 序列用途:在表中维护主键的自动增长。

2.2、语法

  • 简化版:
create sequence 序列号;
  • 完整版:
create sequence 序列号
start with 起始值
increment by 步长
maxvalue 最大值
minvalue 最小值

2.3、创建

-- 简化版
create sequence seq_stuno;

-- 完整版
create sequence seq_stuno2
start with 2
increment by 3
maxvalue 20
minvalue 2

2.4、使用

  • 查询获得序列值
-- 查询 , nextval 获得下一个序列
select seq_stuno2.nextval from dual;
  • 添加自动维护主键
-- 表主键自动维护
create table t_demo(id int primary key,name varchar2(50)
);
insert into t_demo(id,name) values(seq_stuno.nextval , '张三');
insert into t_demo(id,name) values(seq_stuno.nextval , '李四');
insert into t_demo(id,name) values(seq_stuno.nextval , '王五');
commit;

3、同义词

3.1、什么是同义词

  • 同义词就是别名,可以给表、视图等其别名。
  • 同义词意义:
    • 同义词允许基对象重命名或者移动,这时,只需对同义词进行重定义,基于同义词的应用程序可以继续运行而无需修改。

3.2、同义词分类

  • 私有同义词:只能用户自己访问
  • 公有同义词:数据库的所有用户都可以访问

3.3、创建和删除

  • 创建

    • 私有同义词

      create synonym 同义词名称 for 表名|视图名
      
    • 公有同义词

      create public synonym 同义词名称 for 表名|视图名
      
  • 删除

    • 私有同义词

      drop synonym 同义词名称
      
    • 公有同义词

      drop public synonym 同义词名称
      

3.4、演示

  • 使用同义词查询时,需要使用2个用户进行测试,公共同义词可以在两个用户之间共享表。
--- 同义词
-- 创建私有同义词
create synonym owners for t_owners;
-- 创建完成后,可以查询到数据
select * from owners;-- 创建共有的同义词
create public synonym owners2 for t_owners;
select * from owners2;--- 删除
drop synonym owners;
drop public synonym owners2

4、索引

4.1、什么是索引

  • 索引是用于加速数据存取的数据对象。合理的使用索引可以大大降低i/o次数,从而提高数据访问性能。
  • 索引目的:提高数据访问性能。
  • 索引需要物理储存。使用空间换时间。

4.2、索引分类

  • 普通索引:使用关键字 index 声明 一个列
  • 唯一索引:使用关键字 unique 声明的列
  • 复合索引:使用关键字 index 声明 多个列

4.3、普通索引

4.3.1、语法

create index 索引名称 on 表名(列名);

4.3.2、准备数据

-- 1 准备数据
-- 1.1 创建表
drop table t_indextest;
create table t_indextest(id number,name varchar2(30)
);
-- 1.2 批量导入100万条数据
beginfor i in 1..1000000loopinsert into t_indextest(id,name) values(i, 'AA' || i);end loop;commit;
end;

4.3.3、测试性能

-- 2 测试
-- 2.1 查询(id,name)  -- 两个结果基本一样
select * from t_indextest where id = 765432;
select * from t_indextest where name = 'AA765432';
-- 2.2 添加索引
create index t_indextest_name on t_indextest(name);
-- 2.3 再次查询   -- 有索引快
select * from t_indextest where id = 765432;
select * from t_indextest where name = 'AA765432';
  • 测试id查询性能
--- 执行计划
explain plan for select * from t_indextest where id = 765432;
select * from table(dbms_xplan.display());

  • 测试name查询性能(已经添加索引)
explain plan for select * from t_indextest where name = 'AA765432';
select * from table(dbms_xplan.display());

4.4、唯一索引(了解)

  • 如果我们需要在某个表某个列创建索引,而这列的值是不会重复的。这时我们可以创建唯一索引。
create unique index 索引名称 on 表名(列名);

4.5、复合索引(了解)

  • 我们经常要对某几列进行查询,可以建立复合索引,也就是基于两个以上的列建立一个索引
create index 索引名称 on 表名(列名,列名2,.....);

Oracle学习(五) --- 视图、序列、同义词、索引相关推荐

  1. Oracle 学习笔记 12 -- 序列、索引、同义词

    数据库的对象包括:表.视图.序列.索引和同义词.在前面的笔记中陆续学习了表和视图,那么本次笔记将学习剩 下的数据库对象,即:序列.索引和同义词. 序列:提供有规律的数值.可供多个用户用来产生唯一数值的 ...

  2. Oracle 学习之建表、索引、同义词以及SQL优化

    Oracle 学习之建表.索引.同义词以及SQL优化: 一.Oracle 建表: 1.建表语句: --创建表 create table test ( id varchar2(200) primary ...

  3. 【C/C++9】天气APP:Oracle的虚表/日期/序列,索引/视图/链路/同义词,数据库高可用性

    文章目录 1.虚表/日期/序列:SEQUENCE 2.索引/视图/链路/同义词:create index/view/link/synonym 3.表空间/数据文件/启动关闭/权限/备份恢复:exp/i ...

  4. Oracle数据库中的序列、索引和同义词,详细笔记。

    文章目录 数据库中的序列.索引和同义词 1. 序列 1.1 什么是序列 1.2 创建序列 1.2.1 通过DDL语句创建序列 1.2.2 使用工具创建序列 1.3 使用序列 1.3.1 查询序列 1. ...

  5. Oracle中的视图和同义词

    视图 视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据.视图将一个查询的结果作为一个表来使用,因此视图可以被看作是存储的查询或一个虚拟表.视图来源于表,所有对视图数据的修改最 ...

  6. (五)Oracle学习笔记—— 视图

    1. 视图简介 视图是虚表,没有具体物理数据,是通过实体表的一种计算映射逻辑.主要就是为了方便和数据安全. 2. 视图作用 简化数据操作:视图可以简化用户处理数据的方式. 着重于特定数据:不必要的数据 ...

  7. Oracle学习:视图与索引

    一.视图 1.视图的概念:从表中抽出的逻辑上相关的数据集合 2.视图的特点: (1)视图是基于表(selete 产生的表): (2)视图是逻辑概念: (3)视图本身没有数据 3.视图的作用:可以简化查 ...

  8. Oracle学习2 视图 索引 sql编程 游标 存储过程 存储函数 触发器

    ---视图 ---视图的概念:视图就是提供一个查询的窗口,来操作数据库中的数据,不存储数据,数据在表中. ---一个由查询语句定义的虚拟表.---查询语句创建表 create table emp as ...

  9. informix clob转oracle 乱码_Oracle 视图-序列-权限-表-事务

    一.视图 视图(view),称为虚表,在数据库中不存在实体. 视图本质上是对物理表(基表)的一种数据保护.让开发者或者用户只能看到基表中的部分数据. 1.1 创建视图 创建视图的语法 1.2 使用视图 ...

最新文章

  1. 2.5 指数加权平均的偏差修正-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  2. audacity_如何在Audacity中快速编辑多个文件
  3. TFS在项目中DevOps落地进程(下)
  4. 分段函数if语句_C语言函数系列之库函数中基础必会函数(一)
  5. 【转载保存】修改IK分词器源码实现动态加载词典
  6. linux内核提取ret2usr,Linux内核漏洞利用技术详解 Part 2
  7. 作者:邹自明(1971-),男,中国科学院国家空间科学中心研究员、副主任
  8. 描绘质量属性的六个常见属性场景。
  9. 题目13 在O(1)时间删除链表节点
  10. markdown在Windows10下安装后启动出现的错误以及一些解决方案
  11. 房地产项目成本管理系统包含的内容和价值!
  12. 新visio2019专业版最新功能和激活密钥!
  13. 图像任意角度旋转和翻转(C#)
  14. web新手之使用easyAR实现WebAR
  15. wamp5虚拟主机的配置
  16. 《Delta-Sigma数据转换器从入门到精通》笔记之漫谈均值
  17. BLE4.2链路层(LL)安全机制-LL Privacy
  18. 使用git管理文件版本(本地仓库)
  19. Tensorflow Serving源码详解
  20. NR常用协议以及下载路径

热门文章

  1. mysql访问跨网御_网御网络审计系统(数据库审计型)
  2. 达内培训Python靠谱吗
  3. HDU6681 二维偏序计算贡献值 树状数组 离散化
  4. springboot日志可视化_使用 SpringBoot Admin 监控你的 SpringBoot 程序
  5. java计算机毕业设计ssm旅游组团管理系统8384y(附源码、数据库)
  6. python基于PHP+MySQL的美食网站的设计与实现
  7. 家教平台小程序--中期报告
  8. 基于 TPS54310的雷达视频信号模拟器的电源设计
  9. php新德里时区_PHP设置时区
  10. 【pytorch】1.6 tensor 基本运算