视图是什么

  视图是一种虚拟存在的表,不会在数据库中实际存在。相比较普通的表,有如下优势

  • 简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集
  • 安全:使用视图的用户只能访问被允许查询的结果集,对表的管理权限并不能限制到某个行某个列,但是通过视图就可以简单地实现
  • 数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响

视图操作

  视图的操作包括创建或者修改视图、删除视图、以及查看视图定义

创建或者修改视图

  创建视图需要有CREATE VIEW的权限,并且对于查询涉及的列有SELECT权限。如果使用CREATE OR REPLACE或者ALTER修改视图,那么还需要该视图的DROP权限

创建视图的语法为:

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]

  VIEW view_name [(column_list)]

  AS select_statement

  [WITH [CASCADED | LOCAL] CHECK OPTION]

修改视图的语法为:

ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]

  VIEW view_name [(column_list)]

  AS select_statement

  [WITH [CASCADED | LOCAL] CHECK OPTION]

以northwind数据库示例中的产品表和供应商表为例创建一个视图:

MySQL的视图定义有一定的限制,如,在FROM关键字后面不能包含子查询。但可以将子查询的内容先定义成一个视图,再对该视图创建视图即可

视图更新

视图的可更新性与视图中查询的定义是有关系的。以下类型的视图是不可更新的

  • 包含以下关键字的sql语句:聚合函数、DISTINCT、GROUP BY、HAVING、UNION或者UNION ALL
  • 常量视图
  • SELECT中包含子查询
  • JOIN
  • FROM一个不能更新的视图
  • WHERE字句的子查询引用了FROM字句中的表

WITH [CASCADED | LOCAL] CHECK OPTION 决定了是否允许更新数据使记录不再满足视图的条件

  • LOCAL 只要满足本视图的条件就可以更新
  • CASCADED 则必须满足所有针对该视图的所有视图的条件才可以更新,默认值为CASCADED

查看视图

在目前的MySQL版本中,已摒弃了使用SHOW VIEWS查看视图的方法,使用SHOW TABLES不仅可以显示表,同时也可显示视图

例如,重新创建一个"产品_供应商_view"视图,并且使用SHOW TABLES查看

CREATE OR REPLACE VIEW 产品_供应商_view AS
SELECT `产品`.`产品ID`, `产品`.`产品名称`, `产品`.`单位数量`, `供应商`.`公司名称`, `供应商`.`城市`
FROM `产品`, `供应商`
WHERE `产品`.`供应商ID` = `供应商`.`供应商ID`

使用SHOW TABLES查看结果:

使用SHOW TABLE STATUS也可查看视图的信息

SHOW TABLE STATUS LIKE '产品_供应商_view' \G

查询定义视图的语句

视图数据查询

视图"产品_供应商_view"的数据结构如图所示

现在通过视图查询出一些数据

也可以使用GROUP BY等条件限制查询

视图数据修改

使用UPDATE语句可对视图中的数据进行修改。如


可以看到,视图中的第一条记录中的产品名称已变为"果粒橙",那么视图中的数据改变了,源表中的数据是不是也改变了呢?

事实上源表中的数据也发生了变化

视图数据删除

既然视图中的数据可以修改,而且源表也随之变化。那么,如果删除视图中的数据,源表会如何变化呢

由于此视图是由产品表和供应商连接查询而创建的,所以为了保证数据的完整性,是不能够删除视图中的记录

删除视图

用户可以一次删除一个或多个视图,但要求用户必须有该视图的DROP权限

语法:DROP VIEW [IF EXISTS] view_name [, view_name]...[RESTRICT | CASCADE]

例如,要删除上文中创建的视图"产品_供应商_view"

此时,视图"产品_供应商_view"已被删除

