您的位置:首页 > 新闻 > 热点要闻 > (MySQL)视图

(MySQL)视图

2025/1/7 20:38:12 来源:https://blog.csdn.net/2401_83526138/article/details/142185565  浏览:    关键词:(MySQL)视图

注:此博文是本人学习过程中的笔记

1.概念

视图是一个虚拟的表,它是基于一个或多个基本表或其他视图的查询结果集。视图本身不存储数据,而是通过执行查询来动态生成数据。用户可以像操作普通表一样来使用视图查询,更新和管理。视图本身并不占用物理存储空间,它仅仅是一个查询的逻辑表示,物理上它依赖于基础表中的数据。

2.创建视图

-- 语法
CREATE VIEW view_name [(column_list)] AS select_statement;

3.使用视图 

查询用户的所有信息和考试成绩

-- 使用真实表进行查询
select
s.id, s.name, s.sno, s.age, s.gender, s.enroll_date, 
c.id, c.`name`, 
sc.id, sc.score
from student s, class c, score sc
where s.class_id = c.id
and sc.student.id = s.id
and sc.course_id = co.id
order by s.id;-- 创建视图,在select中使用别名
create view v_student_score as
select s.id, s.name, s.sno, s.age, s.gender, s.enroll_date, 
c.id as class_id, c.`name` as class_name, 
co.id as course_id, co.`name` as course_name, sc.id as score_id, sc.score
where s.class_id = c.id
and sc.student_id = s.id
and sc.course_id = co.id
order by s.id;-- 创建视图,指定结果集中的列名
create view v_student_score_v1
(id, name, sno, age, gender, enroll_date,
class_id, class_name, 
course_id, course_name, score_id, score) as
select s.id, s.name, s.sno, s.age, s.gender, s.enroll_date,
c.id, c.`name`, 
co.id, co.`name`, 
sc.id, sc.score
from student s, class c, course, co, score sc
where s.class_id = c.id
and sc.student_id = s.id
and sc.course_id = co.id;-- 查询视图
select * from v_student_score;
select * from v_student_score_v1;

查询用户的姓名和总分(隐藏学号和各科成绩)

-- 使用真实表进行查询
select s.name, sum(sc.score) total 
from student s, score sc
where s.id = sc.student_id
group by sc.student.id 
order by s.id;
-- 如果使用真实表,在查询列表中随时可以加上学号字段-- 创建视图
create view v_student_total_points as
select s.id, s.name, sum(sc.score) total
from student s, score sc
where s.id = sc.student_id
group by s.id
order by s.id;
-- 使用视图查询,只能查到学生姓名和总分,不能再添加查询字段 

视图和真实表进行表连接查询

select * from v_student_total_points v, student s, where v.id = s.id;

4.修改数据

通过修改真实表数据,会影响视图 

-- 修改唐三藏的JAVA成绩为99分
update score set score = 99 where student_id = 1 and course_id;-- 查询视图,发现唐三藏这条记录已被修改
select * from v_student_score;

通过视图修改数据会影响基表

-- 修改唐三藏的计算机网络成绩为99分
update v_student_score set score = 99 where score_id = 3;-- 查看真实表数据已被修改
select * from score where student_id = 1 and course_id = 5;

4.1.注意事项 

1.修改真实表会影响视图,修改视图同样也会影响真实表

2.以下视图不可更新

创建视图时使用聚合函数

创建视图时使用distinct

创建视图时使用group by以及having子句

创建视图时使用union或union all

查询列表中使用子查询

在from子句中引用不可更新视图 

5.删除视图

-- 语法
drop view view_name;

6.视图的优点 

1.简单性:视图可以将复杂的查询封装成一个简单的查询。例如,针对一个复杂的多表连接查询,可以创建一个视图,用户只需要查询视图而无需了解底层的复杂逻辑

2.安全性:通过视图,可以隐藏表中的敏感数据。例如,一个系统的用户表中,可以创建一个不包含密码列视图,普通用户只能访问这个视图,而不能访问原始表

3.逻辑数据独立性:视图提供了一种逻辑数据独立性,即使底层表结构发生变化,只需修改视图定义,而无需修改依赖视图的引用程序。使用到应用程序与数据库的解耦

4.重命名列:视图允许用户重命名列名,以增强数据可读性 

 

 

 

 

 

 

 

 

 

 

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com