iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Oracle中关于视图-序列-同义词-索引的详解
  • 434
分享到

Oracle中关于视图-序列-同义词-索引的详解

Oracle中关于视图-序列-同义词-索引的详解 2022-04-13 18:04:56 434人浏览 绘本
摘要

一.视图 1.什么是视图  简单来说 视图就是一个虚拟表,实体表的映射       什么时候使用视图 在开发中,有一些表结构是不希望过多的人去接触,就把实体表映射为一个视图。(

Oracle中关于视图-序列-同义词-索引的详解

一.视图

1.什么是视图

  •  简单来说 视图就是一个虚拟表,实体表的映射

 

 

 

什么时候使用视图

    • 开发中,有一些表结构是不希望过多的人去接触,就把实体表映射为一个视图。(表结构简化)

    • 项目过程中,程序人员主要关注编码的性能、业务分析这方面。对于一些复杂的sql语句,设计人员会提前把这些语句封装到一个视图中,供程序人员去调用

 

 

2.视图基本操作:

1) 简化版创建

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

 

 创建视图

create  view  view_owners 
as select * from t_owners;

 

视图创建后所在的位置:

 

 

2 删除视图

-- 语法
drop view 视图名称;

drop view view_owners;

 

3. 查询

select * from view_owners;

 

 

3)具体操作:增删改

--4.增删改
--增
insert into view_owners values(11,"美美超市",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;

 

 

 

3.含有条件(检测)的视图

给视图,添加约束检查

  • re replace ,如果视图已经存在,将覆盖(替换)

  • with check option ,进行有效数据检查(添加/更新数据,必须能查询出来)

--含条件的视图

--准备数据
select * from t_owners ow where ow.ownertypeid=1;

--1;创建视图
-- or  replace, 如果视图已经存在,将覆盖(替换)
--with check option ,进行有效数据检查(添加/更新数据,必须能查出来)


create or replace  view view_owners1
as select * from t_owners ow where ow.ownertypeid=1
with check option;


--2.查询数据
select * from view_owners1 ;


--3.添加数据(条件不对,ownertypeid=3与原本条件不匹配,报错;违反唯一约束条件)
----错误; insert  into view_owners1 values(11,"美美超市",5,"4-2","30423",to_date("2016-10-12","yyyy-MM-dd"),3 );

--添加成功后; 它会在原本t_owners先加一条数据,然后view_owners1也加,最终可以查出来
insert  into view_owners1 values(11,"美美超市",5,"4-2","30423",to_date("2016-10-12","yyyy-MM-dd"),1 );

commit;


--删除
drop view view_owners1;
delete from t_owners ow where ow.id=11;

 

 

4.强制创建

force 强制创建视图,无论查询语句是否有误

--0.准备工作,查询表数据,表不存在
select * from temp;

--1;创建视图
create force view view_owners2
as select * from temp;

 

 

 

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(12,"美美超市11",5,"4-2","30423",to_date("2016-10-12","yyyy-MM-dd"),1 );

 

 

6.关联查询

1) 名词解释:键保留表、非键保留表

  • --键保留表; 视图主键来自哪个物理表,此表称为"键保留表"
  • --非键保留表; 其他表都称为"非键保留表"
  • --特点;在关联查询生成的视图中,只能添加/修改"键保留表"中的数据

 

 

总结:哪些视图的数据是无法更新的?

1 简单视图:

  * 带检查约束的,无法修改条件

  * 只读视图

2 复杂视图

  * 非键保留表

  • 键保留表:原表中的主键,也是视图中的主键

  * 使用了聚合函数的视图

 

举例使用:

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



-- 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;

 

 

总结:

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

-- or replace 覆盖
-- force 强制
-- with check option 有效数据检查
-- with read only 只读视图

  • 1 视图其实是一个虚拟的表,它的数据其实来自于表。
  • 2 如果更改了视图的数据,表的数据也自然会变化
  • 3 更改了表的数据,视图也自然会变化。
  • 4 一个视图所存储的并不是数据,而是一条SQL语句。

 

 

二. 序列

1.什么是序列

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

    • 相当于Mysql 自动增长列(auto_increment)

  • 序列用途:在表中维护主键的自动增长。

 

 

2.语法

简化版:

create sequence 序列号;

 

完整版:

create sequence 序列号
start with 起始值
increment by 步长
maxvalue 最大值
minvalue 最小值

 

3.创建

-- 简化版
create sequence seq_stuno;

 

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

 

 

4.使用


--使用
---查询获得序列值
--查询, nextval 获得下一个序列
select seq_stuno2.nextval from dual;




--添加自动维护主键
create table tt_demo(
id int primary key,
name varchar2(50)
);

