数据视图学习博客笔记(含数据表对比)
📅 2026/7/6 4:05:29
👁️ 阅读次数
📝 编程学习
一、视图基础概念
视图是虚拟表,不存储真实物理数据,仅存储一条 SELECT 查询逻辑;数据表是物理实体,会持久保存全部数据。二者核心操作(创建、更新、删除)存在明显差异。
二、创建操作对比
1. 数据表创建
语法:CREATE TABLE 表名(字段1 类型,字段2 类型...);
特点:分配磁盘存储空间,定义字段、约束、主键、外键,数据永久落地。
示例:
sql
CREATE TABLE students( id INT PRIMARY KEY, name VARCHAR(20), gender CHAR(1) );2. 视图创建
语法:CREATE [OR REPLACE] VIEW 视图名 AS SELECT 查询语句;
特点:无物理存储,仅保存查询逻辑,不定义独立字段约束;OR REPLACE可直接覆盖旧视图。
示例:
sql
CREATE VIEW v_male AS SELECT * FROM students WHERE gender='男';创建核心区别
表:开辟存储空间,定义完整数据结构;
视图:仅保存查询语句,无存储分配,依赖已有数据表。
三、更新(增删改)操作对比
1. 数据表更新
无强制限制,支持INSERT/UPDATE/DELETE,可修改任意字段、新增、删除行,不受查询条件约束。
sql
INSERT INTO students VALUES(101,'张三','男'); UPDATE students SET name='张三丰' WHERE id=101; DELETE FROM students WHERE id=101;2. 视图更新
存在严格限制,仅单表、无聚合、无分组的视图才可更新;多表关联、含 AVG/COUNT/GROUP BY 的视图禁止更新。
额外约束:WITH CHECK OPTION强制修改 / 新增数据必须匹配视图 WHERE 条件,否则报错。
sql
-- 可更新单表视图 CREATE VIEW v_male AS SELECT * FROM students WHERE gender='男' WITH CHECK OPTION; UPDATE v_male SET name='张三丰' WHERE id=101; -- 多表聚合视图无法执行UPDATE CREATE VIEW v_avg_score AS SELECT major,AVG(score) FROM students JOIN scores GROUP BY major; UPDATE v_avg_score SET avg_score=90; -- 执行报错更新核心区别 (注意)
- 表:自由增删改,无逻辑限制;
- 视图:受查询定义约束,聚合、多表视图无法更新,可附加数据校验约束;
四、删除操作对比
1. 删除数据表
语法:DROP TABLE [IF EXISTS] 表名;
后果:彻底销毁物理存储、全部数据、索引、约束,关联视图会失效;
sql
DROP TABLE IF EXISTS students;2. 删除视图
语法:DROP VIEW [IF EXISTS] 视图名;
后果:仅删除查询逻辑,底层数据表、真实数据完全不受影响;
sql
DROP VIEW IF EXISTS v_male;删除核心区别 (注意)
- 表:删除实体与全部数据,影响所有依赖对象;
- 视图:仅删除查询封装,底层原始数据完好无损。
五、视图三大核心价值
- 简化查询:多表关联、复杂统计逻辑封装,不用重复编写长 SQL;
- 数据安全:隐藏手机号、身份证等敏感字段,分配用户仅访问视图权限;
- 逻辑解耦:底层表结构调整时,只需修改视图定义,上层业务代码无需改动;
六、整体总结表格
表格
| 操作类型 | 数据表 Table | 视图 View |
|---|---|---|
| 存储特性 | 物理存储,永久保存数据 | 虚拟表,仅存查询语句,无数据 |
| 创建方式 | CREATE TABLE,定义字段与约束 | CREATE VIEW,基于已有表查询 |
| 更新权限 | 完全支持 INSERT/UPDATE/DELETE | 仅单表无聚合视图可更新,多表 / 统计视图禁止更新 |
| 删除影响 | 销毁数据、结构、索引 | 仅删除查询逻辑,底层数据不变 |
| 安全作用 | 无原生字段隐藏能力 | 可隔离敏感字段,实现权限管控 |
编程学习
技术分享
实战经验