大师网-带你快速走向大师之路 解决你在学习过程中的疑惑,带你快速进入大师之门。节省时间,提升效率

SQL

用途

当业务复杂化,我们就需要外键关联,而对于高频CRUD的表,外键关联具备的强耦合,会导致维护成本偏高。

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

最终,我们找到了视图。

概念

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

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

优越之处

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

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

代码

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

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
);

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

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
);

不可修改

尽管有各种各样的原则,去建议大家不对视图做修改,但业务场景永远高于理论原则,所以在这里,列出 “拥有以下结构,将不能修改视图数据”

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

  • DISTINCT

  • GROUP BY

  • HAVING

  • UNION或UNION ALL

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

  • Join

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

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

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

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