MySQL 视图

数据库还有一种虚拟表,它的结构跟真实表一样,都是二维表,但是不存放数据,数据从真实表中获取,这种表被称为视图

简而言之,视图就是一张虚拟表 ,本身不存真实数据,只存一条查询语句

查视图 = 自动执行提前写好的 SELECT 查询

  • 没有真实数据,数据都来自原数据表

  • 如果真实表里的数据变了,视图里的数据会实时跟着变

  • 每次你查询视图时,MySQL 都会在后台重新执行 定义它的那条 SELECT 语句,从而获取主表中的最新数据

  • 视图的数据不会持久化到磁盘上,而是基于查询结果动态生成

为什么需要视图?

  • 隐藏敏感字段(密码、手机号、薪资),只开放允许查看的字段,做到字段级别权限控制

  • 把多表联查、子查询、统计语句固定成视图,以后直接查视图,不用重复写长 SQL

  • 后端修改原表结构,只需修改视图,前端查询语句不用改动,降低维护成本

创建视图

复制代码
CREATE [on replace] VIEW 视图名称 AS
SELECT 字段1, 字段2, ...
FROM 表名
WHERE 条件;
  • create:创建视图的关键字

  • on replace:可选,表示替换已有视图

  • algorithm:在关键字view前定义,表示视图算法

  • as:表示视图要进行的操作

  • select语句:一个完整的查询语句,表示从某些表或视图中查出某些满足条件的记录,将这些记录导入进视图中。

查询视图

全局查询:

复制代码
SELECT * FROM view_goods;

条件查询:

复制代码
SELECT product_name, service_name 
FROM view_goods 
WHERE price > 100 
ORDER BY price DESC;

查看字段结构:

复制代码
DESC view_goods;

删除视图

复制代码
DROP VIEW view_goods;

视图的本质就是保存查询语句,让程序员可以不需要每次查询都重写一大段查询语句。

修改视图

修改视图是指修改数据库中存在的视图的定义,当基本表中某些字段发生改变时,视图必须修改才能使用。

修改视图的本质,就是用一段新的查询语句去覆盖掉旧的语句

通过create or replace view语句在创建视图时替换已有的同名视图。

复制代码
create or replace view view_goods as
select id,name from goods;

视图数据操作

视图数据操作就是通过视图来查询、添加、修改或删除基本表的数据,因为视图是一个虚拟表,不保存数据;当通过视图操作数据时,实际操作的是基本表的数据。

添加数据

复制代码
insert into view_goods values(17,'图书');

修改数据

使用update语句可以修改基本表的数据

复制代码
update view_goods set name='家电' where id=7;

删除数据

使用delete可以删除基本表的数据

复制代码
delete from view_goods where id=7;
相关推荐
SelectDB18 小时前
阶跃星辰基于 SelectDB 构建 PB 级 Agent 可观测平台
大数据·数据库·aigc
这个DBA有点耶19 小时前
GROUP BY优化全解:如何写出既不丢数据又飞快的分组查询
数据库·mysql·架构
掉头发的王富贵1 天前
【StarRocks】极限十分钟入门StarRocks
数据库·sql·mysql
Nturmoils1 天前
WHERE 条件别凭习惯写,常用查询先跑一遍
数据库
SamDeepThinking1 天前
一条UPDATE语句在MySQL 8.0中到底加了几把锁?
后端·mysql·程序员
Databend2 天前
在 AWS 中国峰会逛了一天,我在 Databend 展台看到了 Agent 数据基础设施的新思路
数据库·人工智能·agent
李白客3 天前
KES新版MySQL兼容能力再升级意味着什么?
mysql·国产数据库
ClouGence3 天前
Oracle 数据同步为什么会出现数据不一致?长事务是常被忽略的原因
数据库·后端·oracle
飞将3 天前
从零实现数据库(2)——HashIndex + IndexManager
数据库
Nturmoils4 天前
订单列表慢查询,先看 WHERE、ORDER BY 和 LIMIT
数据库