insert into tt_demo(id,name)values(seq_stuno.nextval,"张三");
insert into tt_demo(id,name)values(seq_stuno.nextval,"李四");
insert into tt_demo(id,name)values(seq_stuno.nextval,"王五");

commit;

 

 

 

三.同义词

1.什么是同义词?

  • 同义词就是别名,可以给表、视图等起别名。

  • 同义词意义:

    • 同义词允许基对象重命名或者移动,这时,只需对同义词进行重定义,基于同义词的应用程序可以继续运行而无需修改。

 

 

2.同义词分类

  • 私有同义词:只能用户自己访问

  • 公有同义词:数据库的所有用户都可以访问

 

同义词本身不涉及安全,当你赋予一个同义词对象权限时,你实质上是在给同义词的基对象赋予权限,同义词只是基对象的一个别名。

作用:

  1. 方便访问
  2. 缩短对象名字的长度
  3. 提高安全性

 

3. 创建和删除

创建

  • 私有同义词

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

 

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

 

 

删除

  • 私有同义词

drop synonym 同义词名称
  • 共有同义词
drop public synonym 同义词名称

 

举例使用:

注意:--使用同义词查询时,需要使用2个用户,公共同义词可以在两个用户之间共享表


--练习
--1创建私有同义词
create synonym owners for t_owners ;

--创建完成后,可以查询到数据
select * from owners;



---2创建共有的同义词
create public synonym owners2 for t_owners;

--创建完成后,可以查询到数据
select * from owners2;



---删除
drop synonym owners;

drop public synonym owners2;

 

 

 

 

四.索引

1.什么是索引?

  • --索引是数据库管理系统中一个排序数据结构,以协助快速查询,更新数据库表中的数据
  • --索引是用于加速数据存取的数据对象。合理的使用索引可以大大降低i/o 次数,从而提高数据访问性能。
  • --索引目的;提高数据访问性能
  • --索引需要物理存储,使用空间换时间.

 

2.索引分类

  • 普通索引:使用关键字 index 声明 一个列

  • 唯一索引:使用关键字unique 声明的列

  • 复合索引:使用关键字 index 声明 多个列

 

3.普通索引

1) 语法

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

 

2) 准备数据

--2准备数据
--1).创建表
create table tt_indextest(
id number,
name varchar2(30)
);

--2).批量导入100万条数据
begin     --批量开始
  for i in 1..1000000   --循环: for 变量  in 开始值..结束
  loop            --循环体开始
    insert into tt_indextest(id,name) values(i,"AA"||i);
    end loop;    --循环体结束
    commit;
end;  --批量结束

--查看多少条数据
select count(*) from tt_indextest;

 

3) 测试性能

--3.测试性能
--3.1 查询(id,name)--没加索引两个结果基本一样
--0.049
select * from tt_indextest where id=765432;
--0.047
select * from tt_indextest where name="AA765432";


--3.2添加索引
create index tt_indextest_name on tt_indextest(name)

--3.3再次查询 --有索引
select * from tt_indextest where id=765432;
select * from tt_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. 唯一索引

如果我们需要在某个表某个列创建索引,而这列的值是不会重复的。这是我们可以创建唯一索引。

 

语法:

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

 

--需求:在业主表的水表编号一列创建唯一索引

create unique index index_owners on t_owners(watermeter);

 

 

 

5.复合索引

我们经常要对某几列进行查询,可以建立复合索引,也就是基于两个以上的列建立一个索引

语法:

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

 

举例使用:

根据地址和门牌号对业主表创建索引,语句如下:

create index owners_index_ah on t_owners(addressid,housenumber);

 

 

 

看完恭喜你,又知道了一点点!!!

你知道的越多,不知道的越多! 

~感谢志同道合的你阅读,  你的支持是我学习的最大动力 ! 加油 ,陌生人一起努力,共勉!!

您可能感兴趣的文档:

--结束END--

本文标题: Oracle中关于视图-序列-同义词-索引的详解

本文链接: https://www.lsjlt.com/news/6438.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 解释 SQL 中表、视图和同义词之间的区别
    让我们了解一下结构化查询语言 (SQL) 中的表、视图和同义词是什么。表、视图和同义词表是数据的存储库,其中在表中它是一个物理实体。表物理上驻留在数据库中。视图不是数据库物理表示的一部分。它经过预编译,因此数据检索速度更快,并且还提供安全的...
    99+
    2023-10-22
  • 关于DBA_USERS视图中ACCOUNT_STATUS 列的各种取值的含义说明
    SQL> select * from sys.user_astatus_map; STATUS# STATUS---------- -------------------------------- 0 O...
    99+
    2023-06-06
  • MySQL中索引与视图的用法与区别详解
    前言 本文主要给大家介绍了关于MySQL中索引与视图的使用与区别的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 索引 一、概述 所有的Mysql列类型都可以被索引。 mys...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作