SQL - 浅谈视图

用途

当业务复杂化,咱们就须要外键关联,而对于高频CRUD的表,外键关联具有的强耦合,会致使维护成本偏高。sql

这时,开始使用中间表,中间表的瓶颈在于:数据的数量级将极大影响效率。数据库

最终,咱们找到了视图。函数

概念

视图是一个虚拟表,它存在、可被查询,却很难修改、不建议修改(具有多种限制)。优势在于:视图的字段由咱们定义,这样大大的优化了查询效率。
(能够想象,视图查询实际上是对格式化表的查询优化

每次查询视图,数据库都将显示最新的数据。
每次修改数据,数据库都将同步到基础表(若是规则容许的话)。code

优越之处

  • 分拆表、重构数据库,视图保证了业务逻辑不变ci

  • 视图做为格式化表,有效遮蔽了保密数据同步

代码

下列代码建立了一个名为table_test的简单视图。it

CREATE VIEW table_test AS(
    SELECT s.id AS id, 
    u.city AS city, 
    u.username AS username, 
    u.age AS age, 
    c.people AS people, 
    c.area AS area
    FROM user u, city c WHERE u.cityid = c.id
);

接下来,咱们对这个视图的结构,进行修改。(再次重申,不建议修改视图数据)table

ALTER VIEW table_test AS(
    SELECT s.id AS id, 
    u.city AS city, 
    u.username AS username, 
    c.people AS people, 
    c.area AS area
    FROM user u, city c WHERE u.cityid = c.id
);

不可修改

尽管有各类各样的原则,去建议你们不对视图作修改,但业务场景永远高于理论原则,因此在这里,列出 “拥有如下结构,将不能修改视图数据”class

  • 聚合函数(SUM(), MIN(), MAX(), COUNT()等)。

  • DISTINCT

  • GROUP BY

  • HAVING

  • UNION或UNION ALL

  • 位于选择列表中的子查询

  • Join

  • FROM子句中的不可更新视图

  • WHERE子句中的子查询,引用FROM子句中的表。

  • 仅引用文字值(在该状况下,没有要更新的基本表)。

  • ALGORITHM = TEMPTABLE(使用临时表总会使视图成为不可更新的)。

相关文章
相关标签/搜索