jrh*_*ath 22 mysql stored-procedures views
我已经了解到,可以使用视图创建自定义"表视图"(也就是说)来聚合来自多个表的相关数据.
我的问题是:观点的优点是什么?具体来说,假设我有两个表:
event | eid, typeid, name
eventtype | typeid, max_team_members
Run Code Online (Sandbox Code Playgroud)
现在我创建一个视图:
eventdetails | event.eid, event.name, eventtype.max_team_members
| where event.typeid=eventtype.typeid
Run Code Online (Sandbox Code Playgroud)
现在,如果我想让一些团队允许的最大成员数量event,我可以:
每种方法的优点/缺点是什么?
另一个问题是:如果表事件和事件类型中的数据得到更新,是否有任何开销涉及更新视图中的数据(考虑到它缓存结果数据)?
Har*_*d L 19
视图不会单独存储:查询视图时,视图将替换为该视图的定义.因此,表格中的数据更改将立即通过视图显示.
除了之前指出的安全功能:
如果您正在编写大量将执行该连接的查询,则会将该SQL代码计算出来.就像在多个地方使用的函数中执行某些操作一样,它可以使您的代码更容易读/写/调试.
它还允许您在一个地方更改将来执行连接的方式.也许1对多关系可能会成为多对多关系,在连接中引入额外的表.或者您可以决定非规范化并在每个事件记录中包含所有eventtype字段,这样您就不必每次都加入(交易空间用于查询执行时间).
您可以稍后进一步拆分表,将其更改为3向连接,并且不必重写使用该视图的其他查询.
您可以向表中添加新列并更改视图以省略新列,以便在更改表定义时使用"select*"的某些旧查询不会中断.