SQL数据库结构
基本表是实际存储于存储文件中的表,基本表中的数据是需要存储的。
视图在SQL中只存储其由基本表导出视图所需要的公式,即由基本表产生视图的映像信息,其数据并不存储,而是在运行过程中动态产生与维护的。
对视图数据的更改最终要反映在对基本表的更改上。
视图的定义
视图需要“先定义,在使用”
定义视图
CREATE VIEW view_name[(列名[,列名]...)]as 子查询[with check option]
如果视图的属性名缺省,则默认为子查询结果中的属性名;也可以显示指明其所拥有的的列名。
with check option指明当对视图进行insert、update、delete时,要检查进行insert、update、delete的元组是否满足视图定义中子查询中定义的条件表达式
SQL视图更新
视图更新是比较复杂的问题,因视图不保存数据,对视图的更新最终要反映到对基本表的更新上,而有时,视图定义的映射是不可逆的
SQL视图更新的可执行性
- 如果视图的SELECT目标列包含聚集函数,则不能更新
- 如果视图的SELECT子句使用了
unique
或distinct
,则不能更新 - 如果视图中使用了
group by
子句,则不能更新 - 如果视图中包括经算术表达式计算出来的列,则不能更新
- 如果视图是由单个表的列构成的,但并没有包括主键,则不能更新
- 对于由单一Table子集构成的视图,即如果视图是从单个基本表使用选择、投影操作导出的,并且包含了基本表的主键,则可以更新
视图的撤销
DROP VIEW view_name