08-视图

image-20200812132737977

1.1 概念

视图,虚拟表,从一个表或多个表中查询出来的表,作用和真实表一样,包含一系列带有行和列的数据。视图中,用户可以使用 SELECT 语句查询数据,也可以使用 INSERT、UPDATE、DELETE 修改记录,视图可以使用户操作方便,并保障数据库系统安全。

1.2 视图特点

  • 优点

    • 简单化,数据所见即所得。
    • 安全性,用户只能查询或修改他们所能见到得到的数据。
    • 逻辑独立性,可以屏蔽真实表结构变化带来的影响。
  • 缺点

    • 性能相对较差,简单的查询也会变得稍显复杂。
    • 修改不方便,特变是复杂的聚合视图基本无法修改。

1.3 视图的创建

语法:CREATE VIEW 视图名 AS 查询数据源表语句;

1.3.1 创建视图

1
2
3
4
# 创建视图: 从员工表中创建姓、名、邮箱、手机的视图 t_empinfo
CREATE VIEW t_empinfo
AS
SELECT FIRST_NAME, LAST_NAME, EMAIL, PHONE_NUMBER FROM t_employees;

1.3.2 使用视图

1
2
3
4
5
6
# 查询 t_empInfo 视图中编号为 101 的员工信息
SELECT * FROM t_empInfo where EMPLOYEE_ID = '101';

# 只能修改视图中的数据,修改会修改原表
UPDATE t_empinfo SET EMAIL='Kings@xxx.com' WHERE FIRST_NAME='Steven' AND LAST_NAME='Markle';
SELECT * FROM t_employees WHERE FIRST_NAME='Steven';

注意:1.修改的时候只能修改视图中的数据;2.修改会修改原表

1.4 视图的修改

  • 方式一:CREATE OR REPLACE VIEW 视图名 AS 查询语句

  • 方式二:ALTER VIEW 视图名 AS 查询语句

1.4.1 修改视图

1
2
3
4
5
6
7
8
9
# 方式 1:如果视图存在则进行修改,反之,进行创建
CREATE OR REPLACE VIEW t_empInfo
AS
SELECT EMPLOYEE_ID,FIRST_NAME,LAST_NAME,EMAIL,SALARY,DEPARTMENT_ID FROM t_employees;

# 方式 2:直接对已存在的视图进行修改
ALTER VIEW t_empInfo
AS
SELECT EMPLOYEE_ID,FIRST_NAME,LAST_NAME,EMAIL,SALARY from t_employees;

1.5 视图的删除

语法:DROP VIEW 视图名

1.5.1 删除视图

1
2
# 删除t_empInfo视图
DROP VIEW t_empInfo;
  • 注意:删除视图不会影响原表

1.6 视图的注意事项

注意:

  • 视图不会独立存储数据原表发生改变,视图也发生改变没有优化任何查询性能
  • 如果视图包含以下结构中的一种,则视图不可更新
    • 聚合函数的结果
    • DISTINCT 去重后的结果
    • GROUP BY 分组后的结果
    • HAVING 筛选过滤后的结果
    • UNION、UNION ALL 联合后的结果

08-视图
https://janycode.github.io/2017/06/18/05_数据库/01_MySQL/08-视图/
作者
Jerry(姜源)
发布于
2017年6月18日
许可协议