MySQL 基础 ———— 视图的应用与总结

引言

视图是一种虚拟表,和普通表的使用是一样的,视图的一大特点就是“临时性”,是通过表动态生成的数据,只保存SQL逻辑,不保存查询结果。

视图在实际生产中主要有两种应用场景:

1、多个地方用到同样的查询结果;

2、该查询使用的SQL比较复杂。

下面,我们来总结一下这个在开发中经常会用到的知识点。

一、视图的优势

首先,视图并不能提高SQL的性能,它的作用在于更好的组织数据。优势有以下几点:

1、重用SQL语句。

2、简化复杂的SQL操作,隐藏一部分SQL细节。

3、保护数据,提高安全性。

二、视图的创建

视图的创建和表一样,也用到了 CREATE 关键字。

CREATE
    [OR REPLACE]
    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    [DEFINER = user]
    [SQL SECURITY { DEFINER | INVOKER }]
    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]

忽略可选部分,则:

CREATE 视图名 AS 查询语句

查询语句可以是一个普通表,或者是其他视图。

CREATE OR REPLACE VIEW limit_emp AS 
SELECT 
  emp_id 员工编号,
  emp_name 姓名,
  salary 工资,
  dept_id 部门编号 
FROM
  emp ;

查看和使用视图的方式和普通表完全一样:

SELECT * FROM limit_emp;

三、查看已创建的视图

创建好视图之后,如何查看已创建的视图呢?如果使用Navicat 或 SQLyog,可以直接在左侧的 “表文件夹”下方的“视图文件夹”查看:

如果希望使用SQL来查看,因为MySQL认为视图也是一种表,所以可以使用如下语句:

SHOW TABLES;

如果想仅查询出视图,那么可以执行:

SHOW TABLE STATUS WHERE COMMENT = 'view';

或者,直接查看指定名称的视图:

SHOW CREATE VIEW limit_emp;

 

四、视图的修改

视图的修改可有两种方式:

1、不确定是否已经存在该视图,可创建并替换,CREATE OR REPLACE VIEW:

CREATE OR REPLACE VIEW limit_emp
AS
SELECT * FROM emp

2、确定已经存在了该视图,直接更新 ALTER  VIEW:

ALTER VIEW limit_emp
AS
SELECT * FROM emp

五、更新视图数据

视图中的数据是允许修改的,如果对视图执行 INSERT 、UPDATE 、DELETE 不仅对视图本身有效果,其背后的表也是会有影响的。但在实际生产中,往往会严格控制视图的更新操作,且会将视图设置为只读模式,即只用视图来简化查询,避免通过视图来对原表进行修改。

虽然视图可以更新,但是如果创建视图的语句中包含了以下这些关键字,那么同样无法执行更新:

1、分组函数、DISTINCT、GROUP BY 子句、HAVING、UNION。

2、常量视图

3、SELECT 语句中包含子查询

4、JOIN 子句

5、FROM 一个不能更新的视图

6、WHERE 子句的子查询引用了 FROM 子句中的表

六、视图的删除

DROP VIEW 视图名, 视图名, ...;

七、视图和表的比较

  创建语法关键字 物理空间占用 使用
CREATE TABLE 占用 增删改查
视图 CREATE VIEW 不占用 一般只做查询
发布了191 篇原创文章 · 获赞 280 · 访问量 52万+

猜你喜欢

转载自blog.csdn.net/u014745069/article/details/103437710