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

MySQL视图与数据表CRUD对比学习笔记

一、视图基础概念

视图(View)是虚拟表,本身不存储真实数据,仅保存查询语句;数据来源于底层基础表,访问视图时动态查询基表数据。

数据表(Table)是实体表,磁盘存储真实行数据,拥有完整字段、索引、约束。

二、创建操作对比

1. 数据表创建

sql

CREATE TABLE student(

id INT PRIMARY KEY AUTO_INCREMENT,

name VARCHAR(20) NOT NULL,

age INT,

class_id INT

);

- 存储:磁盘生成物理文件,分配存储空间

- 约束:可设置主键、外键、非空、自增、唯一、默认值

- 索引:创建后可单独建立索引提升查询

2. 视图创建

sql

CREATE VIEW v_student_class AS

SELECT s.id,s.name,c.class_name

FROM student s

LEFT JOIN class c ON s.class_id=c.id;

- 存储:仅保存SELECT查询逻辑,无物理数据

- 约束:不支持主键、自增、外键,仅继承基表字段约束

- 索引:标准MySQL视图无法建立索引(物化视图除外)

创建核心差异

维度 数据表 视图

存储介质 物理存储真实数据 仅存储查询SQL,无数据

依赖关系 独立存在,不依赖其他表(外键除外) 依赖1张/多张基表,基表删除视图失效

约束支持 完整约束体系 仅复用基表约束,无法新增

三、更新(INSERT/UPDATE)操作对比

1. 数据表更新

sql

-- 新增

INSERT INTO student(name,age) VALUES('张三',18);

-- 修改

UPDATE student SET age=19 WHERE id=1;

- 限制:仅受自身字段约束、事务、触发器限制

- 影响:直接修改磁盘原始数据,所有关联查询同步变化

2. 视图更新(可更新视图)

sql

-- 单表简单视图支持更新

CREATE VIEW v_stu_simple AS SELECT id,name,age FROM student;

UPDATE v_stu_simple SET name='小张' WHERE id=1;

INSERT INTO v_stu_simple(name,age) VALUES('李四',17);

视图不可更新场景

1. 包含多表JOIN连接

2. 使用聚合函数:SUM/COUNT/MAX/GROUP BY

3. DISTINCT、UNION、子查询、计算字段

4. ALGORITHM=TEMPTABLE算法视图

更新核心差异

1. 数据表:无额外限制,可自由增改;视图有严格语法限制,复杂视图无法更新

2. 数据流向:视图更新本质是修改底层基表,视图本身不保存数据

3. 权限:修改视图需要同时拥有视图查询权限+基表修改权限

四、删除操作对比

1. 数据表删除

(1)删除表内数据

sql

DELETE FROM student WHERE id=1; -- 删除单行数据

TRUNCATE TABLE student; -- 清空全表,重置自增主键

(2)删除整张表结构

sql

DROP TABLE IF EXISTS student;

- DROP:直接销毁物理文件,数据、索引、约束全部永久删除,不可恢复(无备份时)

- TRUNCATE:清空数据,保留表结构,速度远快于DELETE

2. 视图删除

(1)删除视图本身(无删除视图数据语法)

sql

DROP VIEW IF EXISTS v_student_class;

- 视图无“删除行数据”操作,如需删数据只能操作基表

- DROP VIEW仅删除查询逻辑,不会影响底层数据表及真实数据

删除核心差异

操作 数据表 视图

删除行数据 支持DELETE/TRUNCATE,直接清除物理数据 不支持,必须操作基表

删除结构 DROP TABLE销毁表+全部数据 DROP VIEW仅删除虚拟查询定义,基表完好

数据丢失风险 高,DROP/TRUNCATE会永久丢失业务数据 无,删除视图不影响原始业务数据

五、视图优缺点总结

优点

1. 简化复杂查询:多表关联逻辑封装,业务端直接查询视图

2. 权限隔离:仅开放部分字段给用户,隐藏敏感字段(手机号、工资)

3. 统一数据口径:复杂统计逻辑统一维护,一处修改全局生效

4. 数据安全:限制用户只能访问视图,无法直接修改底层完整数据表

缺点

1. 性能损耗:每次查询视图都会执行底层SELECT,复杂视图效率低于

http://www.jsqmd.com/news/1131766/

相关文章:

  • DeepFM vs DCN vs xDeepFM:3 大 CTR 预估模型核心差异与 TensorFlow 2.x 实现对比
  • 2026最新7款AI编程工具实测 基础版免费深度对比
  • AIGC 全生命周期风控拆解:企业应该先补哪块短板?
  • 【光学】高斯光束在F-P干涉仪中的传输模拟附matlab代码
  • LiteSeg 与 PP-LiteSeg-T 2022 对比评测:3个指标解析轻量分割模型5年演进
  • 用Ai开发微信小程序,没想到那么简单(一)
  • 基于MATLAB图像处理的金属表面缺陷检测与工业量测系统设计与实现
  • WindiskWriter:Mac用户制作Windows启动盘的专业解决方案与技术解析
  • Linux 网口驱动调试实战:从 eth0 节点缺失到 DMA 初始化失败的 5 步排查法
  • SO-101 Robot From Sim-to-Real With NVIDIA Isaac
  • 如何快速提升视频画质:终极AI媒体增强指南
  • USB 控制传输深度剖析:11个标准请求与Windows驱动开发实战
  • [特殊字符] 走01docker初始入门
  • 企业认证与安全体系(九):单点登录 SSO 到底是怎么实现的?一篇讲透企业统一身份认证
  • 【独家首发】基于非洲秃鹫优化算法AVOA-GMDH的风电数据回归预测研究Matlab实现
  • 计算机导论_第4章_笔记
  • 5分钟掌握SPT-AKI存档编辑器:逃离塔科夫单机版终极修改指南
  • ARM Cortex-A78 架构解析:5nm 工艺下 IPC 提升 7% 与 PPA 平衡设计
  • 刨根问底:手写一个 C++ 深度学习框架,把 Transformer 扒个干净
  • 一个中层是怎么突然变强的?看完你就是中层的天花板
  • 小产月子一般坐多少天?科学小产休养与子宫修护指南
  • a place to crash临时过夜落脚的地方;凑合一晚的住处
  • 【VRP问题】基于遗传算法求解应急物资配送路径最低成本优化问题附Matlab代码
  • Java Swing贪吃蛇游戏完整实现(MVC架构+MySQL排行榜+音效系统)
  • 大模型:MessagesPlaceholder 是什么?
  • 3种CNN架构对比:从零搭建、VGG16迁移学习与ResNet50在猫狗识别上的性能实测
  • 如何用15分钟完成传统需要3小时的Hackintosh配置?OpCore-Simplify的智能革命
  • 【OpenHarmony/HarmonyOs 】单位换算引擎实战:长度、面积、体积、温度、速度的端侧计算方案
  • YOLOv3 与 RealSense D435i 协同:600张图像训练,实现多目标无序抓取位姿估计
  • Gensim 4.3.3 Word2Vec 参数调优实战:5个关键参数对藏文词向量质量的影响