首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【数据库】视图

【数据库】视图

作者头像
那我掉的头发算什么
发布2026-01-12 18:29:35
发布2026-01-12 18:29:35
1150
举报

什么是视图

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

创建视图

代码语言:javascript
复制
# 语法
CREATE VIEW view_name [(column_list)] AS select_statement

使用视图

查询⽤户的所有信息和考试成绩:

不指定列名定义视图:

定义视图时出现了重复的列的报错,我们需要给每一个列起别名。

这时查看表就能看到视图了

指定列名定义视图:

代码语言:javascript
复制
create view v_student_score_v (id,name,class_id,class_name,course_id,course_name,score_id,score)as (
select 
student.student_id,
student.name as student_name,
class.class_id,
class.`name` as class_name,
course.course_id,
course.`name` as course_name,
score.score_id,
score.score
from student,course,class,score
where student.student_id = score.score_id AND
     student.class_id = class.class_id AND
     course.course_id = score.course_id
     order by student_id asc
);

**指定列名定义视图时,可以不使用as对相同的列名起别名也可以正常创建。

注:此代码与上一个代码略有不同,此代码使用student_id升序排列,后面有用。**

修改数据(更新视图)

通过真实表修改数据,会影响视图:

通过视图修改数据会影响基表:

如果视图在定义时使用了order by ,就没法更新。 • 修改真实表会影响视图,修改视图同样也会影响真实表 • 以下视图不可更新: ◦ 创建视图时使⽤聚合函数的视图 ◦ 创建视图时使⽤ DISTINCT ◦ 创建视图时使⽤ GROUP BY 以及 HAVING ⼦句 ◦ 创建视图时使⽤ UNION 或 UNION ALL ◦ 查询列表中使⽤⼦查询 ◦ 在FROM⼦句中引⽤不可更新视图

正常更新的情况下,可以实现数据修改:

删除视图

语法:

代码语言:javascript
复制
# 语法
drop view view_name;

视图的优点

  1. 简单性:视图可以将复杂的查询封装成⼀个简单的查询。例如,针对⼀个复杂的多表连接查询,可以创建⼀个视图,⽤⼾只需查询视图⽽⽆需了解底层的复杂逻辑。
  2. 安全性:通过视图,可以隐藏表中的敏感数据。例如,⼀个系统的⽤⼾表中,可以创建⼀个不包含密码列视图,普通⽤⼾只能访问这个视图,⽽不能访问原始表。
  3. 逻辑数据独⽴性:视图提供了⼀种逻辑数据独⽴性,即使底层表结构发⽣变化,只需修改视图定义,⽽⽆需修改依赖视图的应⽤程序。使⽤到应⽤程序与数据库的解耦
  4. 重命名列:视图允许⽤户重命名列名,以增强数据可读性。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是视图
  • 创建视图
  • 使用视图
  • 修改数据(更新视图)
  • 删除视图
  • 视图的优点
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档