视图 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 asselect 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;-- 删除原表中的记录,视图中的数据也删除deletefrom emp where empno =7934select*from emp_info_view -- 创建视图:查询出30部门的所有员工信息,统计出总薪资create view emp_salary_view asselect 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 =30with check option drop view emp_salary_view -- (1)更新视图中 7900员工 comm 改为1000update emp_salary_view set employee_comm =1000where employee_no =7900原表中7900 数据有没有受影响?【有受影响】 select*from emp where empno =7900-- with check option 所有的对视图的操作,必须要满足视图中的where 条件update emp_salary_view set employee_comm =100where department_no=10