Mysql 视图

0 引言

数据库中的视图是一个虚拟表。同真实的表一样,视图包含一系列带有名称的行和列数据。行和列数据来自由定义视图查询所引用的表,并且在引用视图时动态生成。

视图是从一个或者多个表中导出的,视图的行为与表非常相似,但视图是一个虚拟表。在视图中用户可以使用SELECT语句查询数据,以及使用INSERT、UPDATE和DELETE修改记录。视图还可以从已经存在的视图的基础上定义。

视图一经定义便存储在数据库中,与其相对应的数据并没有像表那样在数据库中再存储一份,通过视图看到的数据只是存放在基本表中的数据。对视图的操作与对表的操作一样,可以对其进行查询、修改和删除。当对通过视图看到的数据进行修改时,相应的基本表的数据也要发生变化;同时,若基本表的数据发生变化,则这种变化也可以自动反映到视图中。

视图的作用

1.简单化

看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化它们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。

2.安全性

通过视图用户只能查询和修改他们所能见到的数据。数据库中的其他数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。通过视图,用户可以被限制在数据的不同子集上:(1)使用权限可被限制在基表的行的子集上。(2)使用权限可被限制在基表的列的子集上。(3)使用权限可被限制在基表的行和列的子集上。(4)使用权限可被限制在多个基表的连接所限定的行上。(5)使用权限可被限制在基表中的数据的统计汇总上。(6)使用权限可被限制在另一视图的一个子集上,或是一些视图和基表合并后的子集上。

  1. 逻辑数据独立性

视图可帮助用户屏蔽真实表结构变化带来的影响。

1 创建视图

创建MySQL视图的语法如下:

复制代码
CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;

2 查看视图

查看视图是查看数据库中已存在的视图的定义。查看视图必须要有SHOW VIEW的权限,查看视图的方法包括DESCRIBE、SHOW TABLE STATUS和SHOW CREATE VIEW。

2.1 使用DESCRIBE语句查看视图基本信息

复制代码
  DESCRIBE 视图名;

2.2 使用SHOW TABLE STATUS语句查看视图基本信息

复制代码
  SHOW TABLE STATUS LIKE '视图名';

    SHOW TABLE STATUS WHERE Name = 'view_name';

2.3 SHOW CREATE VIEW:

复制代码
SHOW CREATE VIEW view_name;

3 修改视图

复制代码
CREATE OR REPLACE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;

ALTER VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;

4 更新视图

更新视图是指通过视图来插入、更新、删除表中的数据,因为视图是一个虚拟表,其中没有数据。通过视图更新的时候都是转到基本表上进行更新的,如果对视图增加或者删除记录,实际上是对其基本表增加或者删除记录。更新的3种方法:INSERT、UPDATE和DELETE。

将视图作为一张普通表一样去更新,会更新到基础表

UPDATE

复制代码
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

DELETE

INSERT

当视图中包含有如下内容时,视图的更新操作将不能被执行:(1)视图中不包含基表中被定义为非空的列。(2)在定义视图的SELECT语句后的字段列表中使用了数学表达式。(3)在定义视图的SELECT语句后的字段列表中使用聚合函数。(4)在定义视图的SELECT语句中使用了DISTINCT、UNION、TOP、GROUP BY或HAVING子句。

5 删除视图

复制代码
  DROP VIEW IF EXISTS view_name;
相关推荐
城管不管6 小时前
重生——第十一次面试之挖财一面2026.8.19已OC
java·服务器·jvm·数据库·spring·面试·职场和发展
倔强的石头1066 小时前
向量数据库从相似度检索走向融合数据底座
数据库
今天AI了吗8 小时前
Python 基础语法(一):常量、变量、输入输出与运算符
开发语言·数据库·人工智能·python·sql·深度学习·机器学习
夜雪一千9 小时前
MySQL 全局锁是什么?原理、风险、备份踩坑完整实战
android·mysql·adb
lilian2339 小时前
Harmony os 技术实战|拼豆制图27:用单字符编码承载 50 张 70×70 图纸
前端·数据库·华为·harmonyos
皮卡丘不断更9 小时前
手机优先的 Personal Ledger:把账目、学习和复盘放到同一个入口
数据库·sqlite·fastapi·开源项目·个人效率
保卫大狮兄10 小时前
设备管理从台账到报废,完整生命周期一次讲清
数据库·设备管理·设备
数据安全技术观察11 小时前
数据动态脱敏:让脱敏策略跟着数据目录走
大数据·网络·数据库
小席是个热心肠11 小时前
Redis的自我学习
数据库·redis·学习
2601_9657984712 小时前
Salient Theme Setup Guide for Fast Creative WordPress Sites
数据库·web3·php·wordpress