视图

视图

什么是视图?

数据库中表和视图都是其内部的对象,视图可以理解成一个虚拟的表,视图本质就是取代了一段sql查询语句.

为什么使用视图?

因为有些数据的查询需要使用大量的sql语句,每次书写比较麻烦,使用视图可以起到sql重用的作用,可以隐藏表中的敏感信息.

格式:

create view 视图名 as 子查询;

例如: 创建部门是20并且工资小于3000的视图

create view v_emp_20 as (
    select * from emp where deptno=20 and sal<3000
);

视图的分类

  • 简单视图: 创建视图的子查询中不包含: 去重,函数,分组,关联查询的视图称为简单视图.可以对数据进行增删改查操作.
  • 复杂视图: 创建视图的子查询中包含: 去重,函数,分组,关联查询的视图称为复杂视图.只能进行查的操作

视图增删改

简单视图的增删改操作 操作方式和table一样

插入数据

如果插入的数据在视图中不显示但是原表中显示,称为数据污染

错误写法 因为视图中时按照depon=10 查找的

insert into v_emp_10 (empno,ename) values
(10010,'Tom');

正确写法

insert into v_emp_10 (empno,ename,deptno) values
(10086,'Jerry',10);

可以通过with check option 关键字禁止出现数据污染

create view v_emp_30 as (select * from emp where deptno=30) 
with check option;

测试:

insert into v_emp_30 (empno,ename,deptno) values
(10011,'张三',30);
insert into v_emp_30 (empno,ename,deptno) values
(10012,'李四',20);

修改数据

只能修改视图中存在的数据,原表中存在,但视图中不存在也不会改

update v_emp_30 set ename='张三' where empno=10011;
update v_emp_30 set ename='汤姆' where empno=10010;

删除数据

delete from v_emp_30 where empno=10011;
delete from v_emp_30 where empno=10010;

修改视图

(如果有就修改,如果没有就创建)

格式: create or replace view 视图名 as 子查询;

例如:

create or replace view v_emp_10 as (
    select * from emp
);

删除视图

drop view v_emp_10;
drop view if extract v_emp_10; -- 有就删,没有也不会报错

视图别名

创建视图的时候子查询对字段起了别名, 则后期对视图进行操作只能使用别名.

测试:

create view v_emp_10 as (select empno,ename name from emp);
update v_emp_10 set name='汤姆' where empno=10010; -- (成功)
update v_emp_10 set ename='汤姆aaa' where empno=10010; -- (失败:只能使用别名进行操作)
原文地址:https://www.cnblogs.com/zpKang/p/12997496.html