Mysql_视图

视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。简单来说就是视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。

通过视图,可以展现基表的部分数据; 视图数据来自定义视图的查询中使用的表,使用视图动态生成。 基表:用来创建视图的表叫做基表

简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。

安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现。

数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。 总而言之,使用视图的大部分情况是为了保障数据安全性,提高查询效率。

因为视图是需要基表才能构建,因此在讲解视图的时候,我们需要先创建两张数据表用于后面演示视图操作,下面是测试表和测试数据创建的SQL语句。

4.1、创建视图

书写格式:

CREATE VIEW

DROP VIEW

注意:视图可以和基本表一样被查询,但是利用视图进行数据增,删,改操作,会受到一定的限制。

4.2、视图的更改

create or replace view view_name as select语句; 在视图存在的情况下可对视图进行修改,视图不在的情况下可创建视图

ps.在MySQL中视图不能重复创建,不能重名。

4.3、DML操作更新视图

因为视图本身没有数据,因此对视图进行的dml操作最终都体现在基表中,比如我们执行以下操作

1 UPDATE v_blog SET 内容 = ‘修改后的内容’ WHERE 编号 = 1;

对于可以执行DML操作的视图,定义时可以带上WITH CHECK OPTION约束 作用:对视图所做的DML操作的结果,不能违反视图的WHERE条件的限制。

1 #部分数据创建视图
2 CREATE OR REPLACE VIEW v_blog_1(编号,标题,内容,作者编号)
3 AS SELECT * FROM blog WHERE author_id=3
4 WITH CHECK OPTION;
5 #with check option:where条件约束
6 #该语句会报错违反了 WHERE author_id=3 的约束
7 INSERT INTO v_blog_1(编号,标题,内容,作者编号)VALUES(7,'123','123',4);

4.5、6.定义视图时的其他选项

ALGORITHM选项

选择在处理定义视图的select语句中使用的方法

– UNDEFINED:MySQL将自动选择所要使用的算法

– MERGE:将视图的语句与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分

– TEMPTABLE:将视图的结果存入临时表,然后使用临时表执行语句

缺省ALGORITHM选项等同于ALGORITHM = UNDEFINED

DEFINER选项 指出谁是视图的创建者或定义者

– definer= ‘用户名’@’登录主机’ – 如果不指定该选项,则创建视图的用户就是定义者,指定关键字CURRENT_USER(当前用户)和不指定该选项效果相同

SQL SECURITY选项 要查询一个视图,首先必须要具有对视图的select权限,如果同一个用户对于视图所访问的表没有select权限,那会怎么样?

SQL SECURITY选项决定执行的结果:

– SQL SECURITY DEFINER:定义(创建)视图的用户必须对视图所访问的表具有select权限,也就是说将来其他用户访问表的时候以定义者的身份,此时其他用户并没有访问权限。

– SQL SECURITY INVOKER:访问视图的用户必须对视图所访问的表具有select权限。

缺省SQL SECURITY选项等同于SQL SECURITY DEFINER

视图权限总结: 使用root用户定义一个视图(推荐使用第一种):u1、u2

1)u1作为定义者定义一个视图,u1对基表有select权限,u2对视图有访问权限:u2是以定义者的身份访问可以查询到基表的内容;

2)u1作为定义者定义一个视图,u1对基表没有select权限,u2对视图有访问权限,u2对基表有select权限:u2访问视图的时候是以调用者的身份,此时调用者是u2,可以查询到基表的内容。

Original: https://www.cnblogs.com/zzc1102/p/16097158.html
Author: and脱发周大侠
Title: Mysql_视图

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

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

(0)

