数据视图学习博客笔记(含数据表对比)

📅 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;

删除核心区别 (注意

  • 表:删除实体与全部数据,影响所有依赖对象;
  • 视图:仅删除查询封装,底层原始数据完好无损。

五、视图三大核心价值

  1. 简化查询:多表关联、复杂统计逻辑封装,不用重复编写长 SQL;
  2. 数据安全:隐藏手机号、身份证等敏感字段,分配用户仅访问视图权限;
  3. 逻辑解耦:底层表结构调整时,只需修改视图定义,上层业务代码无需改动;

六、整体总结表格

表格

操作类型数据表 Table视图 View
存储特性物理存储,永久保存数据虚拟表,仅存查询语句,无数据
创建方式CREATE TABLE,定义字段与约束CREATE VIEW,基于已有表查询
更新权限完全支持 INSERT/UPDATE/DELETE仅单表无聚合视图可更新,多表 / 统计视图禁止更新
删除影响销毁数据、结构、索引仅删除查询逻辑,底层数据不变
安全作用无原生字段隐藏能力可隔离敏感字段,实现权限管控