实例详解MySQL数据库视图


本篇文章给大家带来了关于mysql的相关知识,其中主要整理了数据库视图的相关问题,包括了视图的介绍与作用、视图的创建、视图的修改、视图的更新、视图的重命名与删除、视图的练习等等内容,下面一起来看一下,希望对大家有帮助。

实例详解MySQL数据库视图

推荐学习:mysql视频教程

1 视图的介绍与作用

视图的介绍:

  • 视图 view 是一个虚拟表,非真实存在,其 本质是根据SQL语句获取动态的数据集,并为其命名, 用户使用时只需要使用视图名称即可获取结果集,并可以将其当作表来使用。
  • 数据库中只存放了视图的定义,而并没有存放视图中的数据。 数据还存在于原来的数据表中。
  • 使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。因此, 视图中的数据是依赖于原来表中数据的。 当表的数据发生改变,视图中的数据也会随之改变。

视图的作用:

  • 简化代码, 我们可以把重复使用的查询封装成视图重复使用,同时可以 使复杂的查询易于理解;
  • 更加安全, 比如,如果有一张表中有很多数据,很多信息不希望被其他人看到,这时就可以使用到视图,对不同的用户使用不同的视图。

2 视图的创建

创建视图的语法如下:

create [or replace] [algorithm = {undefined | merge | temptable}]
view view_name [(column_list)]
as select_statement
[with [cascaded | local] check option]

参数说明:

  1. algorithm: 表示视图选择的算法,可选;
  2. view_name: 创建的视图名称;
  3. column_list: 指定视图中各个属性的名词,默认情况下与SELECT语句中查询的属性相同;
  4. select_statement: 表示一个完整的查询语句,将查询记录导入视图中;
  5. [with [cascaded | local] check option]: 表示更新视图时要保证该视图在权限范围之内。

3 视图的修改

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

语法格式:

alter view 视图名 as select语句;

4 视图的更新

并不是所有的视图都可以更新。可以在UPDATE、DELETE或INSERT等语句中使用视图,以更新基本表的内容。对于可更新的视图,在视图中的行和基本表中的行之间必须具有一对一的关系,如果视图包含下述结构中的任何一种,则该视图不可更新:

  • 聚合函数(SUM()、MIN()、MAX()等);

  • DISTINCT;

  • H*ING;

  • UNION或者UNION ALL;

  • 位于选择列表中的子查询;

  • JOIN;

  • FROM子句中的不可更新视图;

  • WHERE子句中的子查询,引用FROM子句中的表;

  • 仅使用文字值(在该情况下,没有要更新的基本表)。

    PHP Apache和MySQL 网页开发初步 PHP Apache和MySQL 网页开发初步

    本书全面介绍PHP脚本语言和MySOL数据库这两种目前最流行的开源软件,主要包括PHP和MySQL基本概念、PHP扩展与应用库、日期和时间功能、PHP数据对象扩展、PHP的mysqli扩展、MySQL 5的存储例程、解发器和视图等。本书帮助读者学习PHP编程语言和MySQL数据库服务器的最佳实践,了解如何创建数据库驱动的动态Web应用程序。

    PHP Apache和MySQL 网页开发初步 385 查看详情 PHP Apache和MySQL 网页开发初步

注意:
视图中虽然可以更新数据,但是有很多限制。一般情况下,最好将视图作为查询数据的虚拟表,而不要通过视图更新数据。
当真实表中修改了某个存在视图中的字段时,视图需要更新,否则该视图就会变成无效视图!


5 视图的重命名与删除

重命名视图:

rename table 视图名 to 新视图名;

删除视图:

drop view if exists 视图名;

删除视图时,只删除了视图的定义,而并不会删除真实表中的数据

如果想同时删除多个视图,则使用下面的语法格式:

drop view if exists 视图名1, 视图名2, 视图名3...;

6 视图的练习

6.1 数据准备

在进行练习时可以先根据下面代码创建用于练习的两个基本表:

create table college(
    cno   int         null,
    cname varchar(20) null);
create table student(
    sid     int         null,
    name    varchar(20) null,
    gender  varchar(20) null,
    age     int         null,
    birth   date        null,
    address varchar(20) null,
    score   double      null);

两表的基本数据如下图所示:

在这里插入图片描述

6.2 查询平均分最高的学校名称

结合之前学过的知识可以 尝试使用子查询和连接查询 来实现,参考代码如下:

SELECT cname
FROM (SELECT cname, rank() over (order by *g_score desc ) item
      FROM (SELECT cname, *g(score) *g_score
            FROM student
                     JOIN college ON sid = cno
            GROUP BY cname) t) tt
WHERE item = 1;

在上述代码中,先将student 与 college两表关联,将关联的查询作为子表,并根据子表进行平均数的排序,平均数序号为1的平均分数最高,再以此为子表进行子查询,查询出了平均分最高的学校。具体结果如下:
在这里插入图片描述

