Mysql视图

Mysql视图教程

视图是一个虚拟的表,它是不占用内存空间的。它的内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行的数据。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

在本章讲解的时候用以下两张表,学生表和班级表

CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `stu_no` int(11) DEFAULT NULL, `stu_name` varchar(255) DEFAULT NULL, `age` int(11) DEFAULT NULL, `class_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `class` ( `id` int(11) NOT NULL AUTO_INCREMENT, `class_name` VARCHAR(200) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

我们为两张表插入数据

INSERT INTO student (`id`,`stu_no`,`stu_name`,`age`,`class_id`) VALUES (1,1001,'小明',17,1), (2,1002,'小红',16,1), (3,1003,'小军',18,2), (4,1004,'小亮',19,2); INSERT INTO class (`id`,`class_name`) VALUES (1,'一年级一班'), (2,'一年级二班');

视图详解

语法

CREATE VIEW [视图名] AS [SELECT 语句];

描述

关键字 描述
CREATE 创建视图时必须要有 CREATE 关键字
VIEW VIEW 表示的是创建的视图
视图名 视图名,和表名类似,是唯一的,不能和现有的库里面的表或者视图同名
SELECT 语句 视图创建成功时里面的数据和 SELECT 语句里面的查询结果一样

案例

单表视图

CREATE VIEW view_student AS SELECT id,stu_no,stu_name,age,class_id FROM student;

我们用 show tables 语句可以看到视图出现了

17 创建视图.png

我们查询视图结果

-- 嗨客网(www.haicoder.net) SELECT * FROM view_student;

运行结果如下

18 查询单表视图.png

多表视图

-- 嗨客网(www.haicoder.net) CREATE VIEW view_student_class AS SELECT student.id,stu_no,stu_name,age,class_id,class_name FROM student,class where student.class_id = class.id;

我们用 show tables 语句可以看到运行结果如下

19 创建多表视图.png

我们查看视图结果

-- 嗨客网(www.haicoder.net) SELECT * FROM view_student_class;

运行结果如下

20 多表视图查询.png

删除视图

如果我们不想要创建的视图了,想删除,该怎么办呢?我们可以使用 drop 将视图删除。

DROP VIEW 视图名;

例子如下,我们删除 view_student 这个视图

-- 嗨客网(www.haicoder.net) DROP VIEW view_student;

我们执行 show 语句查看

21 删除视图.png

视图意义

我们既然已经有表了,为啥还需要视图呢?其实我们上面的例子只是简单的介绍了一下视图是怎么使用的,它的存在有以下意义

  1. 它可以简化复杂的查询语句,比如我们多表查询的时候,我们只需要查询视图里面的数据即可,不需要再写复杂的语句将多张表关联。
  2. 保护数据安全,视图里面,我们可以只访问表里面的部分数据,让一些敏感的数据不对用户展示。
  3. 如果数据库里面的字段或者格式变了,视图里面没有涉及到那些变化,那么对于视图来说是无感知到。

Mysql视图总结

视图在我们平时开发过程中有着很重要的意义,它可以简化开发人员的查询操作,将复杂的联结查询用视图代替。它可以保护数据安全,保护一些数据不让用户看到。