MySQL之视图

1. 视图的定义

  • 是个虚拟表,是从数据库中一个或多个表中导出的表;
  • 可以像表一样进行查询,修改和删除操作。通过视图新增或删除数据,会影响基本表,反之亦然;

2. 视图作用

  • 简单化
    • 简化用户对数据的理解。经常被使用的查询可以被定义为视图,减少SQL编写。
  • 安全性
    • 数据库的授权只能定义到表级别,而视图可以细化到特定的行和列。
  • 逻辑数据独立性
    • 屏蔽真实表结构变化带来的影响

3. 创建视图

先创建一个简单的表:

DROP TABLE IF EXISTS `t`;
CREATE TABLE t(quantity INT, price INT);

INSERT INTO t VALUES(1, 2),(3, 4);

为该表创建视图:

DROP VIEW IF EXISTS `view_t`;
-- 其实感觉就是写select 语句
CREATE VIEW view_t AS SELECT quantity, price , quantity * price FROM t;

查询视图:

DESCRIBE view_t;  -- 查看视图包含的基本字段信息

在使用视图时,用户不需要了解基本表结构,更接触不到实际表中数据,保证了数据库的安全。

4. 查看视图信息

  • 查看数据库中已存在视图的定义:
DESCRIBE view_t;  --查看视图包含的基本字段信息
-- 等价
DESC view_t;

SHOW TABLE STATUS LIKE '%view_t%';

SHOW CREATE VIEW view_t; -- 显示建视图语句

SELECT * FROM information_schema.views; -- 查询所有视图信息

5. 修改视图结构

CREATE OR REPLACE VIEW view_t AS SELECT * FROM t;
-- 等价
ALTER VIEW view_t AS SELECT quantity FROM t;

6. 更新视图

更新视图指通过视图来插入,更新,删除真实表数据。

UPDATE view_t SET quantity = 100 WHERE price > 5;
-- 使用DELETE语句删除符合条件的记录
DELETE FROM view_t;

注意:通过视图更新所影响的行受限于定义视图的语句。也就是更新视图所影响的行是更新视图语句的where条件和定义视图的where条件的交集。

举例:

-- 修改视图只查询price<5的行
CREATE OR REPLACE VIEW view_t AS SELECT * FROM t WHERE price < 5;
-- 执行update视图操作,最后影响的行为0,因为两个where条件取交集互斥
UPDATE view_t SET quantity = 100 WHERE price > 5;

另外需要注意的是,当视图包含如下内容时,更新操作不能执行:

  • 尝试更新视图中未定义的非空列;
  • 视图中的列由数学表达式,聚合函数,distinct,union,group by,having 等语句产生时,更新该列会报错

关于第二点的理解,我认为是由于该列不能对应到物理表的某一列,所以才不能更新。

7. 删除视图

DROP VIEW IF EXISTS `view_t`;

8.总结

视图与表的区别与联系:

  • 区别

    • 视图时已经编辑好的SQL,基于SQL语句的结果集的可视化表,表不是
    • 视图没有实际的物理记录
    • 表是内容,视图时窗口
    • 表占物理空间,视图不占物理空间,视图时逻辑概念
    • 视图的建立和删除只影响视图本身
  • 联系

    视图建立在基本表之上,结构和内容都来自基本表。一个视图可以对应一个表,可以对应多个表。
    它是基本表的抽象和逻辑意义上建立的新关系。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值