视图:view,是一种有结构(有行有列)但是没有结果(结构中不真实的存放数据)的虚拟表,虚拟表的结构来源不是自己定义,而是从对应的基表中产生(视图的数据来源);

视图意义:

  1、视图可以节省SQL语句:将一条复杂的查询语句使用视图保存,以后可以直接对视图进行操作。

  2、数据安全:视图的操作是主要针对查询的,如果对视图结构进行删除处理,不会影响基表数据(相对安全)。

  3、视图往往是在大项目中使用,而且是多系统使用。(想想现在的微信,有多少项目是基于微信开发的,但是微信不可能提供数据库基表的,但是可以给提供视图,因为视图在查询时候是可以提供自己想给的select语句的,比如:我提供没有查询学号的select语句,封装到视图里面。)

    可以对外提供有用的数据,但是隐藏关键(无用)的数据。

  4、视图可以对外提供友好型:不同的视图提供不同的数据,好像是对外专门设计的。(比如与其他公司合作,可以专门提供不同公司所需要的不同数据,用视图进行封装,这个与第三条有点类似。)

  5、视图可以更好(更容易)的进行权限控制。

一、创建视图:

  格式:

    create view 视图名字 as select 语句;

  查询语句可以是普通查询,连接查询,联合查询,子查询。

  创建单表视图:基表只能有一个

  创建多表视图:基表至少有两个

二、查看视图

  查看视图:查看视图结构

    视图是一张虚拟表:表的所有的查看方式都适用于视图:show tables [like] 视图名字;desc 视图名字; show create 视图名字;

    视图比表还是有一个关键字的区别:view。查看“表(视图)”的创建语句的时候可以用view关键字

  视图一旦创建:系统就会在视图对应的数据库文件夹下创建一个对应的结构文件:frm文件。

三、使用视图

  视图主要是为了查询,将视图当做表一样查询就可以了。

  视图的执行:其实本质就是执行封装的select语句。(可能有疑问,我们还不如去查询基表呢,但是有时候我们写select语句会很长,占一两页,这样我们就可以用视图,进行语句的复用,但是视图不仅仅只有这一个功能,它还有其他功能)

四、修改视图

  视图本身是不可以修改的,但是视图的来源是可以修改的。

  修改视图:修改视图本身的来源语句(select语句)

  格式:

    alter view 视图名字  as 新的select语句;

五、删除视图

  格式:

  drop view 视图名字(删除视图一般不用,一个复杂select语句是不容易写的,创建这样的视图后,如果该select语句没有保存,那么就玩完了。)

六、视图算法:系统对视图以及外部查询视图的select语句的一种解释方式

  视图算法分为三种:

    1、undefined:未定义(默认的),这不是一种实际使用的算法,是一种推卸责任的算法,告诉系统,视图没有定义算法,系统自己看着办。

    2、temptable:临时表算法:系统应该先执行视图的select语句,后执行外部查询语句。

    3、merge:合并算法:系统应该先将视图对应的select语句与外部查询视图的select语句进行合并,然后执行(效率高)

    算法指定:在创建视图的时候

    格式:

      create algorithm = 指定算法  view 视图名字 as select 语句;

  视图算法选择:如果视图的select语句中会包含一个查询子句,而且很有可能顺序比外部的查询语句要靠后,一定要使用算法temptable,其他情况可以不指定(默认就可以了)

 视图对数据的操作:

  视图是可以进行数据的操作,但是有很多的限制。将数据直接在视图上进行操作。

一、新增数据(如果给别人视图,一般是不会给他人操作基表权限的)

  数据的新增,就是直接对视图进行数据的新增

    1、多表视图不能进行新增

    2、可以向单表视图插入数据:但是视图中包含的字段必须有基表中所有不能为空(或者没有默认值)的字段。

    3、向基表中插入数据

二、删除数据

  1、多表视图不可以删除(连接的视图)

  2、单表视图的删除

 

三、更新数据

  一、单表视图与多表视图都是可以修改成功的。

    更新限制:with check option,如果对视图在新增的时候,限定了某个字段有限制,那么在对视图进行数据更新操作时候,系统会进行验证,要保证更新之后,数据依然可以被实体查询出来,否则不让更新。

    

