搞懂视图!MySQL 数据表、视图核心差异实战总结
一、核心概念区分
1. 数据表(基表)
物理存储实体,会在磁盘上真实保存行数据、字段结构、索引;是数据库存储数据的底层载体。
2. 视图(虚表)
逻辑虚拟表,不存储真实数据,仅保存一条 SELECT 查询语句;访问视图时动态从基表计算数据。
2.特点:为用户集中数据,简化用户的数据查询和处理操作。
屏蔽数据库的复杂性。
简化用户权限的管理。
便于数据共享。
可以重新组织数据,以便输出到其他应用程序中使用。
二、创建语法对比
数据表 CREATE TABLE
CREATE TABLE book( 图书编号 CHAR(20) PRIMARY KEY, 书名 VARCHAR(50) NOT NULL, 图书类别 VARCHAR(20) );无字段存储定义,仅封装查询逻辑;
OR REPLACE覆盖已有视图;WITH CHECK OPTION限制增改数据必须匹配 WHERE 条件;
创建仅保存查询文本,不占用数据存储空间。
视图 CREATE VIEW
CREATE OR REPLACE VIEW jsj_book AS SELECT * FROM book WHERE 图书类别='计算机' WITH CHECK OPTION;语法格式
CREATE [OR REPLACE] VIEW 视图名 [(自定义列名列表)] AS SELECT 查询语句 [WITH [CASCADED | LOCAL] CHECK OPTION];关键字详解
OR REPLACE:如果同名视图已存在,直接覆盖重定义,避免视图已存在报错(列名列表):手动指定视图字段别名,别名数量必须和SELECT查询字段数量完全一致WITH CHECK OPTION:约束通过视图INSERT/UPDATE的数据,必须满足WHERE视图
筛选条件
CASCADED(默认):递归校验所有嵌套依赖视图的 WHERE 条件LOCAL:仅校验当前视图自身 WHERE 条件,不检查下层视图
创建视图硬性限制(SELECT 语句不能包含以下内容)
FROM子查询、系统变量、预处理参数UNION、聚合函数、GROUP BY、DISTINCT、HAVING多表关联 JOIN(多表视图会限制增删改)、
ORDER BY特殊场景
三、修改语法格式
1. 修改数据表 ALTER TABLE
可增删字段、修改字段类型、增减约束、调整索引、修改表名:
-- 新增字段 ALTER TABLE book ADD 单价 DECIMAL(6,2); -- 修改字段类型 ALTER TABLE book MODIFY 书名 VARCHAR(100);2. 修改视图 ALTER VIEW
仅能重写内部 SELECT 查询逻辑,无法修改字段约束、存储结构:
ALTER VIEW jsj_book AS SELECT 图书编号,书名,单价 FROM book WHERE 图书类别='计算机';四、删除语法对比
删除数据表 DROP TABLE
DROP VIEW IF EXISTS jsj_book;直接删除磁盘中全部数据、表结构、索引;
若存在视图 / 外键依赖,删除会报错。
删除视图 DROP VIEW
DROP VIEW IF EXISTS jsj_book;仅删除保存的查询语句,不会影响底层基表和真实数据;
仅清除逻辑定义,磁盘数据完全保留。
五、增删改操作对比(核心区别)
数据表
1.天然支持INSERT/UPDATE/DELETE,不受额外限制,可直接修改磁盘原始数据
INSERT INTO book VALUES('TP001','MySQL教程','计算机'); UPDATE book SET 单价=45 WHERE 图书编号='TP001'; DELETE FROM book WHERE 图书类别='文学';视图
仅单表、无聚合函数、无 GROUP BY、无多表连接的视图才可增删改;多表 / 聚合视图完全不可更新:
1.不可更新场景(聚合、多表、GROUP BY)
-- 该视图含GROUP BY,无法执行INSERT/UPDATE/DELETE CREATE VIEW sale_avg AS SELECT 书名,AVG(订购册数) FROM jsj_sell GROUP BY 书名;2.限制:多表视图一次修改只能操作一张基表,不支持同时修改两张表字段;WITH CHECK OPTION强制校验新增 / 修改数据符合视图过滤条件。
六、查询操作对比
相同点
查询语法完全一致:SELECT 字段 FROM 表/视图 WHERE 条件
-- 查表 SELECT * FROM book; -- 查视图 SELECT * FROM jsj_book;不同点
查表:直接读取磁盘存储数据,速度更快;
查视图:执行封装的 SELECT 语句,动态关联基表计算结果;基表新增字段不会同步到视图,基表删除字段会导致视图失效。
七、总结
数据表是数据存储载体,负责永久保存业务原始数据;视图是查询封装工具,用于简化查询、控制数据访问权限。
创建 / 修改 / 删除语法完全分离:表操作面向存储结构,视图操作面向查询逻辑。
DML 操作差异最大:数据表自由增删改;视图仅简单单表视图支持更新,且存在条件校验约束。
视图不替代数据表,二者搭配使用:数据表存原始数据,视图对外提供简化、安全的数据访问接