您的位置:首页 > 数据库 > Oracle

Oracle对象-视图

2018-01-17 16:26 393 查看
1.视图

--创建或修改视图语法
create [or replace] [force] view view_name
As subquery
[with check option]
[with read only]

选项解释:
[or replace] :若创建的视图已经存在,Oracle自动重建该视图。
[force] : 不管基表是否存在,Oracle都会穿件表
subquery : 一条完整的select语句,可以在该语句总定义别名。
WITH CHECK OPTION :插入或修改的数据行必须满足视图定义的约束。
WITH read only : 该视图不能进行任何DML操作。

--删除视图的语法
DROP VIEW View_name

--简单视图的创建和使用
create view view_owners1 as
select * from t_owners where ownertypeid = 1

--简单视图的查询
select count(*) from view_owners1 where addressid=1;

--修改简单视图
Update view_owners1 Set name='tommy' where id =1;
commit;

select * from t_owners

--带检查约束的视图
create view view_address2 as
select * from t_address where areaid=2;
with check option

select * from view_address2

--带检查约束的视图:无法修改成功的语句,因为该视图的条件是areaid=2
update view_address2 set areaid=3 where id =4

--只读视图
create or replace view view_owners1 as
select * from t_owners where ownertypeid=1;
with read only

在执行Update语句,会报错。

--创建一个带错的视图
create or replace view view_temp as select * from T_TEMP

T_TEMP 并存在,系统会给出错误。

--创建一个多表并联的视图
create or replace view view_owners as select o.id ids, o.name names, ot.name otnames from T_OWNERS o, T_OWENERTYPE ot where o.ownertypeid =ot.id

--聚合统计的视图(不能修改)
create View view_accountsum as select year,month,sum(money) moneysum from T_ACCOUNT group by year,month order by year,month


2.物化视图

--物化视图:实体化视图,需要建立副本,效率高,相当于查询单表。
Create MATERIALIZED VIEW view_name [BUILD IMMEDIATE | BUILD DEFERRED]
REFRESH [FAST | COMPLETE | FORCE]
[
ON [COMMIT | DEMAND] | START WITH (start_time) NEXT (next_time)
]
AS
subquery

BUILD IMMEDIATE:是在创建物化视图的时候就程程数据,默认模式;
BUILD DEFERRED : 在创建的时候不生成数据,以后根据需要在生成数据;
REFRESH [FAST | COMPLETE | FORCE]: 当基表发生DML操作后,物化视图何时采用哪种方式和基表进行同步;
FAST:刷新采用增量刷新,只刷新自上次刷新以后进行的刷新。
COMPLETE : 刷新整张表
FORCE:Oracle在刷新时回去判断是否进行快速刷新,如果可以,则采用FAST,否则COMPLETE刷新。默认模式
刷新的模式有两种:ON DEMAND和ON COMMIT,ON DEMAND指需要手动刷新的视图(默认)。ON COMMIT指在基表发生的COMMIT操作时自动刷新。


3.序列

--序列:用于产生唯一数字的数据库对象
Create sequence 序列名称

NEXTVAL:返回序列的下一个值
CURRVAL:返回序列的当前值
我们在刚建立序列后,无法提取当前值,只有先提取下一个值时才能再次提取当前值。

create sequence seq_test;
select seq_test.nextval from dual;
select seq_test.currval from dual;

--创建复杂序列
CREATE SEQUENCE sequence //创建序列名称
[INCREMENT BY n]//递增的序列值是n,如果n是正数就递增,如果是负数就递减,默认值是1;
[start with n]//开始的值,递增默认值是minvalue
[{MAXVALUE n | NOMAXVALUE}]//最大值
[{MINVALUE n | NOMINVALUE}]//最大值
[{CYCLE | NOCYCLE}] //循环/不循环
[{CYCLE n | NOCACHE}];//分配并存入到内存中


4.同义词

同义词实质上市制定方案对象的一个别名,通过屏蔽对象名称和所有者以及对分布式数据库的远程对象提供位置透明性,同义词可以提供一定程度的安全性。同时,同义词的易用性较好,降低了数据库用户的SQL语句复杂度,同义词允许基对象重命名或者移动,这时只需要对同义词进行重定义,基于同义词的应用陈谷可以继续运行而无需修改。
可以创建公共同义词和私有同义词。其中,公共同义词属于public特殊用户组,数据库的所有用户都能访问;而私有同义词包含在特定用户的方案中,只允许特定用户或者基对象访问权限的用户进行访问。
同义词本身不涉及安全,当你赋予一个同义词对象全显示,你实质上是在给同义词的基对象赋予权限,同义词只是基对象的一个别名。

--创建与使用同义词
create [public] SYNONYM synonym for object
synonym表示要创建的同义词的名称,Object表示表视图,序列等我们要创建同义词的对象的名称。

--创建私有同义词
create syn
c4d9
onym OWNERS for T_OWNERS

--从另外的数据库查询:select * from wateruser.owners

--创建共有同义词
create public synonym OWNERS2 for t_owners;

--从另外的数据库查询:select * from owners2


5.索引

--索引
索引是用于加速数据存取的数据对象,合理的使用索引可以大大降低i/o次数,从而提高数据访问性能。
索引是需要占据存储空间的,也可以理解为是一种特殊的数据。形式类似于一棵树,而书的节点存储的就是每条记录的物理地址,也就是伪列ROWID。

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

create index index_onwers_name on t_owners(name);

select * from t_onwers where name='tommy'

--性能测试,创建一个表,向表中插入100万条记录
create table T_INDEXTEST(id number,Name varchar2(30));
begin
for x in 1..1000000
loop
insert into T_INDEXTEST values(x,'AA' || x);
end loop;
commit;
end;

创建索引
create index index_test on t_indextext(name);
select * from T_INDEXTEST where id = 765432;
select ROWID,t.* from t_indextest t where name='AA765432'
select * from t_indextest where rowid = 'AAAM....';

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

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

create unique index index_owners_watermeter on T_OWNERS(watermeter);

--复合索引
我们经常需要在某几列进行查询,比如,我们经常要根据学历和性别对学院进行搜索,如果我们对这两列简历两个索引,因为要查询两张表,查询性能不一定高,那就可以建立复合索引,特就是基于两个以上的列建立一个索引。

create index 索引名称 on 表名(列名,列名);
create index owners_index_ah on T_OWNERS(addressid,housenumber);

--反向索引
当某个字段的值为连续增长的值,如果构建标准索引,会形成歪脖子树,这样会增加查询的层数,性能会下降,简历反向键索引,可以使用索引的值变得不规则,从而使索引树能够均匀分布。

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

--位图索引
位图索引适合创建在低基数列上
位图索引不直接存储ROWID,而是存储字节位到ROWID的映射。
优点:减少响应时间,节省空间。

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

create bitmap index index_owners_typeid on T_OWNERS(ownertypeid)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