视图定义
视图是虚拟表,不存储真实数据,仅保存一段查询SQL;访问视图时会动态读取底层数据表的数据,依赖真实表存在。
视图 vs 数据表:增/改/删操作对比
1. 创建
数据表
CREATE TABLE student(id INT, name VARCHAR(20));
物理占用磁盘空间,支持主键、索引、自增、外键等完整约束。
视图
CREATE VIEW v_stu AS SELECT id,name FROM student;
仅保存查询语句,无物理数据,不支持主键、外键、自增。
2. 更新
修改结构
表:ALTER TABLE student ADD age INT; 直接修改物理结构,永久生效
视图:ALTER VIEW v_stu AS SELECT id,name,age FROM student; 仅改写查询逻辑
修改数据
表:UPDATE student SET name='小王' WHERE id=1; 无限制
视图:仅单表、无聚合、无联表的简单视图可更新;带GROUP BY、多表JOIN、DISTINCT的视图只读,无法修改数据。修改视图本质是修改原表数据。
3. 删除
删除表:DROP TABLE student;
清除全部数据、表结构、索引,所有依赖该表的视图全部失效。
删除视图:DROP VIEW v_stu;
仅删除查询逻辑,底层数据表、数据完全不受影响。
核心差异汇总
存储:表是物理实体;视图是虚拟逻辑,不存数据
权限安全:表会暴露全部字段;视图可隐藏手机号、薪资等敏感字段,做数据隔离
性能:表可建立索引加速查询;视图无法单独建索引,复杂视图查询效率偏低
依赖:表独立存在;视图必须依赖底层数据表,原表丢失则视图失效
视图优缺点
优点
封装复杂多表查询,简化业务SQL编写
控制数据可见范围,实现简易数据权限隔离
统一查询口径,多业务复用同一套查询逻辑
缺点
复杂视图更新存在大量限制,不适合高频写业务
无独立索引,大批量查询性能较差
底层SQL被封装,故障排查、SQL优化难度提升
简单实操案例
-- 1. 创建原始数据表
CREATE TABLE user(uid INT PRIMARY KEY, name VARCHAR(20), phone CHAR(11));
-- 2. 创建脱敏视图(隐藏手机号)
CREATE VIEW v_user_show AS SELECT uid,name FROM user;
-- 3. 修改视图查询逻辑
ALTER VIEW v_user_show AS SELECT uid,name FROM user WHERE uid > 10;
-- 4. 通过视图修改原表数据
UPDATE v_user_show SET name='小李' WHERE uid=11;
-- 5. 删除视图
DROP VIEW IF EXISTS v_user_show;