这种方式虽然能够解决问题,但是相对复杂,不容易看懂,为了简化代码,我们可以将每一个子查询创建为一个视图

视图解决方式代码:

-- 1 视图一,连接两表并计算平均数
CREATE VIEW t_view AS
SELECT cname, *g(score) *g_score
FROM student
         JOIN college ON sid = cno
GROUP BY cname;

-- 2 视图二,利用视图一对平均分数进行排序标号
CREATE VIEW tt_view AS
SELECT cname, rank() over (order by *g_score desc ) item
FROM (t_view);

-- 3 利用视图查询
SELECT cname
FROM (tt_view)
WHERE item = 1;

在创建完视图后,如果想要查询平均分前三名学校,则方便很多,创建好的视图可以直接使用!

参考代码及结果:

SELECT cnameFROM (tt_view)WHERE item = 1
   OR item = 2
   OR item = 3;

在这里插入图片描述

推荐学习:mysql视频教程

以上就是实例详解MySQL数据库视图的详细内容,更多请关注其它相关文章!


# 如何设置  # 泰安seo免费咨询  # 吉林营销推广怎么样  # 太仓网站建设的现状  # 南川直播推广招聘网站  # seo10000  # 台州国强建设网站  # 吉林大型网站建设技巧  # 东阿品牌网站建设  # 无锡外贸网站建设建站  # 产品网站定制怎么做推广  # mysql  # 数据库中  # 解决问题  # 我们可以  # 插入图片  # 句中  # 重命名  # 本书  # 在这里  # 镜像 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: 《随手记》关闭首页消息推送方法  Windows Audio服务启动失败怎么办_电脑没声音的终极服务修复法【修复】  铁路12306官网入口 铁路12306中国铁路官网登录首页  AO3中文版手机快速通道_AO3最新稳定链接更新  TikTok视频播放中断怎么办 TikTok播放异常修复方法  如何取消数字签名  抖音号升级企业号怎么改名字?升级企业号有哪些好处?  J*aScript与CSS动画:实现平滑顺序淡入淡出效果并解决显示冲突  抖音猜你想搜能说明对方搜过吗  优化长HTML属性值:SonarQube警告与实用策略  虫虫漫画排行榜单入口_虫虫漫画编辑推荐入口  苹果电脑如何快速截图并编辑 苹果电脑截屏标注快捷操作  百度输入法在AutoCAD中无法输入中文怎么办_百度输入法CAD输入异常解决方法  智慧团建活动报名入口 智慧团建活动报名入口手机端官网​  构建可配置的J*aScript加权点击计数器与共享总计功能  优化2xN网格最大路径和的动态规划算法实践  《tt语音》超级玩家开通方法  视频转蓝光m2ts格式  漫蛙漫画官方版直通入口 2025漫蛙漫画免注册访问说明  英国搜索:多数英国人认为语言搜索是未来搜索  抖音号升级成企业资质怎么弄?有什么好处?  泰拉瑞亚网页版在线登录入口 泰拉瑞亚官方正版入口  Golang如何使用crypto/md5生成哈希_Golang MD5哈希生成方法  自定义你的VS Code状态栏,监控关键信息  《海底捞》点外卖方法  虫虫漫画绿色安全入口_虫虫漫画绿色安全入口安全看漫画  J*aScript模拟悬停与点击:自动化网页动态元素交互指南  iPhone17Pro如何连接蓝牙耳机_iPhone17Pro蓝牙设备配对与连接方法介绍  《幻兽帕鲁》手游帕鲁捕捉技巧分享  百度网盘网页入口链接分享 百度网盘官网入口网页登录  《我的恋爱逃生攻略》中文名字输入方法  全球各国上班时间表外贸邮件时间  Flexbox布局中Stencil组件宽度不显示问题解析与:host尺寸控制  大熊猫抓取竹子的“大拇指”其实是什么?蚂蚁庄园课堂今天答案最新11月30日  《一起考教师》账号注销方法  解决VS Code中Python版本冲突与输出异常的指南  Win11怎么录屏_Windows 11自带Xbox Game Bar录制视频  如何编写一个符合 composer 规范的 post-install-cmd 脚本?  智云Q3和Q2有什么升级_智云Q3与Q2手持云台功能与性能对比分析  猫眼电影app怎么查询电影院的营业时间_猫眼电影影院营业时间查询教程  Python对象引用与属性赋值:理解链表中的行为  掌握产品代码正则表达式:避免常见陷阱与精确匹配  vivo云服务一直提示空间不足怎么办 怎么办vivo云服务老是提示空间不足  《咸鱼之王》新版孙坚技能解析  J*aScript调试技巧_性能分析与内存快照  微博网页版入口链接 微博网页版在线互动平台  B站怎么开|直播| B站|直播|申请需要什么条件【新手必看】  j*a中ArrayBlockingQueue的使用  CodeIgniter 3 连接 SQL Server:正确获取查询结果的教程  PHP实现等比数列:构建数组元素基于前一个值递增的方法 

 2022-07-13

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.