大家都在看

  • MYSQL(基本篇)——一篇文章带你走进MYSQL的奇妙世界

    MYSQL算是我们程序员必不可少的一份求职工具了 无论在什么岗位,我们都可以看到应聘要求上所书写的”精通MYSQL等数据库及优化” 那么我们今天就先来了解一…

    数据库 2023年6月14日
    090
  • [SWPU2019] Android1

    给出一个apk文件,用jadx打开简单看看源代码 发现调用了一个库文件,后面的函数只做了登录,是否成功都不会有有用的信息出来了,那么就把库文件解压出来放入ida中看看 char *…

    数据库 2023年6月11日
    085
  • 读取resources下的资源

    这里我通过一个普通的SpringBoot项目进行测试,当然其他项目也都是通用的。 将其中的Test修改为你的类名即可: java;gutter:true; import lombo…

    数据库 2023年6月14日
    082
  • Mysql 连续时间分组

    该方案不限于本例的连续时间,还可以应用于其他连续组。 [En] The scheme is not limited to the continuous time of this e…

    数据库 2023年5月24日
    080
  • try enabling the break write locks option for the cleanup

    如图: 一般是在中断:提交/更新的时候产生的。 一般两种解决方式(可以参考其他的): 1,重启ide(我的就是这么神奇,重启idea后好了); 2,在cleanup时勾选 brea…

    数据库 2023年6月11日
    0127
  • js异步编程终级解决方案 async/await

    在最新的ES7(ES2017)中提出的前端异步特性:async、await。 async、await是什么 async顾名思义是”异步”的意思,async用…

    数据库 2023年6月9日
    090
  • MySQL索引:B+树索引

    MySQL索引:B+树索引 B+树索引是传统意义上的索引,这是目前关系型数据库系统中查找最为常用和最为有效的索引。B+树索引的构造类似于二叉树,根据键值快速找到数据 B树 B+树是…

    数据库 2023年5月24日
    088
  • 面试记录

    JVM线程属于用户态还是内核态 当进程运行在ring3级别时为用户态,ring0级别时为内核态 有些操作需要有内核权限才能进行,那么有三种由用户态切换到内核态的情况: 系统调用:操…

    数据库 2023年6月16日
    0107
  • idea的使用技巧和必要的设置

    idea 如何开启多个线程 打开下面按钮,然后运行相同的代码即可 打开idea需要选择打开哪一个项目 设置如下,关闭下面选项即可 posted @2022-06-17 21:07 …

    数据库 2023年6月14日
    094
  • Maven编译出现“java.lang.OutOfMemoryError: Java heap space”问题的解决办法

    项目执行 mvn clean install 成功在idea 进行debug启动一直报错,报编译错: maven-resources-production:xxx java.nio…

    数据库 2023年6月6日
    0127
  • 面试必问之 CopyOnWriteArrayList,你了解多少?

    一、摘要 在介绍 CopyOnWriteArrayList 之前,我们一起先来看看如下方法执行结果,代码内容如下: public static void main(String[]…

    数据库 2023年6月14日
    094
  • kettle插入邮件

    posted @2020-12-04 14:58 cheng_blog 阅读(53 ) 评论() 编辑 Original: https://www.cnblogs.com/chen…

    数据库 2023年6月16日
    074
  • GROUP BY 后获取每一组最新的一条记录

    最近有一种需求,一张订单可能有多个支付单,这就要求我们拿到每一张订单的最新支付单。具体思路如下: [En] Recently, there is a demand that the…

    数据库 2023年5月24日
    073
  • SQL中的排座位问题

    表: Seat +————-+———————+|…

    数据库 2023年5月24日
    074
  • ASP.NET CORE WEB项目介绍

    首先创建一个asp.net core web应用程序 第二步 目前官方预置了7种模板项目供我们选择。从中我们可以看出,既有我们熟悉的MVC、WebAPI,又新添加了Razor Pa…

    数据库 2023年6月14日
    095
  • JDK自带线程池学习

    JDK自带线程池 线程池的状态 线程有如下状态 RUNNING状态:Accept new tasks and process queued tasks SHUTDOWN状态:Don…

    数据库 2023年6月11日
    0113
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球