MySQL(九)—— 视图

本文详细介绍了MySQL中的视图概念,包括如何创建、查看、使用、修改和删除视图,以及视图在数据操作中的限制和作用。视图是一种虚拟表,用于简化复杂查询,增强数据安全性和提供权限控制。此外,还探讨了视图的三种算法:Undefined、Temptable和Merge,并给出了选择算法的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

创建视图

查看视图

使用视图

修改视图

删除视图

视图意义

视图数据操作

新增数据

       删除数据

       更新数据 

视图算法


视图

视图: view, 是一种有结构(有行有列)但是没结果(结构中不真实存放数据)的虚拟表, 虚拟表的结构来源不是自己定义, 而是从对应的基表中产生(视图的数据来源).

创建视图

基本语法

Create view 视图名字 as select语句; -- select语句可以是普通查询;可以是连接查询; 可以是联合查询; 可以是子查询.

创建单表视图: 基表只有一个

创建多表视图: 基表来源至少两个

-- 视图: 单表+多表
create view my_v1 as 
select * from my_student;

create view my_v2 as 
select * from my_class;

create view my_v3 as 
select * from my_student as s left join my_class c on s.c_id = c.id; -- id重复

查看视图

查看视图: 查看视图的结构

视图是一张虚拟表: 表, 表的所有查看方式都适用于视图: show tables [like]/desc 视图名字/show create table 视图名;

-- 查看视图
desc my_v1;
-- 查看视图创建语句
show create table my_v1;

视图比表还是有一个关键字的区别: view. 查看”表(视图)”的创建语句的时候可以使用view关键字

-- 查看视图创建语句
show create view my_v1;

视图一旦创建: 系统会在视图对应的数据库文件夹下创建一个对应的结构文件: frm文件

使用视图

使用视图主要是为了查询: 将视图当做表一样查询即可.

-- 视图使用
select * from my_v1;

视图的执行: 其实本质就是执行封装的select语句.

修改视图

视图本身不可修改, 但是视图的来源是可以修改的.

修改视图: 修改视图本身的来源语句(select语句)

Alter view 视图名字 as 新的select语句;

删除视图

Drop view 视图名字;

-- 删除视图
drop table my_v1;
drop view my_v1;

视图意义

  1. 视图可以节省SQL语句: 将一条复杂的查询语句使用视图进行保存: 以后可以直接对视图进行操作
  2. 数据安全: 视图操作是主要针对查询的, 如果对视图结构进行处理(删除), 不会影响基表数据(相对安全).
  3. 视图往往是在大项目中使用, 而且是多系统使用: 可以对外提供有用的数据, 但是隐藏关键(无用)的数据: 数据安全
  4. 视图可以对外提供友好型: 不同的视图提供不同的数据, 对外好像专门设计
  5. 视图可以更好(容易)的进行权限控制

视图数据操作

视图是的确可以进行数据写操作的: 但是有很多限制

将数据直接在视图上进行操作.

新增数据

数据新增就是直接对视图进行数据新增.

  1. 多表视图不能新增数据

2. 可以向单表视图插入数据: 但是视图中包含的字段必须有基表中所有不能为空(或者没有默认值)字段

 3. 视图是可以向基表插入数据的.

删除数据

多表视图不能删除数据

单表视图可以删除数据

 

更新数据 

理论上不能单表视图还是多表示视图都可以更新数据.

更新限制: with check option, 如果对视图在新增的时候,限定了某个字段有限制: 那么在对视图进行数据更新操作时,系统会进行验证: 要保证更新之后,数据依然可以被实体查询出来,否则不让更新.

视图算法

视图算法: 系统对视图以及外部查询视图的Select语句的一种解析方式.

视图算法分为三种

Undefined: 未定义(默认的), 这不是一种实际使用算法, 是一种推卸责任的算法: 告诉系统,视图没有定义算法, 系统自己看着办

Temptable: 临时表算法: 系统应该先执行视图的select语句,后执行外部查询语句

Merge: 合并算法: 系统应该先将视图对应的select语句与外部查询视图的select语句进行合并,然后执行(效率高: 常态)

算法指定: 在创建视图的时候

Create algorithm = 指定算法 view 视图名字 as select语句;

视图算法选择: 如果视图的select语句中会包含一个查询子句(五子句), 而且很有可能顺序比外部的查询语句要靠后, 一定要使用算法temptable,其他情况可以不用指定(默认即可).

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值