2026/7/7 17:25:43

数据库视图学习笔记

数据库视图学习笔记 视图定义视图是虚拟表不存储真实数据仅保存一段查询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 id1; 无限制视图仅单表、无聚合、无联表的简单视图可更新带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 uid11;-- 5. 删除视图DROP VIEW IF EXISTS v_user_show