视图
作用:可以当做是保存SQL语句的一种方式,创建的视图是根据AS关键字后面的条件结果生成的视图,而表就称为基表。创建出来的视图可以当做一个表,也就是做可以像表那样操作增删改查,然后查询到的也是动态的基表的数据,添加也是会添加到基表中。
视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就是创建这条SQL查询语句
-
简单
视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件
-
安全
数据库可以授权,但不能授权的数据库特定行和特定的列上。通过视图用户只能查询和修改他们所能见到的数据
-
数据独立
视图可帮助用户屏蔽真实表结构变化带来的影响
操作视图
视图的操作是和操作表一样的
创建视图
创建视图语句
# OR REPLACE 替换同名视图
CREATE [OR REPLACE] VIEW viewName([columnList]) AS SELECT语句 [WITH [CASCADED | LOCAL] CHECK OPTION];
# SELECT语句查询到的结果就是视图的整体
检查选项
使用WITH [CASCADED | LOCAL] CHECK OPTION 子句创建视图时,MySQL会通过视图检查正在更改的每一个,如插入、更新、删除,使其符合视图的定义。MySQL允许基于另一个视图创建视图,它汇海检查依赖视图中的规则以保持一致性。为了确定检查范围,MySQL提供了两个选项:CASCADED | LOCAL; 默认值为 CASCADED.
会根据参照的视图创建条件进行检查是否满足条件,再添加(增删改),如果不使用检查选项,那么可以添加(增删改),并不会报错,使用了检查选项,就会报错导致添加(增删改)不成功
CASCADED
级联条件;MySQL允许基于另一个视图创建视图。所以会级联检查其它视图和本视图的条件,在增删改时会触发是否应该报错
CREATE [OR REPLACE] VIEW viewName([columnList]) AS SELECT colName FROM tableName WHERE AA > 'AA' WITH CASCADED CHECK OPTION;
LOCAL
也是递归查看基于关联视图的条件是否满足(但这里是需要判断关联视图是否使用了检查选项,如果不使用检查选项就不需要再检查 )
CREATE [OR REPLACE] VIEW viewName([columnList]) AS SELECT colName FROM tableName WHERE AA > 'AA' WITH LOCAL CHECK OPTION;
删改查
# 查看创建视图语句
SHOW CREATE VIEW tableName;
# 查看视图列表 -- 视图列表和表是属于一起的
SHOW TABLES;
-- 修改视图
CREATE OR REPLACE VIEW viewName([columnList]) AS SELECT语句 [WITH [CASCADED | LOCAL] CHECK OPTION];
ALTER VIEW viewName([columnList]) AS SELECT语句 [WITH [CASCADED | LOCAL] CHECK OPTION];
-- 删除视图
DROP VIEW [IF EXISTS] viewName [, viewName2];
操作视图数据
操作视图数据是和操作表一样的,被操作的数据也是直接对表的更新
-- 查看视图数据
SELECT * FROM tableName;
-- 插入数据
INSERT INTO viewName values(column1, column2);
# 插入的数据是放到基表里面的,视图只做查询
-- 修改数据
UPDATE SET columnName = newValue WHERE ...;
-- 删除数据
DELETE FROM viewName WHERE ...;
视图的更新
要使视图可更新,视图中的行与基础表中的行之间必须存在一对一的关系。如果视图包含以下任何一项,则该视图不可更新
- 聚合函数或窗口函数(SUM()、MIN()、MAX()、COUNT()等)
- DISTINCT
- GROUP BY
- HAVING
- UNION 或者 UNION ALL