NoteOfMySQL-08-视图

视图是从一个表或多个表中导出的表,是一种虚拟存在的表,不占用存储空间。视图可以使用户的操作更方便,并且可以保障数据库系统安全性。

1. 视图概述

视图中保存的仅仅是一条select语句,其数据源自数据库表或其他视图。视图的作用类似于筛选,且不占用存储空间。

2. 视图工作机制

当调用视图时才执行视图中的SQL语句,进行数据读取操作。视图中的内容没有存储,而是在视图被引用时才派生数据,即即时引用。这样的好处是不需要维护视图的内容。

1. 创建视图

创建视图需要具有CREATE VIEW权限,和查询涉及的列的SELECT权限。

create [algorithm = {undefined | merge | temptable}]
view view_name [(state1, state2...)]
as 查询语句
[with [cascaded | local] check option];

参数 说明 algorithm undefined表示MySQL自动选择使用的算法;merge表示将使用视图的语句与视图的定义合起来,使视图定义的某部分取代语句的对应部分;temptable表示将视图的结果存入临时表,然后使用临时表执行语句 查询语句 一个完整的查询语句 cascaded、local cascaded表示更新视图时满足所有相关视图和表的条件,local表示更新视图时满足该视图本身的定义条件即可 with check option 更新视图时保证在该视图的权限范围之内

  • 在定义中引用的表或视图必须存在,但创建视图后可以舍弃定义引用的表或视图。可以使用check table语句检查视图定义引用的表或视图是否存在。
  • select语句不能包含from字句中的子查询
  • select语句不能引用系统或用户变量
  • select语句不能引用预处理语句参数
  • 在定义中不能引用temporary表,不能创建temporary视图

2. 删除视图

删除视图需要具有drop权限。

drop view [if exsts] view_name[, view_name2...] [restrict | cascade];

3. 查看视图

查看视图需要具有show view权限,查看视图指查看数据库中已经存在的视图的定义。

-- 法一
[describe | desc] view_name;
-- 法二
show table status like 'view_name';
-- 法三
show create view 'view_name';
-- 法四
select * from information_schema.views where table_name='view_name';

4. 修改视图

修改视图指修改数据库中已经存在表的定义,当基本表的某些字段发生改变时们可以通过修改视图来保持视图与基本表一致。

[create or replace | alter] [algorithm = {undefined | merge | temptable}] view view_name [{state1, state2...}]
as 查询语句
[with [cascaded | local] check option];

5. 更新视图数据

对视图的更新其实就是对表的更新,更新视图是指通过视图来插入、更新、删除表中的数据。因为视图是一个虚拟表,没有数据,视图更新都是通过转化到基本表来更新。

  • 视图中包含sum、count等聚集函数。
  • 视图中包含union、union all、distinct、groud by、having等关键字。
  • 常量视图,如:CREATE VIEW view_now AS select now()。
  • 视图中包含子查询。
  • 由不可更新的视图导出的视图。
  • 创建视图时algorithm为temptable类型。
  • 视图对应的表上存在没有默认值的列,而该列没有包含在视图里。
  • with check option值为1时为local视图,表示更新视图时要满足该视图本身的定义条件才能顺利执行;值为2时为cascaded视图,表示更新视图时要满足所有视图的检查条件的更新语句才能顺利执行。

Original: https://www.cnblogs.com/bpf-1024/p/14059663.html
Author: 步平凡
Title: NoteOfMySQL-08-视图

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/572726/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java基础

    环境 并非所有的计算机都可以开发java程序,java程序的开发与运行需要专门的环境。 因为java语言的程序是运行在java所专有的系统中。 要运行java程序我们需要在操作系统…

    Java 2023年6月7日
    0132
  • Dubbo与SpringBoot整合

    1.选择ZooKeeper作为注册中心 在linux环境中使用docker安装ZooKeeper //拉取zookeeper镜像 docker pull zookeeper//启动…

    Java 2023年6月9日
    069
  • java C 类自动转换规则

    C类型转换规则 posted @2018-05-05 21:34 zengkefu 阅读(194 ) 评论() 编辑 Original: https://www.cnblogs.c…

    Java 2023年5月29日
    084
  • 使用easyExcel注意事项

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月5日
    086
  • 1_day01_操作系统安装

    操作系统安装 内容介绍 1.制作U盘启动器 2.备份驱动 3.安装操作系统 4.驱动更新 5.依赖库检测 6.系统漏洞修复 7.系统布局优化 一、制作U盘启动器 1.1 下载老毛桃…

    Java 2023年6月8日
    084
  • 设计模式 22 策略模式

    策略模式(Strategy Pattern)属于 行为型模式 生活中会面临很多抉择,每一个抉择会导向不同的结果,这时就会出现策略的选择。 程序中也是一样,而且更加复杂,生活中的抉择…

    Java 2023年6月6日
    085
  • Linux安装以及JDK,Tomcat,mysql环境的搭建

    Linux操作系统以及JDK,tomcat,mysql环境的安装 linux特点 linux是一种&#x5…

    Java 2023年6月6日
    090
  • 1.Spring jar包依赖

    <dependency> <groupid>commons-cli</groupid> <artifactid>commons-cl…

    Java 2023年6月13日
    097
  • 查找Java maven项目,和reactJS项目的license

    ReactJS: npm install -g license-checker npm install -g yui-lint license-checker –pro…

    Java 2023年5月29日
    063
  • 正则表达式的点星匹配

    1 # -*- coding: utf-8 -*- 2 """ 3 Created on Mon Apr 20 22:51:44 2020 4 5 @…

    Java 2023年6月6日
    0108
  • Java SimpleDateFormat[转]

    [补充] [转] http://stackoverflow.com/questions/2603638/why-cant-this-simpledateformat-parse-t…

    Java 2023年5月29日
    0102
  • 事务的隔离级别与MVCC

    提到数据库,你多半会联想到事务,进而还可能想起曾经背得滚瓜乱熟的ACID,不知道你有没有想过这个问题,事务有原子性、隔离性、一致性和持久性四大特性,为什么偏偏给隔离性设置了级别? …

    Java 2023年6月7日
    094
  • 电脑常见快捷键

    一、键盘功能键: Tab键:切换菜单和空四个格子; Shift键:组合键;(可以与F1,F2,或者1,2,3等等组合打出不一样的符号) Ctrl键:控制键;(eg:ctrl+shi…

    Java 2023年6月15日
    084
  • 好书推荐之JAVA并发编程扛鼎之作:《Java并发编程实战》、《Java并发编程的艺术》

    (pdf文档下载见文末) 大佬推荐 《 Java 并发编程实战》,是一本 完美的 Java 并发参考手册。书中从并发性和线程安全性的基本概念出发,介绍了如何使用类库提供的基本并发构…

    Java 2023年6月15日
    087
  • 大二后台生,一年的练习生涯云收雨散,余波未平….

    大家好,我是melo,一名将近一年的后台练习生,2021即将告别我们而去,一年的练习生涯即将结束,趁着跨年之际,抓住生涯的末尾,对2020以及2021年做了一次复盘。 👊🏿大学前的…

    Java 2023年6月5日
    093
  • java监控文件变化,并分别使用RandomAccessFile和BufferedReader读取

    import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import j…

    Java 2023年5月29日
    0110
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球