MySQL【知识改变命运】12

视图

1:什么是视图

  • 视图是一张虚拟的表
  • 视图是基于一个或者多个基表或者其他视图查询的结果集
  • 视图本身不占有物理内存,也不存储数据,只是根据查询执行来动态生成数据。
  • 用户对普通表的操作(查询,更新,删除)也可以在视图里面操作。

2:创建视图

sql 复制代码
# 语法
CREATE VIEW view_name [(column_list)] AS select_statement
create view//创建视图关键词
view_name// 视图名
column_list//视图包含的列
select_statement//视图所依赖的查询语句
  • 我们先查询一下表
  • 然后创建一个视图
    这里我们要注意一个小问题,我们要防止在视图中出现名字重复

    创建成功:
  • 视图用show tables 查询也在表集合里面
  • 我们可以用视图直接查询
  • 查询视图结构

使用视图(视图的好处)

2.1.隐藏敏感字段

  • 举例:查询⽤⼾的姓名和总分,(隐藏学号和各科成绩
sql 复制代码
# 使⽤真实表进⾏查询
select s.name, sum(sc.score) total from student s, score sc 
where s.id = sc.student_id
group by sc.student_id order by s.id;

# 如果使⽤真实表,在查询列表中随时可以加上学号字段

# 创建视图
create view v_student_total_points as
select s.id, s.name, sum(sc.score) total from student s, score sc 
where s.id = sc.student_id 
group by s.id order by s.id;
# 使⽤视图查询,只能查到学⽣姓名和总分,不能再添加查询字段

2.2.对外提供统一访问

3:视图和真实表进⾏表连接查询

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

查询操作,使用视图和使用真实表一样的,有无视图是基于真实表的

4:修改视图数据

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

因为视图本质是依赖于真实表的

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

但是一下情况,无法使用修改视图

  • 修改真实表会影响视图,修改视图同样也会影响真实表
  • 以下视图不可更新:
  • 创建视图时使⽤聚合函数的视图
  • 创建视图时使⽤ DISTINCT
  • 创建视图时使⽤ GROUP BY 以及 HAVING ⼦句
  • 创建视图时使⽤ UNION 或 UNION ALL
  • 查询列表中使⽤⼦查询
  • 在FROM⼦句中引⽤不可更新视图

6:删除视图

sql 复制代码
语法:
drop view view_name;
相关推荐
q***01653 小时前
PostgreSQL 17 发布了!非常稳定的版本
数据库·postgresql
菜鸟冲锋号3 小时前
问题:增量关联(实时同步新数据) 这个场景中,如果hudi_pay 变更了一条数据,hudi_order_pay_join 结果的数据会跟着变化吗
服务器·前端·数据库
ttthe_MOon4 小时前
MySQL 基础入门:核心概念、安装部署与常用命令
mysql·adb
Wilson Chen4 小时前
深入解剖 Redis Cluster:从 16384 分片原理到故障自动转移的硬核实战
数据库·redis·缓存
q***06294 小时前
LangChain-08 Query SQL DB 通过GPT自动查询SQL
数据库·sql·langchain
一 乐4 小时前
水果销售|基于springboot + vue水果商城系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·后端
霸王大陆4 小时前
《零基础学PHP:从入门到实战》教程-模块七:MySQL 数据库基础-2
数据库·mysql·php
JIngJaneIL4 小时前
校园任务平台|校园社区系统|基于java+vue的校园悬赏任务平台系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·校园任务平台
霸王大陆4 小时前
《零基础学PHP:从入门到实战》教程-模块七:MySQL 数据库基础-1
数据库·mysql·php
云半S一4 小时前
春招准备之Redis篇
数据库·经验分享·redis·笔记·缓存