(一)视图理解
在 MySQL 中,视图(View)是虚拟的表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。
- 上述我们了解了视图的基本概念,接下来我们就需要动手实践一番。
1、基本使用
1.1创建视图
create view 视图名 as select语句;
- 当前我们需要在表中筛选得到以下信息(该测试表为 oracle 9i ):
但是,当我们下次在想查看到当前数据时又需要进行复杂的操作,那么有没有一种方法可以解决这样的问题,避免繁琐的操作呢? ——此时就可以通过创建 视图 的方式来合理避免。
- 同时,我们也可以新起一个窗口可以发现创建之后多出了一个文件:
- 我们去验证查看当前【myviem】中的数据是不是之前的数据:
1.2 修改视图
在 MySQL 中,修改视图可能会对依赖该视图的查询或应用产生影响,具体的影响取决于所做的修改。
修改了视图,对基表数据有影响 :
- 此时,我们再去原表查询看是否原数据被修改:
修改了基表,对视图有影响:
- 此时,我们再去视图查询看是否数据被修改:
在进行任何修改之前,建议进行充分的测试,并确保修改不会破坏现有的查询逻辑。可以使用事务来包装修改操作,以便在出现问题时可以回滚到修改前的状态。
1.3 删除视图
drop view 视图名;
2、视图规则和限制
- 与表一样,必须唯一命名(不能出现同名视图或表名)
- 创建视图数目无限制,但要考虑复杂查询创建为视图之后的性能影响
- 视图不能添加索引,也不能有关联的触发器或者默认值
- 视图可以提高安全性,必须具有足够的访问权限
- order by 可以用在视图中,但是如果从该视图检索数据 select 中也含有 order by ,那么该视图 中的 order by 将被覆盖
- 视图可以和表一起使用
(二)小结
- 要注意的是,在处理大量数据或复杂查询时,使用视图可能会影响性能,因为每次查询视图时都要重新执行其基础的查询;
- 在创建和使用视图时,需要考虑其对性能的影响,因此在许多大公司是不允许用视图的,大家只需知道即可。