视图 view

视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。

但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

为啥需要使用视图

  1. 视图 view
  2. 1)【安全性】保护了原表中数据的安全性,一部分比较敏感重要的数据不被暴露出去
  3. 2)【简化SQL语句】从一定程度上,简化复杂的SQL语句

创建视图

  1. CREATE VIEW 视图名(列1,列2...)
  2. AS SELECT (列1,列2...)
  3. FROM ...;

使用视图和使用表完全一样,只需要把视图当成一张表就OK了。视图是一张虚拟表。

删除视图

drop view 视图名;

视图与表数据变更

  1. 表数据变化后,在通过视图检索,得到的结果也同步发生了变化
  2. 可以通过视图插入数据,但是只能基于一个基础表进行插入,不能跨表更新数据。

WITH CHECK OPTION

如果在创建视图的时候制定了“WITH CHECK OPTION”,那么更新数据时不能插入或更新不符合视图限制条件的记录。

示例

  1. -- 经常查询员工基本信息
  2. -- 1. 员工编号 姓名 职位 所在部门 手机号 邮箱
  3. create view emp_info_view
  4. as
  5. select e.empno employee_no,e.ename employee_name ,
  6. job employee_job,d.dname depaerment_name
  7. from emp e join dept d
  8. on e.deptno = d.deptno
  9. -- 2. 统计各部门的薪资情况
  10. (子查询、分组、排序、函数--复杂的 频繁使用的sql )=== > 结果放在视图中
  11. -- 删除视图
  12. drop view emp_info_view;
  13. -- 删除原表中的记录,视图中的数据也删除
  14. delete from emp where empno = 7934
  15. select * from emp_info_view
  16. -- 创建视图:查询出30部门的所有员工信息,统计出总薪资
  17. create view emp_salary_view
  18. as
  19. select empno employee_no,
  20. ename employee_name,
  21. salary employee_salary,
  22. comm employee_comm,
  23. deptno department_no ,
  24. salary + ifnull(comm,0) total_salary
  25. from emp
  26. where deptno = 30
  27. with check option
  28. drop view emp_salary_view
  29. -- (1)更新视图中 7900员工 comm 改为1000
  30. update emp_salary_view set employee_comm = 1000 where employee_no = 7900
  31. 原表中7900 数据有没有受影响?【有受影响】
  32. select * from emp where empno =7900
  33. -- with check option 所有的对视图的操作,必须要满足视图中的where 条件
  34. update emp_salary_view set employee_comm =100 where department_no= 10