搞懂视图!MySQL 数据表、视图核心差异实战总结

📅 2026/7/5 3:05:18 👁️ 阅读次数 📝 编程学习
搞懂视图!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];
关键字详解
  1. OR REPLACE:如果同名视图已存在,直接覆盖重定义,避免视图已存在报错

  2. (列名列表):手动指定视图字段别名,别名数量必须和SELECT查询字段数量完全一致

  3. WITH CHECK OPTION:约束通过视图INSERT/UPDATE的数据,必须满足WHERE视图

    筛选条件

    • CASCADED(默认):递归校验所有嵌套依赖视图的 WHERE 条件

    • LOCAL:仅校验当前视图自身 WHERE 条件,不检查下层视图

创建视图硬性限制(SELECT 语句不能包含以下内容)
  1. FROM子查询、系统变量、预处理参数

  2. UNION、聚合函数、GROUP BYDISTINCTHAVING

  3. 多表关联 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 语句,动态关联基表计算结果;基表新增字段不会同步到视图,基表删除字段会导致视图失效。

七、总结

  1. 数据表是数据存储载体,负责永久保存业务原始数据;视图是查询封装工具,用于简化查询、控制数据访问权限。

  2. 创建 / 修改 / 删除语法完全分离:表操作面向存储结构,视图操作面向查询逻辑。

  3. DML 操作差异最大:数据表自由增删改;视图仅简单单表视图支持更新,且存在条件校验约束。

  4. 视图不替代数据表,二者搭配使用:数据表存原始数据,视图对外提供简化、安全的数据访问接