一.what(什么是视图?) 1.视图是一种数据库对象,是从一个或者多个数据表或视图中导出的虚表,视图所对应的数据并不真正地存储在视图中, 而是存储在所引用的数据表中,视图的结构和数据是对数据表进行查询的结果。 2.根据创建视图时给定的条件,视图可以是一个数据表的一部分,也可以是多个基表的联合, 它存储了要执行检索的查询语句的定义,以便在引用该视图时使用。 二.why(为什么要用视图?视图的优点) 1.简化数据操作:视图可以简化用户处理数据的方式。 2.着重于特定数据:不必要的数据或敏感数据可以不出现在视图中。 3.视图提供了一个简单而有效的安全机制,可以定制不同用户对数据的访问权限。 4.提供向后兼容性:视图使用户能够在表的架构更改时为表创建向后兼容接口。 5.自定义数据:视图允许用户以不同方式查看数据。 6.导出和导入数据:可使用视图将数据导出到其他应用程序。 三 :HOW (怎么样来建立视图,用视图) -- 注意:创建视图需要create view的权限 视图的创建基本语法: CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name [(alias[, alias]...)] AS subquery [WITH CHECK OPTION [CONSTRAINT constraint]] [WITH READ ONLY] 其中: OR REPLACE :若所创建的试图已经存在,ORACLE自动重建该视图; FORCE :不管基表是否存在ORACLE都会自动创建该视图; NOFORCE :只有基表都存在ORACLE才会创建该视图: alias :为视图产生的列定义的别名; subquery :一条完整的SELECT语句,可以在该语句中定义别名; WITH CHECK OPTION : 插入或修改的数据行必须满足视图定义的约束; WITH READ ONLY : 该视图上不能进行任何DML操作。 --例: create or replace view dept_sum_vw (name,minsal,maxsal,avgsal) -- 定义列的别名 as select d.dname,min(e.sal),max(e.sal),avg(e.sal) from emp e,dept d where e.deptno=d.deptno group by d.dname; -- 视图的查询(类似于表的查询) select * from dept_sum_vw where name='ACCOUNTING'; -- 视图的DML操作 --update的情况,必须是以下情况 --1. view的字段只涉及一个表。 --2. 如果涉及多个表的话,被(涉及到的)view列所映射table列(或列的组合)必须是有主健或者unique约束的 -- 准备测试数据 create table t_emp as select * from emp; create table t_dept as select * from dept; alter table t_emp add constraint pk_empno primary key(empno); -- 添加主键 alter table t_dept add constraint pk_deptno primary key(deptno); --创建视图 create or replace view ed_vw as select e.empno,e.ename,e.sal,d.dname,d.deptno from t_emp e inner join t_dept d on e.deptno = d.deptno --with read only; --update操作(注意: 当视图定义中包含 -- 分组函数,GROUP BY子句,DISTINCT关键字,ROWNUM 伪列 -- 的情况下不能执行update操作 --) update ed_vw set ename='SMITH_TEST' where empno=7369; --delete操作(注意:当视图定义中包含分组组函数,GROUP BY子句, DISTINCT关键字, ROWNUM 伪列, 列的定义为表达式 -- DUAL伪表的情况下不能执行delete操作 --) delete from ed_vw where empno = 7369; --insert操作(注意:当视图定义中包含 -- 分组函数,GROUP BY子句, DISTINCT关键字, -- ROWNUM 伪列, 列的定义为表达式 不能执行insert操作 ) insert into ed_vw(empno,ename,sal) values(2345, 'test', 99.9); --视图的删除 DROP VIEW VIEW_NAME语句删除视图。 删除视图的定义不影响基表中的数据。 只有视图所有者和具备DROP VIEW权限的用户可以删除视图。 视图被删除后,基于被删除视图的其他视图或应用将无效。 drop view ed_vw --(删除指定的视图);
一.what(什么是索引?) 1、 类似书的目录结构 2、 Oracle 的“索引”对象,与表关联的可选对象(可建也可以不建) 3、 索引直接指向包含所查询值的行的位置,减少磁盘I/O 4、 与所索引的表是相互独立的物理结构 5、 Oracle 自动使用并维护索引,插入、删除、更新表后,自动更新索引 二.why(为什么要用索引?) 提高SQL查询语句的速度 三: HOW(怎么用) 索引的类型 1:唯一索引 2:组合索引 3: 反向索引 4:位图索引 5:基于函数或者条件的索引 -- 创建索引 create index 索引名 ON 表名 (列名) tablespace 表空间名; --创建一张产品表(tb_product),为该表的product_id列创建索引,以便在使用到该列时提高查询效率。 create table tb_product ( product_id number, --编号 product_name varchar2(100),--名称 product_type varchar2(20), -- 类型 product_price number(10,4) -- 价格 ); insert into tb_product values(1,'Java编程思想','学习资料',99.9); insert into tb_product values(2,'C++编程思想','学习资料',98.9); insert into tb_product values(3,'C编程思想','学习资料',97.9); insert into tb_product values(4,'Javascript入门到精通','学习资料',96.9); insert into tb_product values(5,'Java设计模式','学习资料',95.9); insert into tb_product values(6,'C#基础到实战','学习资料',94.9); insert into tb_product values(7,'设计模式','学习资料',93.9); --唯一索引 何时创建:当某列的值都不相同 当建立primary Key(主键)或者unique constraint(唯一约束)时,唯一索引将被自动建立 语法:create unique index 索引名 on 表名 (列名) TABLESPACE 表空间名; create unique index product_id_u1 on tb_product(product_id); --组合索引 何时创建:当两个或多个列经常一起出现在where条件中时,则在这些列上同时创建组合索引 组合索引中列的顺序是任意的,也无需相邻。但是建议将最频繁访问的列放在列表的最前面 语法:CREATE INDEX 索引名 ON 表名 (列名1,列名2) TABLESPACE 表空间名; create unique index name_type_index on tb_product(product_name,product_type); explain plan from select * from tb_product where product_name='Java编程思想' and product_type='学习资料'; --反向键索引 目的:比如索引值是一个自动增长的列: 多个用户对集中在少数块上的索引行进行修改,容易引起资源的争用,比如对数据块的等待。此时建立反向索 引。 语法:CREATE INDEX 索引名 ON 表名 (列名) reverse TABLESPACE 表空间名; create unique index product_id_rev on tb_product(product_id) reverse; --位图索引 何时创建:列中有非常多的重复的值时候。例如某列保存了 “性别”信息。 Where 条件中包含了很多OR操作符。较少的update操作,因为要相应的跟新所有的bitmap 结构:位图索引使用位图作为键值,对于表中的每一数据行位图包含了TRUE(1)、FALSE(0)、或NULL值。 优点:位图以一种压缩格式存放,因此占用的磁盘空间比标准索引要小得多 语法:CREATE BITMAP INDEX index ON table (column[, column]...); CREATE BITMAP INDEX pt_index ON tb_product (product_type); --基于函数索引 何时创建:在WHERE条件语句中包含函数或者表达式时 函数包括:算数表达式、PL/SQL函数、程序包函数、SQL函数、用户自定义函数。 语法:CREATE INDEX index ON table (FUNCTION(column)); CREATE INDEX fn_index ON tb_product (UPPER(product_name));