侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

MySQL入门教程(七)之视图

数据库  /  管理员 发布于 6年前   162

相关阅读:

MySQL入门教程(五)之表的创建、修改和删除

视图是从一个或多个表中导出来的虚拟表。视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据。

1、视图简介

1.1 视图的含义

视图是从一个或多个表中导出来的虚拟表,还可以从已经存在的视图的基础上定义。
数据库中只存放视图的定义,而不存放视图中的数据,这些数据仍存放在原来的表中。一旦表中的数据发生变化,显示在视图中的数据也会相应变化。
MySQL的视图并不支持输入参数的功能,即交互性上较差,但对于变化不是很大的操作,使用视图可以很大程度上简化用户的操作。

1.2 视图的作用

视图起着类似于筛选的作用,具体可归纳为

(1)所见即所需,使操作简单化
(2)通过视图,用户只能查询和修改指定的数据,从而限制了用户的权限,增加了数据的安全性
(3)视图可以屏蔽原有表结构变化带来的影响,从而提高了表的逻辑独立性。

2、创建视图

MySQL中,创建视图是通过Creat View语句实现的,具体为


其中,Algorithm为视图选择的算法;属性清单指定了视图中各个属性的名词,默认情况下与Select语句中查询的属性相同;Select语句是一个完整的查询语句,表示从某个表中查出某些满足条件的记录并将这些记录导入到视图中;With Check Option表示更新视图时要保证在该视图的权限范围之内,CASCADED表示更新视图时要满足所有相关视图和表的条件,为默认值,Local表示更新视图时要满足该视图本身的定义即可;注意在使用创建视图时最好加上With Check Option,并选取默认的CASCADED参数。从而保证从视图派生出来的新视图在更新后可以考虑其父视图的约束条件,即更严谨。

(1)关于Algorithm中的三个选项,Undefined选项表示MySQL将自动选择所要使用的算法,Merge选项表示将使用视图的语句与视图定义合并起来,使得视图定义的某一部分代替语句的对应部分,Temptable选项表示将视图的结果存入临时表,然后使用临时表执行语句。

(2)需要注意的是,在创建视图之前,需要检查是否具有Create view的权限和查询涉及的列的Select权限,这些权限保存在MySQL数据库下面的user表中,可以适用select语句查询,具体为

select select_priv, create_view_priv from mysql.user where user='用户名'

其中,用户名参数表示要查询哪个用户是否拥有Drop权限,在我的系统中,只有root用户。

下面是一个从department表和worker表上创建一个名为worker_view1的视图的案例


3、查看视图

查看视图必须要有show view的权限,同样保存在user表中。

查看视图的方法包括describe语句、show table status语句、show create view语句和查询information_schema数据库下的views表等。

3.1 describe语句查看简单信息

查看视图的describe语句和查看表的语句是一样的,因为视图是一种特殊的表,基本形式为

describe 视图名;

3.2 show table status语句查看基本信息

基本形式为

Show Table Status Like ‘视图名';

3.3 show create view语句查看详细信息

基本形式为

Show create view 视图名;

3.4 在views表中查看详细信息

MySQL中,所有视图的定义都存在information_schema数据库下的views表中,查询此表即可查看到数据库中所有视图的详细信息。

基本形式为

select * from information_schema.views;

其中*表示查询所有的列的信息。

显然用此语句查看到的是所有的视图,不方便查阅,一般查询详细信息时用3.3法即可。

4、修改视图

当基本表的某些字段发生改变时,有必要修改视图的定义来保持视图和基本表之间的一致性。

4.1 Create or replace view语句

此语句很好用,在存在视图情况下可对视图进行修改,在没有视图情况下,可以创建视图,具体语法为


实际上,感觉此语句就是重新定义了个视图并覆盖了原始图。<�"///kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxoMyBpZD0="42-alter语句">4.2 Alter语句

回顾前面,alter语句不仅可以创建索引,修改表的定义,在此处,还可以修改视图的定义。
基本形式为

5、更新视图

更新视图是指通过视图来插入、更新和删除表中的数据。
更新视图时,只能更新权限范围内的数据。
实际上对视图的更新最后都是实现在基本表上的。

注意以下情况不能更新视图:

(1)视图中包含sum(),count(),max()和min()等函数

(2)视图中包含union,union all,distinct,group by和having等关键字

(3)常量视图,即视图中的某个字段时常量类型

(4)视图中的select中包含子查询

(5)由不可更新的视图导出的视图

(6)创建视图时,algorithm选择了temptable类型,即系统默认临时表是不可更新的

(7)视图对应的表上存在没有默认值的列,且该列没有包含在视图中。因为,在更新视图时,这个没有默认值的记录将没有值插入,也没有NULL值插入,系统不允许这种情况出现

由于视图的更新存在很多限制,一般,最好把视图作为查询数据的虚拟表,而不要通过视图来更新数据,很容易造成更新失败。

6、删除视图

删除视图只会删除视图的定义,并不会删除数据。DROP View语句可用来删除视图,但用户必须拥有drop的权限,具体操作为

drop view [if exists] 视图名列表 [restrict|cascade]

其中,if exists用来判断视图存在,存在才执行;在视图名列表中不同视图名称之间通过逗号隔开。

以上所述是小编给大家介绍的MySQL入门教程(七)之视图,希望对大家有所帮助!


  • 上一条:
    mysql登录报错提示:ERROR 1045 (28000)的解决方法
    下一条:
    MySQL入门教程(五)之表的创建、修改和删除
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 分库分表的目的、优缺点及具体实现方式介绍(0个评论)
    • DevDB - 在 VS 代码中直接访问数据库(0个评论)
    • 在ubuntu系统中实现mysql数据存储目录迁移流程步骤(0个评论)
    • 在mysql中使用存储过程批量新增测试数据流程步骤(0个评论)
    • php+mysql数据库批量根据条件快速更新、连表更新sql实现(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2017-06
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-01
    • 2018-05
    • 2018-10
    • 2018-11
    • 2020-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2021-02
    • 2021-04
    • 2021-07
    • 2021-08
    • 2021-11
    • 2021-12
    • 2022-02
    • 2022-03
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-07
    • 2023-08
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-03
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客