跳转至

14-视图

基础

是什么

视图是一种虚拟表 ,本身是不具有数据的,占用很少的内存空间

视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。

视图的创建和删除只影响视图本身,不影响对应的基表。但是当对视图中的数据进行增加、删除和 修改操作时,数据表中的数据会相应地发生变化,反之亦然。

为什么

优点

1.操作简单

视图的数据可能来自多张表复杂查询, 用户并不需要关心,数据如何来

2.减少数据冗余

视图本身并不存储数据

3.数据安全

可以是原始表的部分数据

缺点

1.原始表数据结构发生改变

2.视图过多维护成本高

操作

创建视图

创建表

CREATE TABLE IF NOT EXISTS emp (
    id INT(11) AUTO_INCREMENT COMMENT 'id',
    `last_name` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '姓名',
    `age` INT(11) NOT NULL DEFAULT 0 COMMENT '年龄',
    dept_id INT(11) NOT NULL DEFAULT 0 COMMENT '部门id',
    PRIMARY KEY(id)
);

CREATE TABLE IF NOT EXISTS dept (
    id INT(11) AUTO_INCREMENT COMMENT '部门id',
    `name` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '部门名字',
    PRIMARY KEY(id)
);
# 基础表
CREATE VIEW v1 
AS
SELECT * FROM emp;


CREATE VIEW v2 (ID, last_name, age, dept_id)
AS
SELECT * FROM emp;



select * from v2;


# 多表查询
CREATE VIEW v3 
AS
SELECT e.id EID, d.name DNAME 
FROM emp e
INNER JOIN dept d
ON e.dept_id = d.id

在创建视图时,没有在视图名后面指定字段列表,则视图中字段列表默认和SELECT语句中的字 段列表一致。如果SELECT语句中给字段取了别名,那么视图中的字段名和别名相同。

也可以基于视图创建视图

查看视图

# 查看表+视图
SHOW TABLES;

# 查看视图的描述信息
DESC v1;

# 查看视图创建语句
SHOW CREATE VIEW v3;

# 查看视图信息(显示数据表的存储引擎、版本、数据行数和数据大小等)
SHOW TABLE STATUS LIKE 'v1'

视图数据更新

一般是可以 insert update delete

以下情况均不可以更新

Warning
  • 在定义视图的时候指定了“ALGORITHM = TEMPTABLE”,视图将不支持INSERT和DELETE操作;
  • 视图中不包含基表中所有被定义为非空又未指定默认值的列,视图将不支持INSERT操作;
  • 在定义视图的SELECT语句中使用了 JOIN联合查询 ,视图将不支持INSERT和DELETE操作;
  • 在定义视图的SELECT语句后的字段列表中使用了 数学表达式 或 子查询 ,视图将不支持INSERT,也 不支持UPDATE
  • 使用了数学表达式、子查询的字段值;
  • 在定义视图的SELECT语句后的字段列表中使用 DISTINCT 、 聚合函数 、 GROUP BY 、 HAVING 、 UNION 等,视图将不支持INSERT、UPDATE、DELETE;
  • 在定义视图的SELECT语句中包含了子查询,而子查询中引用了FROM后面的表,视图将不支持 INSERT、UPDATE、DELETE;
  • 视图定义基于一个 不可更新视图

修改视图

ALTER VIEW 视图名称
AS
查询语句

删除视图

DROP VIEW IF EXISTS 视图名称;