数据库--视图基础 1、视图定义视图是数据库的外模式连接用户层与底层数据表本质是封装好的SELECT查询语句属于虚拟表。数据库只保存视图定义不存储物理数据数据全部来自基本表。2、视图三大作用1. 简化复杂查询把多表联查、复杂SQL封装业务无需重复编写长语句。2. 数据安全隔离隐藏敏感字段实现列级权限控制普通用户只能访问视图不能操作原表。3. 逻辑数据独立性底层表结构修改只修改视图定义上层应用代码不用改动。3、底层执行机制查询视图时数据库会动态展开视图内部的SQL转换为对基表的查询。删除视图只删除定义不会删除基本表数据。二、创建视图1、创建视图标准语法CREATE [OR REPLACE] VIEW 视图名(自定义列名列表)ASSELECT 查询语句[WITH [CASCADED | LOCAL] CHECK OPTION];关键字释义- OR REPLACE 视图已存在则覆盖重建不用先执行DROP。- 列来源视图字段由AS后的SELECT语句决定也可手动自定义列名。- WITH CHECK OPTION 约束增删改数据必须满足视图WHERE条件。2、查询视图视图查询语法与普通表完全一致支持WHERE、ORDER BY、聚合、排序等所有SELECT语法。底层原理数据库展开视图定义执行基表查询。三、更新视图1、视图可更新判定规则视图想要执行INSERT、UPDATE、DELETE必须全部满足1. 视图只来源于单张基表不能有JOIN多表连接。2. 不能包含聚合函数SUM、AVG、COUNT、MAX、MIN。3. 不能有GROUP BY、DISTINCT、UNION。4. 不能包含常量、子查询。5. 视图必须包含基表非空必填字段。只要违反任意一条视图为只读视图不能增删改。2、WITH CHECK OPTION 核心约束- 不加约束可以通过视图修改数据修改后数据脱离视图WHERE条件SQL执行成功产生脏数据。- 加上约束INSERT、UPDATE操作后的数据必须仍然满足视图WHERE筛选条件否则数据库报错拒绝执行。目的防止数据通过视图移出视图可见范围。3、视图DML操作- UPDATE简单单表视图可以更新最终修改的是底层基表数据。- DELETE符合条件的视图可以删除基表记录。- INSERT除更新条件外同时受CHECK约束控制。四、修改视图 删除视图1、修改视图结构不能用UPDATEALTER VIEW 视图名AS新的SELECT查询语句;作用替换视图内部封装的SQL重新定义视图。2、删除视图语法DROP VIEW IF EXISTS 视图名;-- 一次性删除多个视图DROP VIEW IF EXISTS 视图1,视图2;IF EXISTS避免视图不存在时报错。3、查看视图定义语句SHOW CREATE VIEW 视图名;五、考点总结1. 视图本质封装SELECT语句的虚拟表无物理存储。2. 视图三个作用简化查询、数据安全、逻辑数据独立。3. 视图和基本表区别基本表存物理数据视图只存查询定义。4. 多表JOIN视图不能更新数据库无法确定修改哪一张基表。5. OR REPLACE视图存在直接覆盖重建。6. 删除视图不会删除原表数据。7. WITH CHECK OPTION保证增改数据满足视图筛选条件。六、数据表与视图核心操作对比对 比维 度数据表视图创 建语法 CREATE TABLE 表名 (列定义...,本质在磁盘上创建物理存储结构用于存放真实数据。语法 CREATE VIEW 视图名 AS SELECT 查询语句;本质创建一个虚拟表仅保存查询定义不存储物理数据。更 新数据更新UPDATE 表名 SET ... 只要满足约束几乎无限制。结构更新ALTER TABLE 表名 ... 可以灵活添加/删除列、修改类型等。数据更新UPDATE 视图名 SET ... 限制极多。必须是单表、无聚合、无分组等的简单视图才能更新。结构更新ALTER VIEW 视图名 AS 新查询语句 通过替换查询语句来修改视图结构删 除语法 DROP TABLE 表名;影响永久删除表结构和其中的所有物理数据操作需谨慎。语法 DROP VIEW 视图名;影响仅删除视图的查询定义不会影响底层基表的结构和数据。区别总结数据表操作的是真实数据和物理结构增删改会直接影响数据本身。视图操作的是查询定义对视图的增删改不一定有效且永远不会直接删除物理数据。