九、MySQL视图

视图

作用:可以当做是保存SQL语句的一种方式,创建的视图是根据AS关键字后面的条件结果生成的视图,而表就称为基表。创建出来的视图可以当做一个表,也就是做可以像表那样操作增删改查,然后查询到的也是动态的基表的数据,添加也是会添加到基表中。

视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就是创建这条SQL查询语句

  1. 简单

    视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件

  2. 安全

    数据库可以授权,但不能授权的数据库特定行和特定的列上。通过视图用户只能查询和修改他们所能见到的数据

  3. 数据独立

    视图可帮助用户屏蔽真实表结构变化带来的影响

操作视图

视图的操作是和操作表一样的

创建视图

创建视图语句

# 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 ...;

视图的更新

要使视图可更新,视图中的行与基础表中的行之间必须存在一对一的关系。如果视图包含以下任何一项,则该视图不可更新

  1. 聚合函数或窗口函数(SUM()、MIN()、MAX()、COUNT()等)
  2. DISTINCT
  3. GROUP BY
  4. HAVING
  5. UNION 或者 UNION ALL
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值