mysql视图

一、视图概念

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

二、在单表上建立视图

1、首先创建基本表并插入数据

create table t(
quantity int,
price int
);
insert into t values(3,50);

2、创建视图:

create view view_t as select quantity,price,quantity*price from t;
create view view_t2(qty,price,total) as select quantity,price,quantity*price from t;

3、查看视图中的数据

select * from view_t;

在这里插入图片描述

select * from view_t2;

在这里插入图片描述

三、在多表上创建视图

1、先创建表和插入数据

create table student(
s_id int,
name varchar(40)
);

create table stu_info(
s_id int,
glass varchar(40),
addr varchar(90)
);
insert into student values(1,'wanglin1'),(2,'gaoli'),(3,'zhanghai');

insert into stu_info values(1,'wuban','henan'),(2,'liubab','hebei'),(3,'qiban','shandong');

2、创建视图stu_glass

create view stu_glass(id,name,glass) as select student.s_id,student.name,stu_info.glass
from student,stu_info where student.s_id=stu_info.s_id;

在这里插入图片描述

四、 查看视图

1、使用DESCRIBE语句查看视图的基本信息
语法:DESCRIBE 视图名
DESCRIBE一般情况下都简写成desc
         查看视图view_t的定义
在这里插入图片描述
2、使用SHOW TABLE STATUS语句查看视图的基本信息
语法: show table status like '视图名';
在这里插入图片描述
执行结果显示,Comment的值为VIEW,说明该表为视图;其他信息为NULL,说明这是一个虚表。用同样的语句可以查看数据表t的信息,执行结果如下:
在这里插入图片描述
从查询的结果来看,这里的信息包含存储引擎、创建时间等,Comment信息为空,这就是视图和表的区别。
3、使用SHOW CREATE VIEW语句查看视图的详细信息
语法:show create view 视图名
在这里插入图片描述
执行结果显示视图的名称、创建视图的语句等信息。

五、修改视图

  修改视图是指修改数据库中存在的视图,当基本表的某些字段发生变化的时候,可以通过修改视图保持与基本表的一致性。Mysql中通过create or replace view语句和alter语句来修改视图
1、使用create or replace view语句修改视图
首先通过desc查看修改之前的视图,方便比较

create or replace view view_t as select * from t;

在这里插入图片描述
从执行结果来看,相比原来视图view_t,新的试图少了一个字段。
2、使用alter语句修改视图view_t

alter view view_t as select quantity from t;

在这里插入图片描述

六、更新视图

  更新视图是指通过视图来插入、更新、删除表中的数据,因为视图是一个虚拟表,所以其中没有数据。通过视图更新的时候都是转到基本表上进行更新的,对视图增加或者删除记录,实际上是对其基本表增加或者删除记录。
1、使用UPDATE语句更新视图view_t

update view_t set quantity=5;

更新之前先查看基本表和视图的信息
在这里插入图片描述
执行更新并查看视图和基本表的内容
在这里插入图片描述
在这里插入图片描述
  对视图view_t更新后,基本表t的内容也更新了。同样,当对基本表t更新后,另一个视图view_t2的内容也会更新。
2、向视图插入数据

insert into  t values(3,5);

在这里插入图片描述
在这里插入图片描述
  向表t中插入一条记录,通过select语句查看表t和视图view_t2,可以看到其中的内容也跟着更新,试图更新的不仅仅是数量和单价,总价也会更新。
3、注意
当视图中包含一下内容时,视图的更新操作将不能被执行:

  • 视图中不包含基本表中被定义为非空的列。
  • 在定义视图的select语句后的字段列表中使用了数学表达式
  • 在定义视图的select语句后的字段列表中使用了聚合函数。
  • 在定义视图的select语句中使用了DISTINCT、UNION、TOP、GROUP BY或HAVING字句。

七、删除视图

删除stu_glass视图

drop view if exists stu_glass;

在这里插入图片描述
可以看到,stu_glass视图已经不存在,删除成功。

posted @   别团等shy哥发育  阅读(60)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示