最新要闻
- 从“分离焦虑”到融入集体 看幼儿园“小托班”如何带娃
- 天天滚动:夏季这种穿搭更火,叫“上面开会、下面约会”,谁穿了都很洋气
- 美国芯片大厂德州仪器无底线降价:针对国内芯片公司 就是比国产便宜 当前热讯
- 襄阳一初中学生集体宣誓终生不买烟 做不抽烟新一代:网友点赞全国推广
- 诺德基金张昳泓:市场板块分化明显,经济呈现弱复苏态势-环球速讯
- 现实版《速度与激情》 女司机误将拖车当上坡上演飞车特技
- 奶牛听着音乐按摩挤奶!认养一头牛纯牛奶大促:74.9元3箱 天天看热讯
- 入门即满配成标杆!岚图5月交付新车3003辆 同比大涨231%
- 集团破产重整 资产被轮番拍卖!众泰董事长辞职
- 天天热资讯!六一演出现场的最美妈妈团 一身旗袍扭腰跳舞太惊艳:网友直呼身材颜值绝
- 鹤壁市浚县卫贤镇尚村_貉子皮尚村最新价格|环球快资讯
- 阿里云AI新产品“通义听悟”重磅发布:快科技邀你免费用!
- 45元一杯"智商税"!酸奶刺客收割年轻人钱包 世界快讯
- 环球视讯!不愧为工作狂!马斯克深夜到访特斯拉上海超级工厂:查看新款Model 3
- 首发799元起 Redmi电竞显示器G27/G27Q开售:165Hz超高刷 全球快看
- 网红扎堆到麦地直播割麦 网友热议:很反感 流量噱头
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
MySQL视图
【资料图】
一:视图概述
1:为什么使用视图
视图可以帮我们使用表的一部分而不是所有的表,另一方面也可以针对不同的用户制定不同的查询视图。比如,针对一个公司的销售人员,我们只想给他看部分数据,而某些特殊的数据,比如采购的价格,则不会提供给他。再比如,人员薪酬是个敏感的字段,那么只给某个级别以上的人员开放,其他人的查询视图中则不提供这个字段。
2:什么是视图
①:视图是一种虚拟表,本身是不具有数据的,占用很少的内存空间,它是SQL中的一个重要概念。②:视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。③:视图的创建和删除只影响视图本身,不影响对应的基表。但是当对视图中的数据进行增加、删除和修改操作时,数据表中的数据会相应地发生变化。④:向视图提供数据内容的语句为SELECT语句, 可以将视图理解为存储起来的SELECT语句在数据库中,视图不会保存数据,数据真正保存在数据表 中。当对视图中的数据进行增加、删除和修改操作时,数据表中的数据会相应地发生变化。⑤:视图是向用户提供基表数据的另一种表现形式。通常情况下,小型项目的数据库可以不使用视图,但是在大型项目中,以及数据表比较复杂的情况 下,视图的价值就凸显出来了,它可以帮助我们把经常查询的结果集放到虚拟表中,提升使用效率。理解和使用起来都非常方便。
二:视图操作
1:基本语法
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW 视图名称 [(字段列表)] AS 查询语句 [WITH [CASCADED|LOCAL] CHECK OPTION]
-- 创建数据库及使用表CREATE DATABASE IF NOT EXISTS demo_view_school CHARACTER SET utf8 COLLATE utf8_general_ci;USE demo_view_school;-- 创建数据表CREATE TABLE `student`( `sid` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT "学生ID", `sname` varchar(5) NOT NULL COMMENT "学生姓名", `ssex` enum("男","女") DEFAULT "男" COMMENT "性别", `sage` tinyint(11) unsigned NOT NULL COMMENT "年龄", `saddress` mediumtext COMMENT "住址", `tid` int(11) DEFAULT NULL COMMENT "引用老师ID") ENGINE=InnoDB AUTO_INCREMENT=75 DEFAULT CHARSET=utf8;CREATE TABLE `teacher`( `tid` int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT "老师ID", `tname` varchar(5) NOT NULL COMMENT "老师姓名", `tsex` enum("男","女") DEFAULT "男" COMMENT "性别", `tage` tinyint(3) unsigned DEFAULT NULL COMMENT "年龄", `taddress` varchar(10) DEFAULT NULL COMMENT "住址") ENGINE=InnoDB DEFAULT CHARSET=utf8;-- 填充数据INSERT INTO `demo_view_school`.`student` (`sid`, `sname`, `ssex`, `sage`, `saddress`, `tid`) VALUES(1, "王生安", "男", 21, "安徽合肥", 1),(2, "李鑫灏", "女", 21, "安徽合肥", 1),(3, "薛佛世", "男", 21, "安徽蚌埠", 2),(4, "蔡壮保", "男", 21, "安徽安庆", 2),(5, "钱勤堃", "女", 23, "安徽合肥", 1),(6, "潘恩依", "女", 24, "安徽合肥", 1),(7, "陈国柏", "女", 24, "安徽六安", 2),(8, "魏皑虎", "女", 24, "安徽六安", 2);INSERT INTO `demo_view_school`.`teacher` (`tid`, `tname`, `tsex`, `tage`, `taddress`) VALUES(1, "张老师", "女", 28,"江苏南京"),(2, "李老师", "男", 28,"江苏无锡");视图创建基表数据
2:视图的增删改查
#### 创建视图-- 创建单表视图CREATE VIEW t_view1(sid,sname,ssex,saddress) AS SELECT sid,sname,ssex,saddress FROM student;-- 创建多表视图CREATE VIEW t_view2(sid,sname,ssex,saddress,tname) AS SELECT s.sid,s.sname,s.ssex,s.saddress,t.tname FROM student s INNER JOIN teacher t USING(tid);-- 注:创建完视图后,基表上的主键外键唯一键等等都会丢失-- 注:创建完视图会在MySQL的data数据存储目录里存在t_view1.frm,t_view2.frm的文件#### 查看视图-- 查看数据库的表对象、视图对象SHOW TABLES; -- 示例: +----------------------------+ | Tables_in_demo_view_school | +----------------------------+ | student | | t_view1 | | t_view2 | | teacher | +----------------------------+-- 查询表结构DESC t_view2; -- 示例: +----------+-------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------------+------+-----+---------+-------+ | sid | int(11) | NO | | 0 | | | sname | varchar(5) | NO | | NULL | | | ssex | enum("男","女") | YES | | 男 | | | saddress | mediumtext | YES | | NULL | | | tname | varchar(5) | NO | | NULL | | +----------+-------------------+------+-----+---------+-------+-- 查询视图状态(因为视图是基于基表创建的,所以视图就像一个被封装的SELECT)SHOW TABLE STATUS LIKE "t_view2"\G -- 示例:(因为是视图所以就Comment为VIEW) *************************** 1. row *************************** Name: t_view2 Engine: NULL Version: NULL Row_format: NULL Rows: NULL Avg_row_length: NULL Data_length: NULL Max_data_length: NULL Index_length: NULL Data_free: NULL Auto_increment: NULL Create_time: NULL Update_time: NULL Check_time: NULL Collation: NULL Checksum: NULL Create_options: NULL Comment: VIEW#### 使用视图-- 视图主要就是为了查询,所以将视图当作表一样查询即可-- 普通查询SELECT * FROM t_view2; -- 示例: +-----+-----------+------+--------------+-----------+ | sid | sname | ssex | saddress | tname | +-----+-----------+------+--------------+-----------+ | 1 | 王生安 | 男 | 安徽合肥 | 张老师 | | 2 | 李鑫灏 | 女 | 安徽合肥 | 张老师 | | 3 | 薛佛世 | 男 | 安徽蚌埠 | 李老师 | | 4 | 蔡壮保 | 男 | 安徽安庆 | 李老师 | | 5 | 钱勤堃 | 女 | 安徽合肥 | 张老师 | | 6 | 潘恩依 | 女 | 安徽合肥 | 张老师 | | 7 | 陈国柏 | 女 | 安徽六安 | 李老师 | | 8 | 魏皑虎 | 女 | 安徽六安 | 李老师 | +-----+-----------+------+--------------+-----------+#### 修改视图-- 视图本身不可修改,但是视图的来源是可以修改的-- 修改视图其实就是修改视图本身的来源(SELECT语句)-- 比如修改t_view1视图ALTER VIEW t_view1(sid,sname) AS SELECT sid,sname FROM student; -- 示例: select * from t_view1; +-----+-----------+ | sid | sname | +-----+-----------+ | 1 | 王生安 | | 2 | 李鑫灏 |-- 使用 OR REPLACE 修改视图(和ALTER VIEW一样)CREATE OR REPLACE VIEW t_view3(sid,sname) AS SELECT sid,sname FROM student;#### 删除视图-- 单个删除、批量删除DROP VIEW 视图名称;DROP VIEW 视图名称,视图名称;注:为什么删除视图不用DROP TABLE;因为TABLE表示存数据的,而VIEW则是没有具体数据的,所以删视图它只是删结构(.frm的文件),删TABLE则是删结构和数据(.frm和.ibd)
三:视图数据操作
视图数据新增:①:多表视图不能新增数据 ②:可以向单表视图插入数据,但是视图中包含的字段必须和基表中所有不能为空(或没有默认值)的字段对应视图数据删除:①:多表视图不能删除数据 ②:单表视图可以删除数据视图数据更新:理论上无论是单表视图还是多表视图都可以更新数据 更新限制:WITH CHECK OPTION,如果对视图在新增的时候,限定了某个字段有限制,那么 对视图进行数据更新操作时,系统会进行验证,要保证更新之后,数据依然可以按实体查询出来,否则不让更新。 -- 示例 -- 创建视图 -- 单表视图(加上sage约束,表示视图来源数据都是21岁) -- WITH CHECK OPTION修改数据时,我们不能修改sage字段导致不符合条件 CREATE VIEW t_view3(sid,sname,sage,ssex,saddress) AS SELECT sid,sname,sage,ssex,saddress FROM student WHERE sage = 21 WITH CHECK OPTION; -- 更新示例 UPDATE t_view3 SET sage = 66 WHERE sid = 1; ERROR 1369 (HY000): CHECK OPTION failed "demo_view_school.t_view3"关于视图更新总结一下: 要使视图可更新,视图中的行和底层基本表中的行之间必须存在一对一的关系。 另外当视图定义出现如下情况时,视图不支持更新操作: ①:在定义视图的时候指定了“ALGORITHM = TEMPTABLE”,视图将不支持INSERT和DELETE操作; ②:视图中不包含基表中所有被定义为非空又未指定默认值的列,视图将不支持INSERT操作; ③:在定义视图的SELECT语句中使用了JOIN联合查询,视图将不支持INSERT和DELETE操作; ④:在定义视图的SELECT语句后的字段列表中使用了数学表达式或子查询,视图将不支持INSERT, 也不支持UPDATE使用了数学表达式、子查询的字段值; ⑤:在定义视图的SELECT语句后的字段列表中使用DISTINCT、聚合函数、GROUP BY 、HAVING、UNION等, 视图将不支持INSERT、UPDATE、DELETE; ⑥:在定义视图的SELECT语句中包含了子查询,而子查询中引用了FROM后面的表,视图将不支持INSERT、UPDATE、DELETE; ⑦:视图定义基于一个不可更新视图; ⑧:常量视图。
四:视图算法
执行基础数据:ALTER TABLE student ADD ssalary DECIMAL(7,2);UPDATE student set ssalary = ceil(rand()*3000+8000);基表数据信息:+-----+-----------+------+------+--------------+------+----------+| sid | sname | ssex | sage | saddress | tid | ssalary |+-----+-----------+------+------+--------------+------+----------+| 1 | 王生安 | 男 | 21 | 安徽合肥 | 1 | 9225.00 || 2 | 李鑫灏 | 女 | 21 | 安徽合肥 | 1 | 8542.00 || 3 | 薛佛世 | 男 | 21 | 安徽蚌埠 | 2 | 10035.00 || 4 | 蔡壮保 | 男 | 21 | 安徽安庆 | 2 | 10548.00 || 5 | 钱勤堃 | 女 | 23 | 安徽合肥 | 1 | 8633.00 || 6 | 潘恩依 | 女 | 24 | 安徽合肥 | 1 | 9522.00 || 7 | 陈国柏 | 女 | 24 | 安徽六安 | 2 | 10709.00 || 8 | 魏皑虎 | 女 | 24 | 安徽六安 | 2 | 10977.00 |+-----+-----------+------+------+--------------+------+----------+①:创建视图,使工资降序排列DESC CREATE VIEW t_view5 AS SELECT * FROM student ORDER BY ssalary DESC; ②:查询学生表并按照年龄分组 SELECT * FROM t_view5 GROUP BY sage; -- 查询结果 +-----+-----------+------+------+--------------+------+---------+ | sid | sname | ssex | sage | saddress | tid | ssalary | +-----+-----------+------+------+--------------+------+---------+ | 1 | 王生安 | 男 | 21 | 安徽合肥 | 1 | 9225.00 | | 5 | 钱勤堃 | 女 | 23 | 安徽合肥 | 1 | 8633.00 | | 6 | 潘恩依 | 女 | 24 | 安徽合肥 | 1 | 9522.00 | +-----+-----------+------+------+--------------+------+---------+ -- 说明:这个就是没有按照顺序执行,应该先DESC排序再分组才是正确的通过上面的查询会发现查询的是错误的,因为DESC排列后已经是从高到底排列了,这时候按照年龄进行分组,分组完应该每个年龄中都是最高的工资视图算法:系统对视图以及外部查询视图的select语句的一种解析方式。视图:可以理解为子查询,2个select,第一个select:得到视图视图算法分成3种:Undefined:未定义(默认)这不是一种算法,是一种推卸责任的算法告诉系统,视图没有定义算法,系统你自己看着办 Temptable:临时表算法:先执行视图的select语句,然后在执行外部查询Select语句。 Merge:合并算法,系统在执行select语句之前,会对视图的select和外部查询视图的select语句进行合并,然后执行 -- Merge效率高,但是慢算法指定: ①:创建视图(使用算法),使工资降序排列DESC CREATE ALGORITHM = TEMPTABLEVIEW t_view5 AS SELECT * FROM student ORDER BY ssalary DESC; ②:查询学生表并按照年龄分组 SELECT * FROM t_view5 GROUP BY sage; +-----+-----------+------+------+--------------+------+----------+ | sid | sname | ssex | sage | saddress | tid | ssalary | +-----+-----------+------+------+--------------+------+----------+ | 4 | 蔡壮保 | 男 | 21 | 安徽安庆 | 2 | 10548.00 | | 5 | 钱勤堃 | 女 | 23 | 安徽合肥 | 1 | 8633.00 | | 8 | 魏皑虎 | 女 | 24 | 安徽六安 | 2 | 10977.00 | +-----+-----------+------+------+--------------+------+----------+算法选择: 如果视图的select语句中包含一个查询子句(order by,limit),而且很可能该关键字执行顺序比外部查询语句关键字靠后 一定要使用使用temptable算法,其他情况下不用指定,默认即可。
.
关键词:
-
天天即时:[日志管理] 启动程序时,因报“log4j-slf4j-impl cannot be present with log4j-to-slf4j”错误而导
此错误出现过了几次了,有必要记录一下。 1问题描述运行测试用例的spring-bootJava程序片段时,报如下错误
来源: MySQL视图
天天即时:[日志管理] 启动程序时,因报“log4j-slf4j-impl cannot be present with log4j-to-slf4j”错误而导
从“分离焦虑”到融入集体 看幼儿园“小托班”如何带娃
天天滚动:夏季这种穿搭更火,叫“上面开会、下面约会”,谁穿了都很洋气
美国芯片大厂德州仪器无底线降价:针对国内芯片公司 就是比国产便宜 当前热讯
襄阳一初中学生集体宣誓终生不买烟 做不抽烟新一代:网友点赞全国推广
环球观速讯丨Https加密原理:SSL/TLS四次握手过程(转载)
统信UOS系统开发笔记(二):国产统信UOS系统搭建Qt开发环境安装Qt5.12 世界观焦点
掌握嵌入式Linux编程1开始
linux 性能自我学习 ———— cpu 切换带来的性能损耗 [二] 世界热点
介绍.NET几种人脸识别组件
诺德基金张昳泓:市场板块分化明显,经济呈现弱复苏态势-环球速讯
现实版《速度与激情》 女司机误将拖车当上坡上演飞车特技
奶牛听着音乐按摩挤奶!认养一头牛纯牛奶大促:74.9元3箱 天天看热讯
入门即满配成标杆!岚图5月交付新车3003辆 同比大涨231%
集团破产重整 资产被轮番拍卖!众泰董事长辞职
天天热资讯!六一演出现场的最美妈妈团 一身旗袍扭腰跳舞太惊艳:网友直呼身材颜值绝
玖章算术NineData荣获信通院“生成式人工智能技术和应用优秀案例”奖|天天视讯
鹤壁市浚县卫贤镇尚村_貉子皮尚村最新价格|环球快资讯
阿里云AI新产品“通义听悟”重磅发布:快科技邀你免费用!
45元一杯"智商税"!酸奶刺客收割年轻人钱包 世界快讯
环球视讯!不愧为工作狂!马斯克深夜到访特斯拉上海超级工厂:查看新款Model 3
首发799元起 Redmi电竞显示器G27/G27Q开售:165Hz超高刷 全球快看
网红扎堆到麦地直播割麦 网友热议:很反感 流量噱头
2023新疆高考志愿投档规则
天天热点评!axi_crossbar IP使用说明
直播app源码技术开发知识:横竖屏功能的实现
编写Java代码时应该避免的6个坑
Linux实验文档
Python装饰器
全球热点评!国产GPU公司景嘉微募资42亿:研发高性能显卡 可用于大型游戏
积极拥抱生僻字!阿里普惠体推出3.0版本:免费商用-当前讯息
今日关注:为何坚持使用高压油箱?吉利研究院副院长:常压油箱不可能达标
音视频会议神器!阿里云通义听悟正式发布:轻松记录总结、实时翻译
2K-3K价位段无敌!Redmi K60斩获618首销双冠军|每日讯息
天天新消息丨淘宝开店多少钱能开直通车_淘宝开店多少钱
全球滚动:攻防世界_PWN_stack2
世界热头条丨MySQL表列数和行大小限制
天天观热点:为什么JS中0.1+0.2不等于0.3
美国会众议院通过债务上限法案 全球热点评
低到13.48万元起步 江西五十铃现款D-MAX年中大促_全球热点评
被人类幼崽萌化的瞬间:画面实在太可爱!祝愿大家六一快乐
访华后特斯拉股价大涨 马斯克重返世界首富宝座
播报:老外试驾法拉第未来FF 91被震撼:从未见过副驾驶有屏幕的车子
旧机福音 极限精简版Win10系统Tiny10更新:64位支持来了|全球百事通
坐飞机也要称体重 新西兰航空登机前将给国际旅客称重-天天热推荐
仙佑膏药逐步实现标准化 公司规范化生产管理水平
在 Ubuntu 上使用 ADB 备份 Android 数据 世界热议
环球热文:南运河南路与金钟桥大街交口车行道调整
全球快报:14代酷睿有望首发 Intel开发Wi-Fi 7芯片:网速狂飙4.8千兆
热点!男孩六一表演化身行走表情包 全情投入阳光自信:网友看笑不愧C位
26次高考落榜大叔继续冲击重本 网友吐槽哗众取宠、炒作:本人回应
【速看料】马斯克到访特斯拉上海超级工厂 陶琳深夜发声:激动人心 收获满满
头条:关于nokia_6270的问题
大数据面试题集锦-Hadoop面试题(二)-HDFS
世界关注:人民币汇率跌破7.1,原因是什么?专家解读
被苹果抛弃了!初代iPad Air被列为过时产品 观天下
超越苹果M2 AMD锐龙7000全新AI性能实战:等14代酷睿来战-世界关注
售价超2万元!苹果首款头显Reality Pro高清渲染图出炉:下周发布
环球关注:马娘翻译:被白兴大人附身的福来
2023年4月和5月随笔
儿童节的梦想!妈妈 我想要一本“黑客攻防指南”
热议:CPU时代又回来了?英伟达股价大跌5% 英特尔逆势上涨
SD协议-状态机-天天观速讯
世界微动态丨哪种商业医疗保险好呢_比较好的商业医疗保险
环球关注:杀6000万头差点灭绝 奉为国兽还杀:为何美国跟野牛过不去?
四辆车狭路相逢挤一起 网友:两车道整出四车道|天天通讯
世界热议:一个时代落幕!《英联联盟》今日13.11版重磅更新:正式放弃32位系统
美女云集!网飞韩剧《绝世网红》中字预告首曝:宋雨琦客串 世界观速讯
儿童节快乐!今天6月1日 微信上线卖萌、带娃限时状态
天天新资讯:禾的组词一年级云组词_禾的组词一年级
大戏看北京 6月文艺资讯-每日资讯
发现增加了预防链球菌感染的希望 环球快讯
车贷担保人会影响征信吗
今日热闻!小迪网安笔记一:基础入门
世界微头条丨Doris(六) -- 查询语法和内置函数
重装系统之后发现网卡驱动丢了,怎么办?一招解决_世界简讯
云从科技:目前基础部分的算力需求能够被基本满足_全球热资讯
暴雪对《暗黑破坏神4》服务器感觉良好:我们准备好了!
【独家焦点】电影《诛仙1》CCTV6今晚开播收视登顶!肖战、李沁主演
天天滚动:注意!江苏苏州将发放1亿元购车补贴 一次性可补五千
日版实体版《死亡细胞:重返恶魔城》将9月14日发售 为特别好评作品
真人电影《勿言推理》追加演员阵容公布 永山瑛太将出演影片
《原神》七圣召唤国际大赛将于今年举办 为上线以来首次官方国际赛事
玩家打造全球最小GC主机 方正小巧造型吸引众人的喜爱
BOSS直聘-W:耗资约400万美元回购近58.76万股-环球快看点
动画声优大西沙织因健康状况恶化将减少工作活动 曾配音《路人女主》
广东汕尾台风天刮来众多生蚝 两人一小时收获两百多斤
《斗罗大陆2》被曝最新路透照 张予曦饰演的小舞白裙绝美可人
2023新一线城市名单公布 北方仅有四座城市上榜
“高考钉子户”梁实马上迎来其第27次高考 称准备相对充分
15)触发器
天天微动态丨小程序容器助力航空企业数字化转型
全球新动态:2.单向链表
Quartz任务调度框架 世界报资讯
视点!掌握嵌入式Linux编程0简介
月度回望|“资产荒”逻辑未破 5月债市现券收益率曲线陡峭下移
当前头条:日本最大啤酒商要重返中国:你爱日啤、德啤还是国啤?
3999元起 华为Vision智慧屏3开售:720P秒变4K
刀塔循环圈单机地图 刀塔循环圈-天天即时看