【数据库】约束
文章目录
- 什么是视图
- 创建视图
- 使用视图
- 修改数据(更新视图)
- 删除视图
- 视图的优点
什么是视图
视图是⼀个虚拟的表,它是基于⼀个或多个基本表或其他视图的查询结果集。视图本⾝不存储数据,⽽是通过执⾏查询来动态⽣成数据。⽤户可以像操作普通表⼀样使⽤视图进⾏查询、更新和管理。视图本⾝并不占⽤物理存储空间,它仅仅是⼀个查询的逻辑表⽰,物理上它依赖于基础表中的数据。
创建视图
# 语法
CREATE VIEW view_name [(column_list)] AS select_statement
使用视图
查询⽤户的所有信息和考试成绩:
不指定列名定义视图:
 
 定义视图时出现了重复的列的报错,我们需要给每一个列起别名。
 
 这时查看表就能看到视图了
 
 
 指定列名定义视图:
create view v_student_score_v (id,name,class_id,class_name,course_id,course_name,score_id,score)as (
select 
student.student_id,
student.name as student_name,
class.class_id,
class.`name` as class_name,
course.course_id,
course.`name` as course_name,
score.score_id,
score.score
from student,course,class,score
where student.student_id = score.score_id ANDstudent.class_id = class.class_id ANDcourse.course_id = score.course_idorder by student_id asc
);
**指定列名定义视图时,可以不使用as对相同的列名起别名也可以正常创建。
注:此代码与上一个代码略有不同,此代码使用student_id升序排列,后面有用。**
修改数据(更新视图)
通过真实表修改数据,会影响视图:
 

 
 通过视图修改数据会影响基表:
 
 如果视图在定义时使用了order by ,就没法更新。
 • 修改真实表会影响视图,修改视图同样也会影响真实表
 • 以下视图不可更新:
 ◦ 创建视图时使⽤聚合函数的视图
 ◦ 创建视图时使⽤ DISTINCT
 ◦ 创建视图时使⽤ GROUP BY 以及 HAVING ⼦句
 ◦ 创建视图时使⽤ UNION 或 UNION ALL
 ◦ 查询列表中使⽤⼦查询
 ◦ 在FROM⼦句中引⽤不可更新视图
正常更新的情况下,可以实现数据修改:
 
删除视图
语法:
# 语法
drop view view_name;视图的优点
- 简单性:视图可以将复杂的查询封装成⼀个简单的查询。例如,针对⼀个复杂的多表连接查询,可以创建⼀个视图,⽤⼾只需查询视图⽽⽆需了解底层的复杂逻辑。
- 安全性:通过视图,可以隐藏表中的敏感数据。例如,⼀个系统的⽤⼾表中,可以创建⼀个不包含密码列视图,普通⽤⼾只能访问这个视图,⽽不能访问原始表。
- 逻辑数据独⽴性:视图提供了⼀种逻辑数据独⽴性,即使底层表结构发⽣变化,只需修改视图定义,⽽⽆需修改依赖视图的应⽤程序。使⽤到应⽤程序与数据库的解耦
- 重命名列:视图允许⽤户重命名列名,以增强数据可读性。
