1. 视图简介
2. 视图使用
1. 视图简介
视图与表(有时为与视图区别,也称表为基本表——Base Table)不同,视图是虚拟的表,即视图所对应的数据并不进行实际存储,数据库中只存储视图的定义,也就是说视图本身没有数据,只是通过执行相应的 select 语句获得相应的数据。
使用视图的意义
- 重用性:视图就像是函数,那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。
- 简单性:看到的就是需要的。用户不必理解查询细节。
- 安全性:可以对不同的用户,设定不同的视图。且用户只能以只读视图检索数据,但无法更新。
- 独立性:更改数据格式和表示。视图可返回与基本表的表示和格式不同的数据。
- 重构性:数据库视图可以实现向后兼容。假设我们有一个*数据库,许多应用程序正在使用它。有一天,我们决定重新设计数据库以适应新的业务需求,希望删除一些表并创建新的表,并且不希望更改影响其他应用程序。在这种情况下,就可以创建与将要删除的旧表相同的模式的数据库视图。
视图的缺点
除了上面的优点,使用数据库视图有几个缺点:
- 性能:从数据库视图查询数据可能会很慢,比如视图是基于其它视图创建的。
- 表依赖关系:每当基本表更改表结构时,也必须一并更改视图。
视图的使用规则
- 与表名一样,视图必须唯一命名。
- 可创建的视图数目没有限制。
- 为了创建视图必须有足够的权限。
- 视图可以嵌套,即可以使用其它视图来构造一个视图。
- ORDER BY 可以用在视图中,但如果从该视图检索数据的 SELECT 语句中也含有 ORDER BY,那么视图中的 ORDER BY 将被覆盖。
- 视图无法创建索引,也不能有关联的触发器或默认值。
- 视图可以和表一起使用。
2. 视图使用
创建视图
CREATE VIEW v_ecs_order_info AS SELECT order_id, order_sn, order_amount, consignee FROM ecs_order_info;
-- 使用视图来查询数据
select * from v_ecs_order_info;
查看视图
show table status where comment='view'; -- 查看现有的视图及其信息
删除视图
DROP VIEW v_ecs_order_info;
更新视图
--方式1:先用 DROP 删除视图,再用 CREATE 创建视图。
--方式2:使用 CREATE OR REPLACE VIEW -- 如果要更新的视图不存在则会创建一个视图,若存在则会替换原来的视图 CREATE OR REPLACE VIEW v_ecs_order_info AS SELECT order_id, order_sn, order_amount, pay_status, consignee FROM ecs_order_info;
-- 方式3:使用 ALTER ALTER VIEW v_ecs_order_info AS SELECT order_id, order_sn, order_amount, pay_status, consignee FROM ecs_order_info;