MySQL视图详解

news2025/1/13 10:22:09

我写本文主要目的,是在网上看见了

在这里插入图片描述

所以,文本主要探讨的问题如下,验证结果在最后面

一、修改视图,基表会跟着改吗?答案:会改变

二、修改基表,视图会变化吗?答案:会改变

视图概述

视图是由数据库中的一个表或多个表导出的虚拟表,其作用是方便用户对数据的操作。

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,数据库中只存放了视图的定义,而并没有存放视图中的数据,这些数据存放在原来的表中。使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。因此,视图中的数据是依赖于原来的表中的数据的。一旦表中的数据发生改变,显示在视图中的数据也会发生改变。同样对视图的更新,会影响到原来表的数据。

视图是存储在数据库中的查询的SQL语句,它主要出于两种原因:安全原因,视图可以隐藏一些数据,例如,员工信息表,可以用视图只显示姓名、工龄、地址,而不显示社会保险号和工资数等;另一个原因是可使复杂的查询易于理解和使用。这个视图就像一个“窗口”,从中只能看到你想看的数据列。这意味着你可以在这个视图上使用SELECT *,而你看到的将是你在视图定义里给出的那些数据列。

一、准备工作,创建一张表,并添加数据

# 创建一个 用户表
CREATE TABLE `user` (
	id INT(11) PRIMARY KEY AUTO_INCREMENT,
	`name` VARCHAR(255),
	age INT(11)
);
# 写三个用户
INSERT INTO `USER` (`name`,`age`) VALUES ('张三',18),('李四',20),('王麻子',200);

1、查看数据库文件有什么

.frm 文件保存表的结构

.ibd 文件保存表的数据

在这里插入图片描述

二、视图的基本操作

1、创建视图

# 创建一个视图
CREATE VIEW test_view1 as SELECT * FROM USER;

1.1、查看文件

发现只有一个 test_view1.frm 的文件,说明视图只有结构没有数据,是一个虚拟表,其内容由查询定义。

在这里插入图片描述

2、查询视图

# 就跟普通的查询语句一样
SELECT * FROM test_view1;

3、修改视图

修改视图,就是删除上一个记录,并录入当前记录,有两种实现语句,分别是:CREATE OR REPLACE VIEWALTER VIEW

# 新创建一个 动物表
CREATE TABLE `animal` (
	id INT(11) PRIMARY KEY AUTO_INCREMENT,
	`name` VARCHAR(255),
	`master` INT(11)
);

# 写三个动物
INSERT INTO animal (`name`,`master`) VALUES ('小白',1),('小黑',1),('小黄',2);

# 修改方式1
# 修改值,并取别名
CREATE OR REPLACE VIEW test_view1 (id1,NAME1,MASTER1) AS SELECT id,NAME,MASTER FROM animal;
# 查看
SELECT * FROM test_view1;
#+-----+--------+---------+
#| id1 | NAME1  | MASTER1 |
#+-----+--------+---------+
#|   1 | 小白   |       1 |
#|   2 | 小黑   |       1 |
#|   3 | 小黄   |       2 |
#+-----+--------+---------+
#3 rows in set (0.00 sec)

# 修改方式1
# 修改回user表
ALTER VIEW test_view1 AS SELECT * FROM user;
# 查看
SELECT * FROM test_view1;
#+----+-----------+------+
#| id | name      | age  |
#+----+-----------+------+
#|  1 | 张三      |   18 |
#|  2 | 李四      |   20 |
#|  3 | 王麻子    |  200 |
#+----+-----------+------+
#3 rows in set (0.00 sec)

4、删除视图

DROP VIEW test_view1;

一、修改视图,基表会跟着改吗?

答案:会改变,证明如下

# 创建一个 用户表
CREATE TABLE `user` (
	id INT(11) PRIMARY KEY AUTO_INCREMENT,
	`name` VARCHAR(255),
	age INT(11)
);
# 创建一个 动物表
CREATE TABLE `animal` (
	id INT(11) PRIMARY KEY AUTO_INCREMENT,
	`name` VARCHAR(255),
	`master` INT(11)
);
# 写三个用户
INSERT INTO `USER` (`name`,`age`) VALUES ('张三',18),('李四',20),('王麻子',200);
# 写三个动物,并对应张三和李四两个用户
INSERT INTO animal (`name`,`master`) VALUES ('小白',1),('小黑',1),('小黄',2);
# 查找所有的用户          --------第一个查询语句---------
SELECT * FROM user;
# 创建一个多表查询的视图
CREATE VIEW test_view as SELECT u.*,a.name animal_name FROM `USER` u,animal a WHERE u.id = a.master;
# 查看视图               --------第二个查询语句---------
SELECT * FROM test_view;
# 修改视图
UPDATE test_view SET NAME = '我擦' WHERE id = 1;
# 再次查看视图,发现更改了   --------第三个查询语句---------
SELECT * FROM test_view;
# 再次查看用户,发现更改了   --------第四个查询语句---------
SELECT * FROM user;
# 删除 视图和 表格
DROP VIEW test_view;
DROP TABLE user;
DROP TABLE `animal`;

