MST

星途 面试题库

面试题:MySQL中视图的主要作用有哪些,请举例说明

阐述MySQL视图在实际应用场景中的常见作用,比如简化复杂查询、提供数据安全保护等,并针对每个作用给出至少一个简单的SQL示例。
25.3万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

1. 简化复杂查询

在实际应用中,可能经常需要执行一些复杂的多表联合查询。视图可以将这些复杂查询封装起来,使得后续使用时就像查询一张简单的表一样。 例如,有三张表students(学生表,包含student_id, name等字段),scores(成绩表,包含student_id, course_id, score等字段),courses(课程表,包含course_id, course_name等字段)。要查询每个学生及其对应的所有课程成绩和课程名,这是一个三表联合查询,直接写会比较复杂:

SELECT s.name, c.course_name, sc.score
FROM students s
JOIN scores sc ON s.student_id = sc.student_id
JOIN courses c ON sc.course_id = c.course_id;

如果将这个查询创建为视图,后续使用就会很方便:

CREATE VIEW student_course_scores AS
SELECT s.name, c.course_name, sc.score
FROM students s
JOIN scores sc ON s.student_id = sc.student_id
JOIN courses c ON sc.course_id = c.course_id;

之后查询视图就如同查询普通表:

SELECT * FROM student_course_scores;

2. 提供数据安全保护

通过视图,可以限制用户只能看到部分数据,而不是整个表的数据,从而增强数据安全性。 假设employees表包含employee_id, name, salary, department等字段,公司只想让普通员工看到其他员工的姓名和部门,而看不到薪资。可以创建如下视图:

CREATE VIEW employee_basic_info AS
SELECT name, department
FROM employees;

普通员工查询视图时,就看不到薪资信息:

SELECT * FROM employee_basic_info;

3. 逻辑数据独立性

当底层表结构发生变化时,只要视图的逻辑不变,基于视图的应用程序不需要修改。 例如,原来products表有product_id, product_name, price字段,现在新增了description字段。如果应用程序一直是基于视图操作数据,只要视图的定义不变(例如视图原来只查询product_idproduct_name),应用程序无需修改。假设原来的视图:

CREATE VIEW product_simple_view AS
SELECT product_id, product_name
FROM products;

即使表结构变化,查询视图的方式依旧:

SELECT * FROM product_simple_view;