视图(mysql)

一、什么是视图

视图是⼀个虚拟的表,它是基于⼀个或多个基本表或其他视图的查询结果集。视图本⾝不存储数 据,⽽是通过执⾏查询来动态⽣成数据。⽤⼾可以像操作普通表⼀样使⽤视图进⾏查询、更新和管 理。视图本⾝并不占⽤物理存储空间,它仅仅是⼀个查询的逻辑表⽰,物理上它依赖于基础表中的数 据。

二、创建视图

# 语法
CREATE VIEW view_name [(column_list)] AS select_statemen

三、使用视图

查询⽤⼾的所有信息和考试成绩

学生ID,学生姓名,所有班级名,课程和对用的成绩

select s.student_id,
       s.name,
       cls.class_id,
       cls.name,
       c.course_id,
       c.name,
       sc.score
from student as s,
     class as cls,
     course as c,
     score as sc
where s.class_id = cls.class_id
  and sc.student_id = s.student_id
  and sc.course_id = c.course_id
order by s.student_id;

1、定义视图

# 定义视图
create view v_student_score as
(
select s.student_id,
       s.name   as student_name,
       cls.class_id,
       cls.name as class_name,
       c.course_id,
       c.name   as course_name,
       sc.score
from student as s,
     class as cls,
     course as c,
     score as sc
where s.class_id = cls.class_id
  and sc.student_id = s.student_id
  and sc.course_id = c.course_id
order by s.student_id);

 执行代码时会出现异常

 

 解决方法:

分别对s.name、cls.name、c.name 起别名

# 定义视图
create view v_student_score as
(
select s.student_id,
       s.name   as student_name,
       cls.class_id,
       cls.name as class_name,
       c.course_id,
       c.name   as course_name,
       sc.score
from student as s,
     class as cls,
     course as c,
     score as sc
where s.class_id = cls.class_id
  and sc.student_id = s.student_id
  and sc.course_id = c.course_id
order by s.student_id);

2、查看视图:

show tables;

使用视图:

show create view v_student_score;


select * from v_student_score;

创建视图指定别名:

create view v_student_score_v1
            (
             id, name, class_id, class_name, course_id, course_name, score
                )
as
(
select s.student_id,
       s.name,
       cls.class_id,
       cls.name,
       c.course_id,
       c.name,
       sc.score
from student as s,
     class as cls,
     course as c,
     score as sc
where s.class_id = cls.class_id
  and sc.student_id = s.student_id
    );

 通过更新视图将分数改为80分

update v_student_score
set score=80
where student_id = 1
  and course_id = 1;

 

注意事项:

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

以下视图不可更新: 

1、创建视图时使⽤聚合函数的视图 ◦

2、创建视图时使⽤ DISTINCT ◦

3、创建视图时使⽤ GROUP BY 以及 HAVING ⼦句 ◦

4、创建视图时使⽤ UNION 或 UNION ALL ◦

5、查询列表中使⽤⼦查询 ◦

6、在FROM⼦句中引⽤不可更新视图

update v_student_score_v1 set score=80 where id = 1;

select *from v_student_score_v1 order by id asc;

select *from score where student_id = 1;

 不论是更新了视图还是基础表,相互都会被影响,查询出来的数据都是最新结果!

3、删除视图:

# 语法
drop view view_name;

四、视图的优点

1. 简单性:视图可以将复杂的查询封装成⼀个简单的查询。例如,针对⼀个复杂的多表连接查询,可 以创建⼀个视图,⽤⼾只需查询视图⽽⽆需了解底层的复杂逻辑。

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

3. 逻辑数据独⽴性:视图提供了⼀种逻辑数据独⽴性,即使底层表结构发⽣变化,只需修改视图定 义,⽽⽆需修改依赖视图的应⽤程序。使⽤到应⽤程序与数据库的解耦

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值