在MySQL中使用视图的优点

时间:2010-01-13 07:02:30

标签: mysql stored-procedures views

我了解到视图可以用来创建自定义的“表视图”(也就是说)来聚合来自多个表的相关数据。

我的问题是:观点的优点是什么?具体来说,假设我有两个表:

event | eid, typeid, name
eventtype | typeid, max_team_members

现在我创建一个视图:

eventdetails | event.eid, event.name, eventtype.max_team_members 
             | where event.typeid=eventtype.typeid

现在,如果我希望某个团队允许某些event成员的最大成员数,我可以:

  • 使用视图
  • 进行连接查询(或者可能是存储过程)。

每种方法的优点/缺点是什么?

另一个问题:如果表事件和事件类型中的数据得到更新,那么更新视图中的数据是否有任何开销(考虑到它会缓存结果数据)?

2 个答案:

答案 0 :(得分:18)

视图不单独存储:查询视图时,视图将替换为该视图的定义。因此,表格中数据的更改将立即通过视图显示。

除了前面提到的安全功能:

如果您正在编写大量将执行该连接的查询,则会将该SQL代码计算出来。就像在多个地方使用的函数中执行某些操作一样,它可以使您的代码更容易读/写/调试。

它还允许您在一个地方更改将来执行连接的方式。也许1对多关系可能会成为多对多关系,在连接中引入额外的表。或者您可以决定反规范化并在每个事件记录中包含所有eventtype字段,这样您就不必每次都加入(交易空间用于查询执行时间)。

您可以稍后进一步拆分表,将其更改为3向连接,并且不必重写使用该视图的其他查询。

您可以向表中添加新列并更改视图以省略新列,以便在更改表定义时使用“select *”的某些旧查询不会中断。

答案 1 :(得分:13)

您可以将用户限制为视图而不是基础表,从而增强安全性。