数据库视图、应用与优缺点

什么是数据库视图

视图是由从数据库的表中选出来的数据组成的逻辑窗口,它与表不同的是,视图是一个虚表。

数据库只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。所以基本表中的数据发生变化,从视图中查询出的数据也就随之改变了。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化。

视图中的数据行和列都是来自于基本表,是在视图被引用时动态生成的,每次select from 某个视图的时候,都会先执行一遍视图中定义的查询。

使用视图可以集中、简化和制定用户的数据库显示,用户可以通过视图来访问数据,而不必直接去访问该视图的基本表。

视图的应用

  • 重用SQL语句
  • 简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必知道它的基本查询细节
  • 使用表的组成部分而不是整个表
  • 保护数据。可以给用户授权表的特定部分的访问权限而不是整个表的访问权限
  • 更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据

视图的分类

普通视图

特点:普通视图是基于 SELECT 查询创建的逻辑视图,不存储数据,而是在查询时动态执行原始 SQL。

适用场景:
简化复杂的查询语句
复用 SQL 逻辑
为用户提供安全的只读数据接口(通过限制权限)

CREATE VIEW employee_info AS
SELECT e.employee_id, e.name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id;
可更新视图

特点:MySQL 中某些视图是可更新的,意味着你可以通过视图更新底层的基础表。可更新视图的基本条件是视图直接映射到基础表,而不涉及聚合、分组、子查询等复杂查询。

适用场景:
简化操作时直接通过视图更新、插入或删除数据
提供更简洁的接口用于对基础表的数据操作

CREATE VIEW basic_employee_info AS
SELECT employee_id, name, salary
FROM employees;

UPDATE basic_employee_info
SET salary = salary * 1.1
WHERE employee_id = 101;
只读视图

特点:如果视图不能满足更新条件或被明确定义为只读,那么该视图就是只读视图,不能通过它对基础表进行增删改操作。

适用场景:
提供安全的、不可更改的数据视图
避免用户无意中修改数据

CREATE VIEW department_stats AS
SELECT department_id, COUNT(*) AS employee_count
FROM employees
GROUP BY department_id;
这是一个只读视图,不能用于修改 employees 表中的数据。
物化视图

特点:物化视图不同于普通视图,它不仅是查询的结果,还会将数据存储起来。物化视图在查询时不需要重新执行 SQL,而是直接访问存储的数据。MySQL 目前不原生支持物化视图,但可以通过手动维护或借助外部工具来模拟。

适用场景:
对于需要频繁查询且数据变化不频繁的场景,物化视图可以显著提高查询性能
在数据量特别大或查询非常复杂的情况下,避免每次查询时重新计算

模拟物化视图的方案:
可以通过定时任务或触发器,将查询结果定期存入表中。

CREATE TABLE department_stats AS
SELECT department_id, COUNT(*) AS employee_count
FROM employees
GROUP BY department_id;

-- 每日定时更新数据
INSERT INTO department_stats
SELECT department_id, COUNT(*) AS employee_count
FROM employees
GROUP BY department_id;

视图的优缺点

优点
数据安全性

对不同的用户定义不同的视图,使用户只能看到与自己有关的数据。通过使用视图,可以限制用户对底层表的直接访问,只允许他们访问视图中定义的数据子集。这提供了一种机制来实现数据安全性和访问控制。

简化查询、代码复用

为复杂的查询建立一个视图,用户不必输入复杂的查询语句,只需针对此视图做简单的查询即可。那些被经常使用的查询可以被定义为视图,从而使用户不必为以后的操作每次都指定全部的条件。

逻辑独立性、数据抽象

视图可以使应用程序和数据库表在一定程度上独立。程序可以建立在视图之上,从而程序与数据库表被视图分割开来。当构成视图的基本表需要修改时,只需要修改视图定义的部分,而基于视图的查询不用改变。

缺点

性能:查询的时候得把视图的查询转化成对基本表的查询。

修改限制:当用户试图修改视图的某些行时,得把它转化为对基本表的某些行的修改,而且有些还是不能修改的。

创建视图的限制:定义视图的查询中不能含有ORDER BY\COMPURER\COMPUTER BY 子句和INTO关键字。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值