什么是视图?
1 个回答
只有行动才能说明一切。徐峰#### 视图的概念 视图是由从数据库的表中选出来的数据组成的逻辑窗口,它与表不同的是,视图是一个虚表。 数据库只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。 所以基本表中的数据发生变化,从视图中查询出的数据也会随之改变。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化。 视图中的数据行和列来自于基本表,是在视图被引用时动态生成的。每次执行 `SELECT FROM` 某个视图时,都会先执行一遍视图中定义的查询。 使用视图可以集中、简化和制定用户的数据库显示,用户可以通过视图来访问数据,而不必直接去访问该视图的基本表。 #### 视图的作用 ##### 优点 1. **数据安全性** 通过为不同的用户定义不同的视图,使用户只能看到与自己有关的数据。使用视图可以限制用户对底层表的直接访问,只允许他们访问视图中定义的数据子集,从而实现数据安全性和访问控制。 2. **简化查询、代码复用** 为复杂的查询建立视图,用户不必输入复杂的查询语句,只需对视图进行简单的查询即可。经常使用的查询可以被定义为视图,避免每次都重新编写相同的复杂查询条件。 **场景举例**: 如果一个表中有上百个字段,而视图只选择其中90多个字段,通过视图进行查询可以避免每次都写冗长的 `SELECT` 语句。对于需要复用的查询,视图可以大大简化SQL的编写。 如果只是为了代码复用,也可以考虑使用框架提供的功能(如 MyBatis 的 `include` 标签),但视图可以在数据库层面直接封装复杂查询,简化数据库访问。 3. **逻辑独立性、数据抽象** 视图可以使应用程序和数据库表在一定程度上独立。通过视图,应用程序可以使用抽象层,而不直接依赖底层表结构。当底层表的结构发生变化时,只需修改视图定义,而不必修改程序中的查询逻辑。 视图为应用程序提供了数据抽象层,隐藏了底层表结构的细节。即使底层表的结构发生变化,应用程序仍然可以继续使用视图而无需修改代码。 ##### 缺点 1. **性能问题** 查询视图时,必须先执行视图定义中的查询逻辑,然后再转换为对基本表的查询。这可能导致查询效率降低,特别是当视图涉及多个表的联接或复杂的聚合操作时。 2. **修改限制** 通过视图进行的数据修改操作受到限制。视图通常不能直接进行修改操作,尤其是当视图涉及多个表时,修改操作可能无法映射到底层的表结构。有些视图即使可以执行修改操作,限制也较多。 3. **创建视图的限制** - 定义视图时,查询中不能包含 `ORDER BY`、`COMPUTER BY` 子句和 `INTO` 关键字。 - 如果视图中某一列是一个算术表达式、构造函数或常数,且视图中两个或更多的列有相同的名称(通常由于联接操作中不同表的列有相同的列名),则需要为视图的每一列指定唯一的列名称。 ### 总结 视图作为数据库的一种虚拟表,提供了数据抽象、查询简化和安全性控制的功能。它能帮助我们隐藏复杂的表结构,简化查询逻辑,确保数据访问的安全性。不过,视图在性能和修改操作上存在一定的限制,因此在实际使用时需要根据需求权衡其优缺点。编辑于 2024-11-19 03:32 •IP属地 美国举报评论收藏
公众号进入网站体验更佳

