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