一:视图的创建

  1. #视图:
  2. /*
  3. 含义:虚拟表,和普通表一样使用
  4. mysql5.1版本出现的新特性,是通过表动态生成的数据
  5. 应用场景:
  6. 多个地方用到同样的查询结果
  7. 该查询结果使用的sql语句较复杂
  8. */
  9. #案例:查询姓张的学生名和专业名
  10. CREATE VIEW v1
  11. AS
  12. SELECT stuname,majorname
  13. FROM stuinfo s
  14. INNER JOIN major m
  15. ON s.majorid=m.id
  16. WHERE s.stuname LIKE '张%';
  17. SELECT * FROM v1 WHERE stuname LIKE '张%';
  18. #一:创建视图
  19. /*
  20. 语法:
  21. create view 试图名
  22. as
  23. 查询语句
  24. */
  25. #案例一:查询姓名中包含a字符的员工名、部门名和工种信息
  26. #(1)创建
  27. CREATE VIEW myv1
  28. AS
  29. SELECT last_name,department_name,job_title
  30. FROM employees e
  31. JOIN departments d
  32. ON e.department_id = d.department_id
  33. JOIN jobs j
  34. ON j.job_id = e.job_id;
  35. #(2)使用
  36. SELECT *
  37. FROM myv1
  38. WHERE last_name LIKE '%a%';
  39. /*
  40. 视图的好处:
  41. 重用sql语句
  42. 简化复杂的sql操作,不必知道它的细节
  43. 保护数据,提高安全性
  44. */

二;视图的修改

  1. #二:视图的修改
  2. #方式一:
  3. /*
  4. create or replace view 视图名
  5. as
  6. 查询语句;
  7. 含义:如果存在则修改,不存在则创建
  8. */
  9. CREATE OR REPLACE VIEW myv1
  10. AS
  11. SELECT AVG(salary),job_id
  12. FROM employees
  13. GROUP BY job_id;
  14. #方式二:
  15. /*
  16. alter view 视图名
  17. as
  18. 查询语句;
  19. */
  20. ALTER VIEW myv1
  21. AS
  22. SELECT AVG(salary),job_id
  23. FROM employees
  24. GROUP BY job_id;

三:视图的查看和删除

  1. #三:查看视图
  2. /*
  3. 语法:
  4. desc 视图名; #查看视图结构
  5. show create view 视图名;
  6. */
  7. #四:删除视图
  8. /*
  9. 语法:
  10. drop view 视图名,视图名,……
  11. */

四:视图的更新

  1. #五:视图的更新
  2. CREATE OR REPLACE VIEW myv1
  3. AS
  4. SELECT last_name,email
  5. FROM employees;
  6. SELECT * FROM myv1;
  7. #1.插入
  8. INSERT INTO myv1 VALUES('周杰伦','zjl@qq.com');
  9. #2.修改
  10. UPDATE myv1 SET last_name = '方文山' WHERE last_name='周杰伦';
  11. #3.删除
  12. DELETE FROM myv1 WHERE last_name = '方文山';
  13. /*一般情况下视图是不允许更新的*/

视图的可更新性和视图中查询的定义有关系,以下类型的视图是不能更新的。

  1. 包含以下关键字的sql语句:分组函数、distinct、group by、having、union或者union all。
  2. 常量视图。
  3. select中包含子查询。
  4. join。
  5. from一个不能更新的视图。
  6. where子句的子查询引用了from子句中的表。

    五:视图和表的对比

    | | 创建语法的关键字 | 是否实际占用物理空间 | 使用 | | —- | —- | —- | —- | | 视图 | create view | 只是保存了sql逻辑 | 增删改查,一般只能查 | | 表 | create table | 保存了数据 | 增删改查 |