0


MySQL 视图

😇作者介绍:一个有梦想、有理想、有目标的,且渴望能够学有所成的追梦人。

🎆学习格言:不读书的人,思想就会停止。——狄德罗

⛪️个人主页:进入博主主页

🗼专栏系列:MySQL知识集合

🌼欢迎小伙伴们访问到博主的文章内容,在浏览阅读过程发现需要纠正的地方,烦请指出,愿能与诸君一同成长!

文章内容如下


✏️前言

什么是 MySQL 视图呢,其实就是一张由查询创建的虚拟表,所谓视图(View):视图是由查询结果形成一张虚拟的表。非临时表,只要不删除的话就会一直存放在磁盘上,但是没有对应的文件。视图的使用和正常的表的使用一样。


✏️一、什么是视图

视图是数据库中数据的定制的子集,可以限制用户直接访问原始表,确保用户通过视图来操作数据,这种机制有效地保护了用户和应用程序,减少了数据库结构变更对它们的影响。
视图是一种抽象层,动态地从表中提取信息,创建出一个看似实体的虚拟表。尽管视图在数据库中持久存在,除非被显式删除,但它们并不会自行更新或消失。
视图能够优化查询效率,尤其是在处理多表关联查询时,能够简化复杂的SQL语句和逻辑处理。与之相对的是临时表,它们通常存储在tempdb中,并且在查询完成后不会自动消失,可能会持续消耗资源。
视图通常与主数据库存储在相同的位置,而临时表则始终位于tempdb中。
建议在使用视图时用于多表连接的查询浏览,而不推荐用于数据的增删改操作。这样做不仅保持了数据的完整性,还能提高数据库的执行效率。


✏️二、视图概述

📝one / 视图和表的区别

视图可以被视为预编译的SQL查询,而表则不是。
视图并不存储数据记录,它们仅仅是逻辑表示,而表则包含实际的物理数据。
可以将表视为内容的容器,而视图则是查看这些内容的窗口。

表需要物理存储空间,而视图不占用任何物理空间。视图的变更只能通过重新创建其定义的SQL语句来实现,而表可以直接进行修改。

视图提供了一种查看数据表中特定字段组合的方法,它们是由SQL语句集合构成的逻辑概念。从安全角度来看,视图可以阻止用户直接访问数据表,从而保护表的结构不被用户了解。

表是全局模式下的实体,而视图属于局部模式,是虚拟的表。
创建或删除视图只会影响视图本身,而不会影响其对应的基本表。

📝two / 视图和表的联系

视图在MySQL中是一种基于一个或多个基本表的查询结果的虚拟表。它不存储数据,而是实时从基本表中检索数据。视图提供了一种逻辑上的抽象,允许用户以不同的方式查看和操作数据,同时提供数据安全性和独立性。视图的数据行和结构来源于基本表,当查询视图时,数据库系统会根据视图的定义从基本表中检索数据。视图可以简化复杂查询,并允许在不影响应用程序的情况下对基本表结构进行修改。

📝three / 视图的类型

在Mysql中视图的类型分为三种

👉1、MERGE(合并算法)

将视图的sql语句和引用视图的sql语句合并在一起,最后一起执行,当引用视图时,引用视图的语句与定义视图的语句合并。

👉2、TEMPTABLE(临时表算法)

将视图的结果集存放在临时表中,每次执行时从临时表中操作,当引用视图时,根据视图的创建语句建立一个临时表。

👉3、UNDEFINED(未定义算法)

当引用视图时,根据视图的创建语句建立一个临时表,默认的视图类型,DBMS倾向于选择而不是必定选择MERGE,因为MERGE的效率更高,更重要的是临时表视图不能更新,所以,这里推荐使用MERGE算法类型视图。


✏️三、视图简单使用

📝one / 首先创建两张表

create table emp
(
 eid int primary key auto_increment , 
 ename varchar(20) not null , 
 eage varchar(20) not null 

)engine = innodb default charset=utf8
insert into emp(ename,eage) values('张三','男');
insert into emp(ename,eage) values('李四','男');
insert into emp(ename,eage) values('王五','男');
select * from emp


-- 班级表
create table clasz
(
    cid int primary key auto_increment ,
    eid int not null ,
    cname varchar(20) not null 
)engine = innodb default charset = utf8


insert into clasz(eid,cname) values(1,'199');
insert into clasz(eid,cname) values(2,'186');
insert into clasz(eid,cname) values(3,'186');
select * from clasz

📝two / 创建视图(测试)

-- 创建视图(也就是虚拟表)它的关键字是(view)
create view v_eam1 as select * from emp
-- 查询虚拟表数据
select * from v_eam1

📝three / 视图将多张表合到虚拟表(测试)

-- 多表关联查询加入到虚拟表
create view v_em2 as select A.ename ,B.cname from emp as A join clasz as B on A.eid=B.eid
-- 查询
select * from v_em2


✏️三、视图的删除、修改

📝one / 删除视图

-- 删除视图
drop view v_eam2

📝two / 修改视图

-- 修改视图
alter view v_eam2 as select ename from emp 
select * from v_eam2

✏️总结

好了差不多了,这是一个简单的示例,希望能帮到需要帮助的小伙伴。
视图的优点有很多,比如:权限控制, 把表的权限封闭,但是开放相应的视图查看权限,视图中只开放部分数据。比如 一般情况下(无特殊优化)表的行数超过200w时,操作就会明显变慢,可以把一张表的数据,拆分成多张表来存放,利用视图,把多张表形成一张视图,看起来像是一整张表。还有就是数据表的整理,把A、B表合成C表,要想让原来的SQL不变,可以通过C表,把A、B表结构相同数据相同的视图创建出来继续使用。

标签: html 前端

本文转载自: https://blog.csdn.net/m0_67840539/article/details/137106737
版权归原作者 半杯可可 所有, 如有侵权,请联系我们删除。

“MySQL 视图”的评论:

还没有评论