<MySQL>入门五 视图

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

 

原文地址:https://www.cnblogs.com/mapleins/p/10108512.html