数据库之视图详解

一、视图的概念

  视图(子查询):是从一个或多个表导出的虚拟的表,其内容由查询定义。具有普通表的结构,但是不实现数据存储。单表视图一般用于查询和修改会改变基本表的数据多表视图一般用于查询不会改变基本表的数据

【例子】:
  在一个班级里,作为班主任需要知道全班同学所有课程的成绩,便于全面指导;而数学老师只需要知道全班学生的数学成绩就行了。所以视图的一个重要作用就是区分权限。

二、视图的SQL相关操作

/**** 1、创建和删除视图 ****/

// 创建视图(指定某些字段,显示字段时重命名),后面还可以接WHERE进行条件查询
CREATE VIEW v1(b,a) AS SELECT bookName, author FROM t_book;
// 通过视图来查询(只能查询到指定的字段,提高了安全性)
SELECT * FROM v1;

// 删除视图(视图只是一种虚拟的表,删除视图对原来的数据表没有影响)
DROP VIEW IF EXISTS v1;

/**** 2、查看视图 ****/

// 查看视图
desc v1;

// 查看视图基本信息
SHOW TABLE STATUS LIKE 'v1';

// 查看视图详细信息
SHOW CREATE VIEW v1;

/**** 3、修改视图 ****/

// 修改视图
CREATE OR REPLACE VIEW v1(b,p) AS SELECT bookName, price FROM t_book;

ALTER VIEW v1 AS SELECT * FROM t_book;

/**** 4、更新视图 ****/

// 向视图中插入数据(其实就是在表中插入数据)
INSERT INTO v1 VALUES ( "6", "中国历史", "MK", "45", "4");

// 更新视图的数据
UPDATE v1 SET price=54 WHERE id=6;

// 删除视图的数据
DELETE FROM v1 WHERE id=6;

三、视图总结

1、视图的作用

(1)简化了操作,把经常使用的数据定义为视图

  我们在使用查询时,在很多时候我们要使用聚合函数,同时还要 显示其它字段的信息,可能还会需要关联到其它表,这时写的语句可能会很长,如果这个动作频繁发生的话,我们可以创建视图,这以后,我们只需要select * from view就可以啦,这样很方便。

(2)安全性,用户只能查询和修改能看到的数据

  因为视图是虚拟的,物理上是不存在的,只是存储了数据的集合,我们可以将基表中重要的字段信息,可以不通过视图给用户,视图是动态的数据的集合,数据是随着基表的更新而更新。同时,用户对视图不可以随意的更改和删除,可以保证数据的安全性。

(3)逻辑上的独立性,屏蔽了真实表的结构带来的影响

  视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库表被视图分割开来。

2、视图的缺点

(1)性能差

  数据库必须把视图查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是视图的一个简单查询,数据库也要把它变成一个复杂的结合体,需要花费一定的时间。

(2)修改限制

  当用户试图修改视图的某些信息时,数据库必须把它转化为对基本表的某些信息的修改,对于简单的视图来说,这是很方便的,但是,对于比较复杂的试图,可能是不可修改的。

参考:https://blog.csdn.net/buhuikanjian/article/details/53105416

你可能感兴趣的:(数据库(MySQL,Redis))