✅什么是视图,视图的作用是什么?
典型回答
所谓视图,其实就是一个数据快照,他并不是一个物理的存储,而是一个逻辑表。它是基于一个或多个实际表或其他视图的查询结果集。
举个例子,比如我的表中有各种业务的数据,他们彼此之间是通过租户 ID 进行逻辑隔离的,但是当我们在做数据分析或者报表的时候,需要给某个租户提供一些数据,这时候就可以做个视图,把只属于他的数据给他看,不属于他的数据就不包含在这个视图中,他就看不到。
通过上面的例子就能知道,视图有这么几个好处:
数据安全:通过视图可以限制用户对表中全量数据的访问,用户只能看到视图中定义的数据,而不能直接访问或修改基础表中的数据。这可以增强数据安全性。
数据独立性:视图可以提供与底层表结构无关的数据接口,如果基础表结构发生变化,只需要修改视图定义,而不需要更改使用视图的应用程序。
创建视图使用 CREATE VIEW 语句:
CREATE VIEW emp_dept_view AS
SELECT e.employee_id, e.first_name, e.last_name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id;查询视图就和查询普通表一样:
SELECT * FROM emp_dept_view;其实,视图不仅仅 Oracle 中支持,MySQL 也是支持的,但是一般在 MySQL 用的比较少而已,主要是因为他并不是完美无缺的,他还有一些问题的,比如:
- 性能问题:
- 视图是基于查询的逻辑表,每次访问视图时都会执行其定义的查询。如果视图包含复杂的查询或涉及大量数据,可能会影响性能。
- 更新限制:
- 并非所有视图都可以更新。对于包含聚合函数、复杂联接、子查询等的视图,通常无法直接进行插入、更新或删除操作。
- 调试和维护复杂:
- 由于视图是基于查询的抽象层,调试和优化视图可能比直接操作基础表更加复杂。
- 如果视图定义过于复杂或依赖多个其他视图或表,维护起来也会更加困难。