前言
视图的概念、特点及用法
MySQL视图是一种虚拟的表,它是基于查询结果定义的。通过使用视图,可以将复杂的查询和计算逻辑封装在一个虚拟表中,并以简化的方式从该视图中检索数据。
以下是视图的一些特点和用法:
- 视图并不实际存储数据,它只是一个查询的定义。每当从视图中检索数据时,MySQL会动态地执行视图查询并返回结果。
- 视图可以基于一个或多个表、其他视图以及内置函数进行定义。这使得视图能够组合和转换数据,并提供更方便的数据访问接口。
- 视图可以像表一样被查询和引用。可以使用SELECT语句从视图中检索数据,也可以在其他查询中将视图作为源表使用。
- 视图可以简化复杂的查询操作。如果有一些常见的查询模式或业务逻辑,可以将它们定义为视图,然后在需要时直接使用视图进行查询。
- 视图可以隐藏底层表的结构和复杂性。通过定义只包含特定列的视图,可以限制数据的可见性,并提供更安全的数据访问机制。
- 视图支持更新操作,但存在一些限制。根据视图的定义和底层表的结构,可以执行对视图的插入、更新和删除操作。但是,有一些情况下视图是不可更新的,例如包含聚合函数、子查询、关联子查询等的视图。
创建视图
语法:
create [or replace] view view_name [(column_list)]
as select_statement;
其中,[ ]内为可选项
- or replace:若指定则表示如果同名视图已存在,则替换该视图;
- view_name:视图名称;
- column_list:指定视图的列名列表,用括号括起来,并以逗号分隔。如果不指定,则列名将从查询语句的结果中自动推断;
- select_statement:查询语句,用于定义视图的数据内容。
查询视图
语法:
select * from view_name;
查询视图结构
语法:
desc view_name;
修改视图
示例:
-- 创建视图
create view stu_view
as select * from students s where s.stu_gender = '男';
-- 方法1
create or replace view stu_view
as select * from students s where s.stu_gender = '男';
-- 方法2
alter view stu_view
as select * from students s where s.stu_gender = '女';
删除视图
语法:
drop view view_name;
使用视图
数据准备:
-- 创建班级表
create table classes(
class_id int primary key auto_increment,
class_name varchar(20) not null unique,
calss_remark varchar(200)
);
-- 创建学生表
create table students(
stu_num char(8) primary key,
stu_name varchar(10) not null,
stu_gender char(2) not null,
stu_age int not null,
cid int,
constraint FK_STUDENTS_CLASSES foreign key(cid) references classes(class_id) on update cascade on delete cascade;
);
--添加若干数据
示例:
-- 创建视图,查询班级编号为3的学生信息
create view view_test
as select s.stu_num ,s.stu_name ,s.stu_gender ,s.stu_age ,c.class_name
from students s left join classes c on s.cid=c.class_id
where c.class_id =3;
-- 查询视图
select * from view_test;
stu_num |stu_name|stu_gender|stu_age|class_name|
--------+--------+----------+-------+----------+
20220014|赵六 |男 | 20|2022软件3 |
20220015|小文 |女 | 17|2022软件3 |
20220016|小莉 |女 | 19|2022软件3 |
20220017|小博 |男 | 18|2022软件3 |