当前位置: 首页 > article >正文

【MySQL 保姆级教学】详细讲解视图--(15)

视图

  • 1. 为什么要有视图?
  • 2.视图的定义和特点
  • 3. 创建视图
  • 4. 视图的使用举例
    • 4.1 创建表并插入数据
    • 4.2 举例
  • 5. 视图和基表之间有什么联系呢?

1. 为什么要有视图?

当我们频繁地使用用多表查询和复合查询出的结果时,就需要频繁的使用多表查询和复合查询。

能不能把多表查询和复合查询的结果呢储存起来呢?并且修改查询的内容时,对应表的内容也被修改呢?

为了解决这一问题,我们就应该学习视图了

2.视图的定义和特点

MySQL的视图(View)是一种虚拟表,其内容由查询定义。从本质上讲,视图并不是以存储数据的形式存在的实体表,而是根据定义视图时所使用的查询语句动态生成的一组数据。这意味着,当你查询视图时,MySQL实际上执行的是该视图背后定义的SQL查询语句,返回的数据是基于这些查询语句从一个或多个实际表中提取出来的。(第6结还会细讲)

视图的主要特点和优势包括:

  • 简化查询视图可以将复杂的查询语句封装起来,使用户能够以更简单的方式查询数据,特别是当涉及到多个表的联接操作时。
  • 数据抽象:通过视图,可以隐藏表的真实结构,对外提供一个简化的数据接口,有助于保护数据库的实际设计。
  • 增强安全性:可以创建视图来限制用户对表中某些敏感数据的访问,例如,只允许用户查看某些特定的列或行。
  • 逻辑独立性:当底层表的结构发生变化时,通过调整视图的定义,可以保持应用程序不受影响,从而提高了系统的灵活性。

3. 创建视图

创建视图的语法如下:

CREATE VIEW view_name [(column_list)]
AS select_statement

更新视图的语法:

UPDATE view_name 
SET ... [where...]
  • column_list:可选参数,用于显式指定视图列的名称。
  • select_statement:定义视图的SELECT查询语句。

4. 视图的使用举例

4.1 创建表并插入数据

创建表:

CREATE TABLE students (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    age INT NOT NULL,
    major VARCHAR(100)
);

插入数据:

INSERT INTO students (name, age, major) VALUES
('Alice', 20, 'Computer Science'),
('Bob', 21, 'Mathematics'),
('Charlie', 22, 'Physics');

在这里插入图片描述

4.2 举例

  1. 创建视图,只需要studentsname列和major
    命令:

    create view myview as select name,major from students;
    

    在这里插入图片描述

  2. 查询视图

    select * from myview;
    

    在这里插入图片描述

  3. 修改视图中的数据后查询基表students的数据

    update myview set name='alice' where name ='Alice';
    
    select * from students;
    

    在这里插入图片描述
    当修改视图中的数据时,基表的数据会改变。

  4. 修改基表students中的数据后查询的视图的数据

    update students set name='bob' where name ='Bob';
    
    select * from myview;
    

    在这里插入图片描述
    当修改基表的数据时,视图的数据会改变。

5. 视图和基表之间有什么联系呢?

从本质上讲,视图并不是以存储数据的形式存在的实体表,而是根据定义视图时所使用的查询语句动态生成的一组数据。这意味着,当你查询视图时,MySQL实际上执行的是该视图背后定义的SQL查询语句,返回的数据是基于这些查询语句从一个或多个实际表中提取出来的。

查询一下上面创建的视图myview在Linux中的的文件

# 进入MySQL中的test数据库目录
cd /var/lib/mysql/test

# 显示数据库中的文件
ls 

在这里插入图片描述
视图文件中存储的是什么呢?
打开myview文件,看一看什么:vim myview.frm
在这里插入图片描述
这张图片显示了一个 MySQL 视图的详细信息,其中红色框内的内容是视图的定义查询语句

这段 SQL 代码表示一个名为 students 的表,从中选择了 namemajor 这两个字段,并分别给它们起了别名 namemajor。这个查询语句是创建视图时使用的原始 SQL 语句。

使用视图查询本质上是执行定义视图时的语句

如:

# 创建一个视图
create view myview as select name, major from studnets;

# 查询视图的内容
select * from myview;  
# 实际上是执行
select * from
select `test`.`students`.`name` AS `name`,`test`.`students`.`major` AS `major` from `test`.`students`
# 其实就是执行
select name, major from students; 

在这里插入图片描述
如果对视图进行怎删改查,其实就是对基表进行增删改查(MySQL内部自己操作),视图只是一个查询的结果


http://www.kler.cn/a/395539.html

相关文章:

  • Molecular signatures database (MSigDB) 3.0
  • java 随机生成验证码
  • 【C#设计模式(11)——外观模式(Facade Pattern)】
  • Leecode刷题C语言之统计好节点的数目
  • PVE纵览-安装系统卡“Loading Driver”的快速解决方案
  • Serverless架构在实时数据处理中的应用
  • 五、函数封装及调用、参数及返回值、作用域、匿名函数、立即执行函数
  • 利用OpenAI进行测试需求分析——从电商网站需求到测试用例的生成
  • 移动端异构运算技术 - GPU OpenCL 编程(基础篇)
  • 论文笔记(五十六)VIPose: Real-time Visual-Inertial 6D Object Pose Tracking
  • Hadoop高可用集群工作原理
  • WSADATA 关键字详细介绍
  • 深度学习之循环神经网络(RNN)
  • 怎样选择合适的服务器租用呢?
  • Array数组方法
  • 【大数据】MySQL与Elasticsearch的对比分析:如何选择适合的查询解决方案
  • TCP为什么需要三次握手和四次挥手,有哪些需要注意的地方?
  • Pandas 数据结构
  • CCI3.0-HQ:用于预训练大型语言模型的高质量大规模中文数据集
  • pytorch中数据和模型都要部署在cuda上面
  • ctfshow-web入门-JWT(web345-web350)
  • 电动车租赁支付宝免押小程序开发方案php+uniapp
  • vue项目PC端和移动端实现在线预览pptx文件
  • YOLOv7-0.1部分代码阅读笔记-metrics.py
  • 三正科技笔试题
  • 【linux】centos7 换阿里云源