-- 视图
/*
含义:虚拟表,和普通的表一样使用
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 占用空间,保存了数据 增删改查
*/