MySQL视图操作

什么是视图?视图是干什么用的?

视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。 通过视图,可以展现基表的部分数据;视图数据来自定义视图的查询中使用的表,使用视图动态生成。基表:用来创建视图的表叫做基表base table.

为什么要使用视图?

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

如何创建视图

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]

. OR REPLACE:表示替换已有视图 . ALGORITHM:表示视图选择算法,默认算法是UNDEFINED(未定义的):MySQL自动选择要使用的算法 ;merge合并;temptable临时表 . column_list:视图字段,显示指定视图列名,要求视图名后面的列的数量必须匹配select子句中的列的数量。 . select_statement:表示select语句 . [WITH [CASCADED | LOCAL] CHECK OPTION]:表示视图在更新时保证在视图的权限范围之内 . cascade是默认值,表示更新视图的时候,要满足视图和表的相关条件 . local表示更新视图的时候,要满足该视图定义的一个条件即可 推荐使用WHIT [CASCADED|LOCAL] CHECK OPTION选项,可以保证数据的安全性.

查看视图内部结构

show create view 视图名;

删除视图

drop view 视图名;

如何查看库中的视图

. 第一种方式

mysql> show table status where comment='view';

(说明:Mysql5.1支持视图,视图被看作一种抽象表,因此显示视图状态的语句与显示表状态的语句相同,只是在comment列中以‘view’区分) . 第二种方式

 mysql> select * from information_schema.tables where
 table_schema='你当前的数据库名' and table_type='view';

(说明:这种方法通过系统表查找,效果同上,显示信息更详细。如果不能正确显示结果,可能是大小写的问题,Mysql在不同系统平台不同配置参数下的显示结果可能不同,注意这点。)

视图更新限制

. 视图中如果包含了group by、union等有关的聚合函数,此时视图是不能做更新操作的. . 视图中如果出现了关联多表的sql语句,此时修改的字段必须来源同一个基表. . 视图如果在定义的时候,使用了临时表的算法是无法进行更新操作.

视图的限制

. 视图中无法创建索引 . 视图中无法创建触发器 . 视图中不支持物化视图 . 无法保存视图定义的sql语句

使用演示

mysql> create view v_user
    -> as
    -> select * from user
    -> with check option;

mysql> select * from v_user;
+----+--------+-----+------+
| id | name   | age | sex  |
+----+--------+-----+------+
|  1 | 张三   |  12 | 男   |
|  2 | 小红   |  10 | 女   |
|  3 | 李倩   |  12 | 女   |
+----+--------+-----+------+
3 rows in set (0.00 sec)

mysql> show create view v_user\G;
*************************** 1. row ***************************
View: v_user
Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_user` AS select `user`.`id` AS `id`,`user`.`name` AS `name`,`user`.`age` AS `age`,`user`.`sex` AS `sex` from `user` WITH CASCADED CHECK OPTION
character_set_client: utf8
collation_connection: utf8_general_ci
1 row in set (0.00 sec)

mysql> drop view v_user;

本文分享自微信公众号 - 卡二条的技术圈(gh_0275b8ba153f),作者:编程浪子走四方

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MySQL视图示例

    视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。 通过视图,可以展现基表的部分数据;视图数据来自...

    卡二条的技术圈子
  • Git最全系列教程(三)

    几乎每一种版本控制系统都以某种形式支持分支。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。在很多版本控制系统中,这是个昂贵的过程,常...

    卡二条的技术圈子
  • Swoole学习一之TCP协议

    Swoole是一个高性能的网络通信引擎,提供了多种的网络通信协议。例如UDP、TCP、Http和WebSocket等各种通信协议。可以使完全同步的代码实现异步执...

    卡二条的技术圈子
  • MySQL(十)之视图

    前言 前面给大家介绍了查询语句,感觉写的还不错的,喜欢的可以去查看。今天给大家分享的是MySQL中的视图。 视图(View):视图是由查询结果形成一张虚拟的表。...

    用户1195962
  • SwiftUI:使用 @EnvironmentObject 从环境中读取自定义值

    SwiftUI的环境使我们可以使用来自外部的值,这对于读取Core Data上下文或视图的展示模式等很有用。但是我们也可以将自定义对象发送到环境中,并在以后将它...

    韦弦zhy
  • MySQL引擎和视图的点

    存储引擎Storage Engine:MySQL中的数据、索引以及其他对象是如何存储的,是一套文件系统的实现。

    孙玄@奈学教育
  • Mysql进阶三板斧(一)带你彻底搞懂View视图的原理及应用

    既然视图的定义是基于基本表的,哪为什么还要定义视图呢?这是因为合理地使用视图能够带来许多好处:

    陈哈哈
  • MySQL 视图

    看到这里,或许你已经对MySQL 的基本操作了如指掌,这篇文章讲解MySQL高级功能中 视图的概念及其用法。

    技能锦囊
  • MySQL 视图

    ​看到这里,或许你已经对MySQL 的基本操作了如指掌,这篇文章讲解MySQL高级功能中 视图的概念及其用法。

    技能锦囊
  • AI综述专栏 | 孙仕亮:多视图机器学习综述

    在科学研究中,从方法论上来讲,都应先见森林,再见树木。当前,人工智能科技迅猛发展,万木争荣,更应系统梳理脉络。为此,我们特别精选国内外优秀的综述论文,开辟“AI...

    马上科普尚尚

扫码关注云+社区

领取腾讯云代金券