-- 视图 /* 含义:虚拟表,和普通的表一样使用 mysql5.1版本的新特性,是通过表动态生成的数据,只保存了sql的逻辑,不保存查询的结果 应用场景: - 多个地方用到同样的查询结果 - 该查询结果使用的sql语句较复杂 好处: 重用sql语句 简化了复杂的sql操作,不必知道它的查询细节 保护数据,提高安全性 */ -- ---------------视图的创建和使用----------------------------------- -- 创建一个查询员工名和部门名的试图 CREATE VIEW view_empName_depName AS SELECT last_name,department_name FROM employees e JOIN departments d ON e.`department_id`=d.`department_id`; -- 需求:查找员工名包含e 的 员工名和部门名 SELECT * FROM view_empName_depName WHERE last_name LIKE '%e%'; -- ---------------视图的修改----------------------------------------- -- 方式一 /* 如果存在就修改,如果不存在则创建 create or replace view 视图名 as 查询语句 */ -- 方式二 /* alter view 视图名 as 查询语句 */ -- ---------------视图的删除----------------------------------------- /* drop view 视图名1,视图名2... */ -- ---------------视图的查看----------------------------------------- /* desc 视图名 */ DESC view_empName_depName; -- ---------------视图的更新----------------------------------------- -- 同时也会对原始表进行更新 CREATE OR REPLACE VIEW myv1 AS SELECT last_name,email FROM employees; SELECT * FROM myv1; -- 1.插入 INSERT INTO myv1 VALUES('麦克雷','123@qq.com'); -- 2.修改 UPDATE myv1 SET last_name = '天使' WHERE last_name = '麦克雷'; -- 3.删除 DELETE FROM myv1 WHERE last_name = '天使'; -- ---------------视图的要求----------------------------------------- -- 具备以下特点的视图不允许更新 -- ①包含关键字:分组函数,distinct,group by,having,union,union all -- ②常量试图 -- ③select中包含子查询 -- ④join -- ⑤from一个不能更新的视图 -- ⑥where 子句的子查询查询引用了from子句中的表 /* 视图 create view 没有占用空间,只是保存了逻辑 增删改查,一般不增删改 表 create table 占用空间,保存了数据 增删改查 */