第一个查询

在这里插入图片描述

第二个查询

在这里插入图片描述

第三个查询

在这里插入图片描述

第四个查询

在这里插入图片描述

二、修改基表,视图会变化吗?

答案:会改变,证明如下

# 创建一个 用户表
CREATE TABLE `user` (
	id INT(11) PRIMARY KEY AUTO_INCREMENT,
	`name` VARCHAR(255),
	age INT(11)
);
# 创建一个 动物表
CREATE TABLE `animal` (
	id INT(11) PRIMARY KEY AUTO_INCREMENT,
	`name` VARCHAR(255),
	`master` INT(11)
);
# 写三个用户
INSERT INTO `USER` (`name`,`age`) VALUES ('张三',18),('李四',20),('王麻子',200);
# 写三个动物,并对应张三和李四两个用户
INSERT INTO animal (`name`,`master`) VALUES ('小白',1),('小黑',1),('小黄',2);
# 创建一个多表查询的视图
CREATE VIEW test_view as SELECT u.*,a.name animal_name FROM `USER` u,animal a WHERE u.id = a.master;
# 查看视图                  --------第一个查询语句---------
SELECT * FROM test_view;
# 修改animal表
UPDATE animal SET NAME = '我也不知道取什么名字了' WHERE id = 1;
# 再次查看视图,发现更改了         --------第二个查询语句---------
SELECT * FROM test_view;
# 再次查看animal,发现更改了         --------第三个查询语句---------
SELECT * FROM animal;
# 删除 视图和 表格
DROP VIEW test_view;
DROP TABLE user;
DROP TABLE `animal`;

第一个查询

在这里插入图片描述

第二个查询

在这里插入图片描述

第三个查询

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/516811.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI孙燕姿项目实现

最近在b站刷到很多关于ai孙笑川唱的歌曲,加上最近大火的ai孙燕姿, 这下“冷门歌手”整成热门歌手了 于是写下一篇文章, 如何实现属于的ai歌手。 注意滥用ai,侵犯他人的名誉是要承担法律责任的 下面是一些所需的文件链接&#xff…

教你轻松玩转-ChatGPT或生成类大模型--助你成为未来高端黄金职业人

文章目录 1、前言2、大模型--巴拉巴拉小魔仙3、巴拉巴拉小魔仙-指导方向3、二次元美女或科幻图-魔法4、Cosplay-魔法5、魔法师5.1、系统消息5.2、小样本学习5.3、非对话场景5.4、使用明确的指令5.5、最后重复一遍指令5.5、对输出的操作5.6、添加语法5.7、把任务分解5.8、思维链…

如何开发网上独立商城?

互联网快速发展时代,越来越多的商家选择搭建自己的网上独立商城。网上独立商城是指一种完全独立于第三方平台的电子商务网站,可以帮助企业拥有更多的自主权,提高品牌影响力,降低营销成本,并且可以拥有更多的数据分析和…

java爬虫如何使用代理

在Java程序中使用代理是爬取网站数据的常见技术之一。代理服务器允许你通过它来访问某个网站,从而让你可以隐藏自己的真实IP地址或者规避一些地理限制等问题。 本文章将介绍如何使用Java实现网络爬虫代理。我们首先将介绍Java提供的代理相关类和方法,然…

详解C++类对象(中篇)——超详细

目录 前言:类的6个默认成员函数 一, 构造函数 1. 概念 2. 特性 二, 析构函数 2.1 概念 2.2 特性 2.3 牛刀小试 三, 拷贝构造函数 3.1概念 3. 2 特点 四, 赋值运算符重载 4. 1 运算符重载 五&#xff0…

【Redis高级应用】最佳实践

文章目录 Redis键值设计优雅的key结构拒绝BigKeyBigKey的危害如何发现BigKey如何删除BigKey 恰当的数据类型总结 批处理优化Pipeline我们的客户端与redis服务器是这样交互的MSetPipeline 集群下的批处理串行化执行代码实践 服务器端优化-持久化配置服务器端优化-慢查询优化什么…

Maven构建学习