MySQL视图了解的更多相关文章

  1. Mysql 视图 游标 触发器 存储过程 事务

    Mysql 视图 触发器 存储过程 游标 游标是从数据表中提取出来的数据,以临时表的形式存放在内存中,在游标中有一个数据指针,在初始状态下指向的是首记录,利用fetch语句可以移动该指针,从而对游标中 ...

  2. Mysql视图的作用及其性能分析

    定义:视图是从一个或几个基本表导出的表,它与基本表不同,是一个虚表. 作用: 1.简化操作,不用进行多表查询. 2.当不同种类的用用户共享同一个数据库时,非常灵活,(用户以不同的 方式看待同一数据. ...

  3. MYSQL视图的学习笔记

    MYSQL视图的学习笔记,学至Tarena金牌讲师,金色晨曦科技公司技术总监沙利穆 课程笔记的综合. 视图及图形化工具   1.       视图的定义 视图就是从一个或多个表中,导出来的表,是一个虚 ...

  4. 深入解析MySQL视图view

    阅读目录---深入解析MySQL视图view 创建视图 查看视图 视图的更改 create or replace view alter DML drop 使用with check option约束 嵌 ...

  5. MySQL视图view/存储过程和函数的使用

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545 } p. ...

  6. MySQL视图更新

    昨天在写美团2019秋招笔试题的时候遇到了关于视图是否能更新的问题,突然感觉这个问题之前复习的时候重点关注过,但是却又想不全.今天特地搜了一些资料总结一下.本文主要说明视图的更新限制,如需关于视图的更 ...

  7. 一个MySQL视图的优化过程

    1.需要优化的sql 最近做一个基于.net mvc和MySQL的仓储系统的优化工作,遇到了一个执行特别慢的SQL语句,经过一番折腾,终于搞定啦,分享一下过程.问题就是下面这个家伙: create o ...

  8. mysql视图和临时表的区别

    视图 视图是由从数据库的基本表中选出来的数据组成的逻辑窗口,它与基本表不同的是,视图是一个虚表.数据库中只存放视图的定义,而不存放视图包含的数据,这些数据仍存放在原来的基表中.所以基表中的数据如果发生 ...

  9. MySQL视图(view)

    一.基本概念 视图是一个虚拟表,是sql的查询结果,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据,在使用视图时动态生成.视图的数据变化会影响到基表,基表的数据变化也会影响到视图 ...

  10. 11.Mysql视图

    11.视图11.1 什么是视图 视图view是一张虚拟表,它不存储数据,数据仍在表里,视图由一条查询表的select语句创建,视图只存储select语句. 可以将复杂的查询语句封装成视图,用户可以从视 ...

随机推荐

  1. MapReduce执行流程及程序编写

    MapReduce 一种分布式计算模型,解决海量数据的计算问题,MapReduce将计算过程抽象成两个函数 Map(映射):对一些独立元素(拆分后的小块)组成的列表的每一个元素进行指定的操作,可以高度 ...

  2. React 实践项目 (二)

    React在Github上已经有接近70000的 star 数了,是目前最热门的前端框架.而我学习React也有一段时间了,现在就开始用 React+Redux 进行实战! React 实践项目 (一 ...

  3. 快学Scala之特质

    一个Scala类可以继承多个特质(trait), 特质可能会要求使用它们的类支持某个特定特性, 与Java接口不同, Scala特质可以给出这些特质的缺省实现. 要点如下: Scala中类只能继承一个 ...

  4. 网站waf检测

    WAFW00F WAFW00F识别和指纹Web应用防火墙(WAF)产品. 其工作原理是首先通过发送一个正常http请求,然后观察其返回有没有一些特征字符,若没有在通过发送一个恶意的请求触发waf拦截来 ...

  5. Java 实现FTP上传和下载

    1. 目前网上开源的FTP Client主要有JFTP.FTP4.edtFtpjJ和Apache.FTPClient. 2. jftp地址:http://www.jmethods.com/ 3. ed ...

  6. Tomcat解压版配置详解(Tomcat8示例)

    注:请在JDK安装后操作以下内容 1.  下载Tomcat解压缩安装包 http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.0.45/bin/apac ...

  7. php与MySQL(基本操作)

    PHP连接 MySQL 在我们访问 MySQL 数据库前,我们需要先连接到数据库服务器,连接服务器,我们使用mysqli_connect()函数. 在使用这个函数之前,我们首先来看一下这个函数的语法: ...

  8. 微信小程序 服务器端生成用户登陆环节的 3rd_session

    一.环境: CentOS 6.8 nginx 1.8.0 php 7.0.10 二.背景 最近在开发一个微信小程序,不可避免的涉及到登陆的环节,登录时序图如下: 通过 wx.login() 获取到用户 ...

  9. tomcat内存溢出之PermGen space

    线上一台web服务器不能正常访问了,检查了一下,tomcat进程还在,就是web不能正常访问,重启一下tomcat恢复正常,查询日志,发现提示内存溢出,如下图: java.lang.OutOfMemo ...

  10. Unity Shader入门教程(四)反射光斑的实现

    本节内容介绍PhongModel(也就是上文说的反射光的计算模型),采用的计算方法是BlinPhong(也即是用视线方向V+光源方向L的和,与N做点积,随后幂化得到高光反射系数)下图采用了csdn博文 ...