视图 view
视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。
但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
为啥需要使用视图
视图 view
(1)【安全性】保护了原表中数据的安全性,一部分比较敏感重要的数据不被暴露出去
(2)【简化SQL语句】从一定程度上,简化复杂的SQL语句
创建视图
CREATE VIEW 视图名(列1,列2...)
AS SELECT (列1,列2...)
FROM ...;
使用视图和使用表完全一样,只需要把视图当成一张表就OK了。视图是一张虚拟表。
删除视图
drop view 视图名;
视图与表数据变更
- 表数据变化后,在通过视图检索,得到的结果也同步发生了变化
- 可以通过视图插入数据,但是只能基于一个基础表进行插入,不能跨表更新数据。
WITH CHECK OPTION
如果在创建视图的时候制定了“WITH CHECK OPTION”,那么更新数据时不能插入或更新不符合视图限制条件的记录。
示例
-- 经常查询员工基本信息
-- 1. 员工编号 姓名 职位 所在部门 手机号 邮箱
create view emp_info_view
as
select e.empno employee_no,e.ename employee_name ,
job employee_job,d.dname depaerment_name
from emp e join dept d
on e.deptno = d.deptno
-- 2. 统计各部门的薪资情况
(子查询、分组、排序、函数--复杂的 、 频繁使用的sql )=== > 结果放在视图中
-- 删除视图
drop view emp_info_view;
-- 删除原表中的记录,视图中的数据也删除
delete from emp where empno = 7934
select * from emp_info_view
-- 创建视图:查询出30部门的所有员工信息,统计出总薪资
create view emp_salary_view
as
select empno employee_no,
ename employee_name,
salary employee_salary,
comm employee_comm,
deptno department_no ,
salary + ifnull(comm,0) total_salary
from emp
where deptno = 30
with check option
drop view emp_salary_view
-- (1)更新视图中 7900员工 comm 改为1000
update emp_salary_view set employee_comm = 1000 where employee_no = 7900
原表中7900 数据有没有受影响?【有受影响】
select * from emp where empno =7900
-- with check option 所有的对视图的操作,必须要满足视图中的where 条件
update emp_salary_view set employee_comm =100 where department_no= 10