我认为对于不同的数据库,定义可能有所不同(我在问题中标记了几个数据库),但是假设我有以下内容(以伪代码表示):
CREATE VIEW myview FROM
SELECT * FROM mytable GROUP BY name
然后我可以像这样查询视图:
SELECT * FROM myview WHERE name like 'bob%'
在这种情况下,“视图”到底在做什么?只是简写而已吗?
SELECT * FROM (
SELECT * FROM mytable GROUP BY name
) myview WHERE name like 'bob%'
还是创建视图会保留存储(或内存,索引等等)?换句话说,创建和访问视图时会发生什么内部变化?
答案 0 :(得分:2)
视图是引用存储的SQL查询的名称。引用时,查询的定义将在引用查询中替换。基本上是您所描述的简写。
视图是由标准定义的,并且在所有数据库中几乎都是相同的。
视图不会永久存储数据。每次引用它时,代码都会运行。一个警告是-在某些数据库中-视图可能是预编译的,因此预编译的代码实际上包含在查询计划中。
相比之下,某些数据库支持实例化视图。这些是非常不同的野兽,它们确实存储数据。
答案 1 :(得分:0)
其他观看原因:
并不是每个人都是SQL专家,因此数据库管理员可能会开发由多个表上的复杂联接组成的视图,以使用户可以轻松访问他们可能需要访问的数据,但可能不知道如何最好地做到这一点。
在某些数据库上,您还可以创建只读视图。同样,DBA可能会创建这些限制用户的操作,以限制用户可以对某些表执行的操作。
DBA可能还会创建一个视图,以限制用户可以查看的表的哪些列。