MySQL(三)视图的更多相关文章

  1. MySQL(三)

    MYSQL(三) 上一章给大家说的是数据库的视图,存储过程等等操作,这章主要讲索引,以及索引注意事项,如果想看前面的文章,url如下: MYSQL入门全套(第一部) MYSQL入门全套(第二部) 索引 ...

  2. mysql view(视图)

    一,什么是视图 视图是存放数据的一个接口,也可以说是虚拟的表.这些数据可以是从一个或几个基本表(或视图)的数据.也可以是用户自已定义的数据.其实视图里面不存放数据的,数据还是放在基本表里面,基本表里面 ...

  3. 第五章 MySQL事务,视图,索引,备份和恢复

    第五章 MySQL事务,视图,索引,备份和恢复 一.事务 1.什么是事务 事务是一种机制,一个操作序列,它包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求.要么都执行 ...

  4. MySQL之视图、触发器、事务、存储、函数、流程控制

    一.视图 视图就是一个虚拟表,我们把复杂的sql语句后看到的虚拟表封装起来,给他取个名字,当我们下次使用的时候,就不用再去写复杂的sql语句,直接调用封装后的视图名字,就可以得到我们想要的表,然后就可 ...

  5. MySQL之视图、触发器、事务、存储过程、函数 流程控制

    MySQL之视图.触发器.事务.存储过程.函数 阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 MySQL这个软件想将数据处理的所有事情,能够在mysql这个层面上全部 ...

  6. 数据库MySQL之 视图、触发器、存储过程、函数、事务、数据库锁、数据库备份、事件

    数据库MySQL之 视图.触发器.存储过程.函数.事务.数据库锁.数据库备份.事件 浏览目录 视图 触发器 存储过程 函数 事务 数据库锁 数据库备份 事件 一.视图 1.视图概念 视图是一个虚拟表, ...

  7. MySQL 的视图、触发器、事务、存储过程、函数

    MySQL 的视图.触发器.事务.存储过程.函数   阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句 ...

  8. MySQL的视图和索引

    MySQL的视图 简单来说MySQL的视图就是对SELECT 命令的定义的一个快捷键,我们查询时会用到非常复杂的SELECT语句,而这个语句我们以后还会经常用到,我们可以经这个语句生产视图.视图是一个 ...

  9. day 40 MySQL之视图、触发器、事务、存储过程、函数

    MySQL之视图.触发器.事务.存储过程.函数   阅读目录 一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 MySQL这个软件想将数据处理的所有事情,能够在mysql这个层面上 ...

  10. mysql第五篇 : MySQL 之 视图、触发器、存储过程、函数、事物与数据库锁

    第五篇 : MySQL 之 视图.触发器.存储过程.函数.事物与数据库锁 一.视图 视图是一个虚拟表(非真实存在的),其本质是‘根据SQL语句获取动态的数据集,并为其命名‘ ,用户使用时只需使用“名称 ...

随机推荐

  1. JavaScript图形实例:图形放大镜效果

    1. 基本四瓣花型图案 根据四瓣花卉线的参数方程: t= r*(1+sin(12*θ)/5)*(0.5+sin(4*θ)/2); x=t*cos(θ)); y=t*sin(θ)); 编写如下的HTML ...

  2. 多线程高并发编程(12) -- 阻塞算法实现ArrayBlockingQueue源码分析(1)

    一.前言 前文探究了非阻塞算法的实现ConcurrentLinkedQueue安全队列,也说明了阻塞算法实现的两种方式,使用一把锁(出队和入队同一把锁ArrayBlockingQueue)和两把锁(出 ...

  3. JAVA设计模式 3【创建型】理解工厂模式与抽象工厂模式

    上一节我们已经学习了原型模式,稍微复习一下:通过重写Object 类的clone() 方法实现浅克隆,浅克隆也要实现Cloneable 标记接口.而深克隆则是将对象通过序列化和反序列化 的方式进行创建 ...

  4. mybatis缓存之一级缓存(二)

    这篇文章介绍下mybatis的一级缓存的生命周期 一级缓存的产生 一级缓存的产生,并不是看mappper的xml文件的select方法,看下面的例子 mapper.xml <select id= ...

  5. SpringBoot--日期格式化

    1.为了统一转转,可以使用日期格式化类 package com.example.demo.resource; import com.fasterxml.jackson.datatype.jsr310. ...

  6. Nginx使用upstream实现负载均衡

    如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...

  7. 如何用好 IDEA ,Java 撸码效率至少提升 5 倍?

    以前的Java项目中,充斥着太多不友好的代码:POJO的getter/setter/toString:异常处理:I/O流的关闭操作等等,这些样板代码既没有技术含量,又影响着代码的美观,Lombok应运 ...

  8. Jmeter(十四) - 从入门到精通 - JMeter定时器 - 下篇(详解教程)

    1.简介 用户实际操作时,并非是连续点击,而是存在很多停顿的情况,例如:用户需要时间阅读文字内容.填表.或者查找正确的链接等.为了模拟用户实际情况,在性能测试中我们需要考虑思考时间.若不认真考虑思考时 ...

  9. unity position 记录

    localPosition为自身矩形中心点(Pivot)与其父节点矩形中心点(Pivot)的相对位置坐标,与自身锚点(Anchors)无关.anchoredPosition为矩形中心点(Pivot)与 ...

  10. python-----内存管理机制

    一.深浅拷贝的区别 深浅拷贝一般是在列表嵌套列表的情况下去讨论 浅拷贝:只拷贝列表中对象的引用,嵌套列表中的数据是不会进行全部拷贝的 深拷贝:会把对象里面所有的数据都拷贝一份,不再只拷贝对象的引用,会 ...