MySQL:视图

什么是视图?

视图是⼀个虚拟的表,它是基于⼀个或多个基本表或其他视图的查询结果集。视图本⾝不存储数
据,⽽是通过执⾏查询来动态⽣成数据。⽤⼾可以像操作普通表⼀样使⽤视图进⾏查询、更新和管
理。视图本⾝并不占⽤物理存储空间,它仅仅是⼀个查询的逻辑表⽰,物理上它依赖于基础表中的数据。
创建视图的语法

sql 复制代码
CREATE VIEW view_name [(column_list)] AS select_statement

视图的优点

  1. 简化复杂查询:通过将复杂的查询逻辑封装在视图中,可以简化应用程序中的 SQL 编写。
  2. 提高数据安全性:可以通过视图限制用户访问特定的列或行,而不需要直接访问基础表。
  3. 数据独立性:如果表结构发生变化,可以通过修改视图来屏蔽这些变化。
  4. 便于数据分析:视图可以预先定义好数据的汇总、筛选等逻辑,方便分析人员直接使用。

创建一个视图

sql 复制代码
create view v_student_socre as(
select s.id, s.name, s.sno, s.age, s.gender, s.enroll_date,
c.id as class_id, c.`name` as class_name,
co.id as course_id, co.`name` as course_name, sc.id as score_id, sc.score
from student s, class c, course co, score sc
where s.class_id = c.id
and sc.student_id = s.id
and sc.course_id = co.id
order by s.id
);

访问视图

sql 复制代码
select * from v_student_socre;
select * from v_student_socre_v1

视图和真实表进行表连接查询

sql 复制代码
select * from v_student_total_points v, student s where v.id = s.id;

修改视图

通过修改真实表会影响视图,通过视图也可以影响真实表

真实表影响视图

sql 复制代码
update score set score = 99 where student_id = 1 and course_id = 1;

视图影响基表

sql 复制代码
update v_student_socre_v1 set score = 99 where score_id = 3;

删除表

语法:

sql 复制代码
drop view view_name;

注意:

修改真实表会影响视图,修改视图同样也会影响真实表

以下视图不可更新:

  • 创建视图时使⽤聚合函数的视图
  • 创建视图时使⽤ DISTINCT
  • 创建视图时使⽤ GROUP BY 以及 HAVING ⼦句
  • 创建视图时使⽤ UNION 或 UNION ALL
  • 查询列表中使⽤⼦查询
  • 在FROM⼦句中引⽤不可更新视图

希望能对大家有所帮助!!!!

相关推荐
阿里小阿希11 分钟前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神16 分钟前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员26 分钟前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java35 分钟前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿1 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴1 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存
YOU OU1 小时前
三大范式和E-R图
数据库
MaCa .BaKa1 小时前
47-心里健康咨询平台/心理咨询系统
java·spring boot·mysql·tomcat·maven·intellij-idea·个人开发
一江寒逸1 小时前
零基础从入门到精通MySQL(上篇):筑基篇——吃透核心概念与基础操作,打通SQL入门第一关
数据库·sql·mysql
@土豆1 小时前
Ubuntu 22.04 运行 Filebeat 7.11.2 崩溃问题分析及解决文档
linux·数据库·ubuntu