一.视图 1.什么是视图 简单来说 视图就是一个虚拟表,实体表的映射 什么时候使用视图 在开发中,有一些表结构是不希望过多的人去接触,就把实体表映射为一个视图。(
-- 语法
create view 视图名称 as 查询语句;
create view view_owners
as select * from t_owners;
视图创建后所在的位置:
-- 语法
drop view 视图名称;
drop view view_owners;
select * from view_owners;
--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;
给视图,添加约束检查
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;
force 强制创建视图,无论查询语句是否有误
--0.准备工作,查询表数据,表不存在
select * from temp;
--1;创建视图
create force view view_owners2
as select * from temp;
--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 );
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 只读视图
简化版:
create sequence 序列号;
完整版:
create sequence 序列号
start with 起始值
increment by 步长
maxvalue 最大值
minvalue 最小值
-- 简化版
create sequence seq_stuno;
-- 完整版
create sequence seq_stuno2
start with 2
increment by 3
maxvalue 20
minvalue 2
--使用
---查询获得序列值
--查询, 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;
同义词就是别名,可以给表、视图等起别名。
同义词意义:
同义词允许基对象重命名或者移动,这时,只需对同义词进行重定义,基于同义词的应用程序可以继续运行而无需修改。
私有同义词:只能用户自己访问
公有同义词:数据库的所有用户都可以访问
同义词本身不涉及安全,当你赋予一个同义词对象权限时,你实质上是在给同义词的基对象赋予权限,同义词只是基对象的一个别名。
作用:
创建
私有同义词
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;
普通索引:使用关键字 index 声明 一个列
唯一索引:使用关键字unique 声明的列
复合索引:使用关键字 index 声明 多个列
create index 索引名称 on 表名(列名);
--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.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());
如果我们需要在某个表某个列创建索引,而这列的值是不会重复的。这是我们可以创建唯一索引。
create unique index 索引名称 on 表名(列名);
--需求:在业主表的水表编号一列创建唯一索引
create unique index index_owners on t_owners(watermeter);
我们经常要对某几列进行查询,可以建立复合索引,也就是基于两个以上的列建立一个索引
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文档到电脑,方便收藏和打印~
2024-05-21
2024-05-21
2024-05-21
2024-05-21
2024-05-21
2024-05-21
2024-05-21
2024-05-21
2024-05-21
2024-05-21
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0