用途
当业务复杂化,我们就需要外键关联,而对于高频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(使用临时表总会使视图成为不可更新的)。