目录 nacos是用来干什么的 Maven构建生命周期 Clean 生命周期 nacos是用来干什么的 在 Maven 项目中,pom.xml 文件中包含了项目的基本信息,通常包括: 能分别解释一下这里的 、、 maven-antrun-plugin分别起什么作用吗? rocke…

是德MSOX4104A 数字存储示波器

4000 X 系列拥有一系列引以为傲的配置,包括采用了电容触摸屏技术的 12.1 英寸显示屏、InfiniiScan 区域触摸触发、100 万波形/秒捕获率、MegaZoom IV 智能存储器技术和标配分段存储器。 MSOX4104A数字存储示波器 主要特性与技术指标 体验超凡速度: •1…

MQTT服务器搭建流程-QT开发客户端

目录 一、环境准备 二、客户端开发 2.1 下载并且编译MQTT 2.2 客户端开发准备 2.3 客户端开发源码 三、测试演示 一、环境准备 操作系统:centos7.5 链接: https://pan.baidu.com/s/1BRYQ13RTIgkyD0GDsXB1jQ 提取码: 29e2 MQTT服务器 使用EMQX作为服务器 安…

SpringCloud Alibaba 服务注册

一、SpringCloud Alibaba简介 Spring官网:https://spring.io/projects/spring-cloud-alibabaGitHub:https://github.com/alibaba/spring-cloud-alibabaGitHub中文文档:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-…

AFG1062任意波形/函数发生器 产品资料

AFG1000 任意波形/函数发生器,提供 25MHz 或 60MHz 带宽,2 个输出通道,在整个带宽内 1mVpp 到 10Vpp 输出振幅,泰克 AFG1000 任意波形/函数发生器可以生成各种实验室测试所需波形。 *重要的是,它在泰克任意函数发生器系…

卫龙上市后首份财报:营收净利双降、去年净利下滑8成

当你吃辣条的时候,你在吃什么? 味道?口感?还是童年的记忆? 近日,卫龙美味全球控股有限公司(下称“卫龙”)发布了上市后的首份年报。 卫龙是一家辣味休闲食品的企业,根…

portraiture插件下载安装PS磨皮滤镜插件

coco玛奇朵是讲磨皮插件的安装和使用方法,用的PS版本是PS2023版,不用你学很复杂的高低频磨皮美白祛痘技术,也不需要懂什么是ps磨皮中性灰,也不用各种骚操作,只需要一键就能磨皮。对于摄影爱好者来说,他真的…

微服务架构路线

一、我为什么选择微服务架构? 众所周知,单体应用程序,由于其种种不足,几乎不支持敏捷方法。如果你想为一个大型或复杂的业务创建一个软件项目,最好从微服务架构开始。 微服务架构是一种灵活的架构,可以显著…

【python 多线程】零基础也能轻松掌握的学习路线与参考资料

Python 多线程指的是在同一时间内,Python 程序中存在多个线程同时执行的情况。Python 中的线程是轻量级的,由操作系统进行调度和处理。多线程的学习对于想要进行 Python 并发编程的程序员来说是非常重要的。本文将提供 Python 多线程的学习路线、参考资料…

Talk预告 | 港中文博士生赖昕:SphereFormer大幅提升LiDAR点云远处识别性能

本期为TechBeat人工智能社区第496期线上Talk! 北京时间5月11日(周四)20:00,香港中文大学三年级博士生—赖昕的Talk将准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “SphereFormer大幅提升LiDAR点云远处识别性能”,届时…

Talk预告 | 大连理工大学IIAU Lab在读博士生严彬:走向通用实例感知

本期为TechBeat人工智能社区第495期线上Talk! 北京时间5月10日(周三)20:00,大连理工大学IIAU Lab在读博士生—严彬的Talk将准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “走向通用实例感知”,届时将介绍和探讨通用实…

Nginx从入门到精通

一、 Nginx能做什么 1.反向代理 2.负载均衡 3.HTTP服务器(包含动静分离) 4.正向代理 例如: 我当前配置的服务器 1、配置http 2、配置https 3、配置反向代理 [rootasia~]# cat /etc/nginx/nginx.conf # For more information on configur…

【Java零基础入门篇】第 ④ 期 - 继承(一)

【Java零基础入门篇】第 ④ 期 - 继承(一) 博主:命运之光专栏:Java零基础入门 学习目标 1.掌握继承性的主要作用、实现、使用限制; 2.掌握this和super的含义及其用法; 3.掌握方法覆写的操作; 4.…

windows环境安装使用nginx,redis详解

01-redis windows版下载地址: Releases microsoftarchive/redis GitHub 直接运行.msi的安装包,一直next,直到下面界面,勾选上再next 这一步选择端口,然后next(后面可以通过配置文件修改的) 选择最大缓存容…