MySQL视图与数据表CRUD对比学习笔记 一、视图基础概念视图View是虚拟表本身不存储真实数据仅保存查询语句数据来源于底层基础表访问视图时动态查询基表数据。数据表Table是实体表磁盘存储真实行数据拥有完整字段、索引、约束。二、创建操作对比1. 数据表创建sqlCREATE TABLE student(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20) NOT NULL,age INT,class_id INT);- 存储磁盘生成物理文件分配存储空间- 约束可设置主键、外键、非空、自增、唯一、默认值- 索引创建后可单独建立索引提升查询2. 视图创建sqlCREATE VIEW v_student_class ASSELECT s.id,s.name,c.class_nameFROM student sLEFT JOIN class c ON s.class_idc.id;- 存储仅保存SELECT查询逻辑无物理数据- 约束不支持主键、自增、外键仅继承基表字段约束- 索引标准MySQL视图无法建立索引物化视图除外创建核心差异维度 数据表 视图存储介质 物理存储真实数据 仅存储查询SQL无数据依赖关系 独立存在不依赖其他表外键除外 依赖1张/多张基表基表删除视图失效约束支持 完整约束体系 仅复用基表约束无法新增三、更新INSERT/UPDATE操作对比1. 数据表更新sql-- 新增INSERT INTO student(name,age) VALUES(张三,18);-- 修改UPDATE student SET age19 WHERE id1;- 限制仅受自身字段约束、事务、触发器限制- 影响直接修改磁盘原始数据所有关联查询同步变化2. 视图更新可更新视图sql-- 单表简单视图支持更新CREATE VIEW v_stu_simple AS SELECT id,name,age FROM student;UPDATE v_stu_simple SET name小张 WHERE id1;INSERT INTO v_stu_simple(name,age) VALUES(李四,17);视图不可更新场景1. 包含多表JOIN连接2. 使用聚合函数SUM/COUNT/MAX/GROUP BY3. DISTINCT、UNION、子查询、计算字段4. ALGORITHMTEMPTABLE算法视图更新核心差异1. 数据表无额外限制可自由增改视图有严格语法限制复杂视图无法更新2. 数据流向视图更新本质是修改底层基表视图本身不保存数据3. 权限修改视图需要同时拥有视图查询权限基表修改权限四、删除操作对比1. 数据表删除1删除表内数据sqlDELETE FROM student WHERE id1; -- 删除单行数据TRUNCATE TABLE student; -- 清空全表重置自增主键2删除整张表结构sqlDROP TABLE IF EXISTS student;- DROP直接销毁物理文件数据、索引、约束全部永久删除不可恢复无备份时- TRUNCATE清空数据保留表结构速度远快于DELETE2. 视图删除1删除视图本身无删除视图数据语法sqlDROP VIEW IF EXISTS v_student_class;- 视图无“删除行数据”操作如需删数据只能操作基表- DROP VIEW仅删除查询逻辑不会影响底层数据表及真实数据删除核心差异操作 数据表 视图删除行数据 支持DELETE/TRUNCATE直接清除物理数据 不支持必须操作基表删除结构 DROP TABLE销毁表全部数据 DROP VIEW仅删除虚拟查询定义基表完好数据丢失风险 高DROP/TRUNCATE会永久丢失业务数据 无删除视图不影响原始业务数据五、视图优缺点总结优点1. 简化复杂查询多表关联逻辑封装业务端直接查询视图2. 权限隔离仅开放部分字段给用户隐藏敏感字段手机号、工资3. 统一数据口径复杂统计逻辑统一维护一处修改全局生效4. 数据安全限制用户只能访问视图无法直接修改底层完整数据表缺点1. 性能损耗每次查询视图都会执行底层SELECT复杂视图效率低于