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

MYSql------视图

什么是视图

  • 定义:视图是一种虚拟的表,它是基于 SQL 查询语句的结果集而建立的。视图并不存储实际的数据,而是根据查询语句从一个或多个实际的表中提取数据,类似于存储在数据库中的预定义查询。
  • 作用
    • 简化复杂查询:可以将复杂的多表连接和筛选操作封装在视图中,用户只需对视图进行简单查询,无需重复编写复杂的 SQL 语句。
    • 数据安全:可以通过视图控制用户对数据的访问权限,只暴露部分表中的数据,隐藏敏感信息或数据列。
    • 逻辑数据独立性:可以在不改变数据库表结构的情况下,对用户提供不同的数据逻辑视图,方便对数据进行重新组织和展示。

视图操作

创建视图
-- 创建一个简单的视图
CREATE VIEW simple_view AS
SELECT column1, column2
FROM table1
WHERE condition;

代码解释

  • CREATE VIEW 是创建视图的关键字。
  • simple_view 是视图的名称,可以根据需要自行命名。
  • AS 后面是一个完整的 SQL 查询语句,此语句会定义视图的数据来源和筛选条件。例如,上述语句会从 table1 中选取 column1column2 列,并根据 condition 进行筛选。
修改视图
-- 修改视图的定义
ALTER VIEW simple_view AS
SELECT column1, column3
FROM table1
WHERE new_condition;

代码解释

  • ALTER VIEW 用于修改已存在视图的定义。
  • 此语句将 simple_view 的查询条件修改为 new_condition,并且将选取的列修改为 column1column3
删除视图
-- 删除视图
DROP VIEW IF EXISTS simple_view;

代码解释

  • DROP VIEW 用于删除视图。
  • IF EXISTS 是可选的,如果视图存在则删除,如果不存在也不会报错。
查看视图
-- 查看所有视图
SHOW FULL VIEWS;

-- 查看视图的详细信息
SHOW CREATE VIEW simple_view;

代码解释

  • SHOW FULL VIEWS 可以查看数据库中的所有视图列表。
  • SHOW CREATE VIEW simple_view 可以查看 simple_view 视图的详细创建语句,包括其定义的 SQL 查询,方便了解视图的具体构成。

小结

视图在 MySQL 中是一种非常有用的工具,它可以提高查询的便利性,将复杂的查询逻辑封装起来,为用户提供简洁的查询接口。

  • 通过创建视图,可以灵活地根据不同的业务需求对数据进行组织和展示,同时可以对用户的访问权限进行控制,保障数据的安全性。
  • 在使用视图时,需要注意其只是一种虚拟的表,它的数据来源于实际的表,当表的数据发生变化时,视图的数据也会相应变化。
  • 创建和修改视图需要谨慎,因为它们会影响到基于这些视图的查询结果,要确保修改后的视图满足业务需求和数据一致性。

在这里插入图片描述

视图和表有什么区别

数据存储

  • :表是存储实际数据的物理结构,数据在表中持久化存储,占用磁盘空间。例如,创建一个 students 表:
CREATE TABLE students (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    age INT
);
INSERT INTO students (id, name, age) VALUES (1, 'Alice', 20);

在这个例子中,数据被实际存储在 students 表中,当插入数据时,数据会被写入磁盘。

  • 视图:视图不存储实际的数据,它只是一个基于 SQL 查询的虚拟表,是从一个或多个表中检索数据的结果集的映射。例如,创建一个视图:
CREATE VIEW young_students AS
SELECT * FROM students WHERE age < 25;

这里的 young_students 视图并不存储数据,它只是一个从 students 表中筛选出年龄小于 25 岁的学生的查询结果,当对视图进行查询时,会动态执行其对应的 SQL 语句。

数据更新

  • :可以对表中的数据进行插入、更新和删除操作,例如:
INSERT INTO students (id, name, age) VALUES (2, 'Bob', 22);
UPDATE students SET age = 23 WHERE id = 1;
DELETE FROM students WHERE id = 2;
  • 视图:对视图的更新操作具有一定的局限性。对于简单的视图,如果其基础查询不涉及复杂的连接、聚合函数、DISTINCTGROUP BY 等操作,且满足一定的条件,可能可以更新。但对于复杂的视图,如:
CREATE VIEW avg_age AS
SELECT AVG(age) AS average_age FROM students;

这个视图计算了 students 表中年龄的平均值,它是一个聚合结果,不能对其进行插入、更新或删除操作,因为更新这个视图的结果没有明确的逻辑对应到表中的数据修改。

性能

  • :表的性能取决于表的大小、索引、存储引擎等因素。直接对表进行操作可能会涉及大量的数据读写操作。
  • 视图:视图的性能主要取决于其基础查询的性能。如果视图的查询语句复杂,包含多表连接、复杂的筛选和聚合操作,对视图的查询可能会比直接查询表慢。但如果视图简化了复杂的查询,通过优化其基础查询可以提高性能。

维护

  • :表的维护包括数据的插入、删除、更新、添加或删除索引、修改表结构等操作,这些操作会直接影响表中存储的数据。
  • 视图:视图的维护主要涉及修改视图的定义,如修改其基础查询语句,不会影响存储的数据,但可能影响依赖该视图的查询结果。

用途

  • :表是数据库的基础,用于存储原始数据,是构建数据库的基本单元。
  • 视图:视图用于简化复杂的查询,提供数据安全性(通过控制用户对视图的访问),或为不同用户或应用程序提供定制的数据逻辑表示,以隐藏表的部分细节。

权限控制

  • :可以为表设置不同的权限,如插入、更新、删除、查询权限等,权限直接针对表的数据。
  • 视图:可以为视图设置权限,允许用户仅通过视图访问表的部分数据,即使表中有其他敏感数据,也可以通过限制用户对视图的访问来保护数据。

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

相关文章:

  • 面向对象的思维hong
  • Vue3 + Vite + Electron + Ts 项目快速创建
  • 链上数据分析基础课:Puell倍数(Puell Multiple)
  • 【学习笔记】数据结构(十)
  • 前端小案例——520表白信封
  • 谷歌浏览器的书签同步功能详解
  • 基于transformer的目标检测:DETR
  • KAGGLE竞赛实战2-捷信金融违约预测竞赛-part1-数据探索及baseline建立
  • 结构型模式2.桥接模式
  • springboot配置线程池
  • 今日总结 2025-01-06
  • 软件工程大复习之(四)——面向对象与UML
  • win32汇编环境,在窗口程序中画五边形与六边形
  • Unity3D PBR光照计算公式推导详解
  • 土建施工员考试题库及答案
  • 社交新零售下开源 AI 智能名片 2+1 链动模式 S2B2C 商城小程序的促单策略研究
  • MR20强抗干扰一体式IO模块的革新力量
  • KACL:Knowledge-Adaptive Contrastive Learning for Recommendation
  • C++ 原子变量
  • Bash语言的函数实现
  • Spring Boot 项目离线环境手动构建指南
  • Android客制化------7.0设置壁纸存在的一些问题
  • 神经网络第一课
  • HTML语言的数据库交互
  • 【JavaWeb学习Day09】
  • 有限元分析学习——Anasys Workbanch第一阶段笔记(7)对称问题预备水杯案例分析