※ 视图创建
所谓视图就是提取一张或者多张表的数据生成一个映射,管理视图可以同样达到操作原表的效果,方便数据的管理以及安全操作。
※ 创建基本语法:
create [or replace] [force] view view_name
// or replace覆盖已有视图
// force强制性视图view
as
select ...
[where condition]
[with check option|with read only]
例:create view s_e
as
select id,last_name
from s_emp;
select * view s_e;
如果当前用户没有创建视图的权限
管理员:grant create view to 用户名;
※ 1 .with check option:加上该关键词表示对view进行dml操作的时候,只能操作select语句中where条件限制的内容,如果修改后的结果在view中将不再看到,那么这种操作不允许。
例:create view s_e2
as
select id,last_name
from s_emp
where id<20
with check option;
select * from s_e2;
update s_e2 set id=28
where id=19;//报错,id<20
※ 2 .别名:如果给列起了别名,视图中的列就是别名,如果没有起别名,视图中的名字就是查询的结果默认名字。
※ 3 .with read only:建立了视图在不是只读的情况下,可以对视图做增删改查操作会影响到原来的表,对原表操作也会影响视图。
※ 4 .视图更改信息,只能更改单表信息
update s_e set last_name='briup'
where id=2;
commit;
create view s_e1
as
select avg(salary) avg,dept_id
from s_emp
group by dept_id;
update s_e1 set avg=1000
where dept_id=43;//报错,平均工资包含多列信息
※ 删除视图
drop view view_name;
※ 使用视图的好处:
1.信息隐藏
比如s_emp表中有工资,可以创建视图,隐藏工资信息。(可以配合权限,让某个用户只能查看视图,不能查看表。)
2.使复杂查询变得简单。
※ 视图分为:
1.简单视图:
1不涉及多张表,
2.不涉及组函数,
3.不涉及分组,
4.可以执行DML操作
2.复杂视图
与简单视图相反。
create view s_e2
as
select s.id,s.last_name,d.id ids,d.name
from s_emp s,s_dept d
where s.dept_id=d.id;
column name format a10;
select * from s_e2;
update s_e2 set id=29
where id=27;
commit;//只改单表单列的值是可以的
select id,last_name
from s_emp;//对原表也更改
insert into s_e2 values(30,'huzl',60,60,'web');
//报错,不允许用过联接视图修改多个基表
select * from s_e2;
delect from s_e2 where id=25;
commit;
//只会删除id=25的员工信息,不会删除部门表信息