– 视图
概念:
– 限制其它用户对数据库表的访问,因为视图可以有选择性的显示数据库表的一部分;
– 容易实现复杂的查询;
– 对于相同的数据可以产生不同的视图;-- 简单视图 一个 没有 没有 可以 -- 基表数量 包含函数 包含数据组 通过视图实现 DML 操作 一个或多个 有 有 不一定 -- 复杂视图
创建视图
-- 创建简单视图 -- 创建一个视图v_emp10,通过该视图只能查看10号部门的员工编号,员工姓名,职位。 -- or replace 修改视图 create or replace view empvu10 as select empno 员工编号, ename 员工姓名, job 职位 from emp where deptno = 10; -- 创建复杂视图 -- 创建一个视图,通过该视图可以查看每个部门的名称,最低工资,最高工资,平均工资 CREATE VIEW dept_sum_vu (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; -- 授权:需在管理员命令窗口执行 grant create view to scott; -- 使用视图 select from empvu10; select from dept_sum_vu;
修改视图 基于视图作DML操作
– 注意: 修改视图,仅允许修改视图中可见数据create or replace view empvu10 as select empno 员工编号, ename 员工姓名, job 职位 from emp where deptno = 10; -- 修改数据 job = PRESIDENT 的job改为国王 update empvu10 set 职位='国王' where 职位='PRESIDENT'; -- 插入数据视图 insert into empvu10 values(1234,'哈哈', '技术员'); select from emp; select e., e.rowid from emp e; -- WITH CHECK OPTION 子句 不能修改限制条件 CREATE OR REPLACE VIEW empvu20 AS SELECT FROM emp WHERE deptno = 20 WITH CHECK OPTION; select from empvu20; update empvu20 set deptno = 10 where empno = 7788;--违规 -- WITH READ ONLY 子句 视图只读,无法执行DML操作 CREATE OR REPLACE VIEW empvu20 AS SELECT FROM emp WHERE deptno = 20 WITH READ ONLY; select from empvu20; update empvu20 set deptno = 10 where empno = 7788;--违规
使用视图
select * from v_emp10;
删除视图
delete view empvu10;
– 数据字典
select * from user_views;--查看当前用户所有的视图
select * from user_updatable_columns;--查询可做DML操作的列
select * from user_objects;--查看当前用户所有的对象
select * from user_tables; -- 查询表
select * from user_constraints;--查询约束
select * from user_cons_columns; --查询约束及相关列
select * from user_indexes;--查询当前用户所有的索引
select * from user_ind_columns;--查询当前用户的所有索引,及相关列