一、视图
视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。
二、使用视图的意义
1.替代重复的SQL语句;
2.简化复杂的SQL操作。在编写查询后,可以方便地重用它,而不必知道它的基本查询细节;
3.使用表的组成部分而不是整个表;
4.保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限;
5.更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。
三、视图的规则和限制
1.与表名一样,视图必须唯一命名;
2.可创建的视图数目没有限制;
3.为了创建视图必须有足够的权限;
4.视图可以嵌套,即可以从其他视图中检索数据的查询来构造一个视图;
5.ORDER BY可以用在视图中,但如果从该视图检索数据的SELECT语句中也含有ORDER BY,那么视图中的ORDER BY将被覆盖;
6.视图不能索引,也不能有关联的触发器或默认值;
7.视图可以和表一起使用。
四、使用视图
1.创建视图
视图用CREATE VIEW语句来创建。可以使用SHOW CREATE VIEW viewname;来查询创建视图的语句。下面为创建视图的例子:
CREATE VIEW productCustomers AS
SELECT cust_name, cust_contact, prod_id
FROM customers, orders, orderitems
WHERE customers.cust_id = orders.cust_id AND
orderitems.order_num = orders.order_num;
使用下列语句来查看一下创建的视图:
SELECT *
FROM productCustomers
执行结果:
可以检索订购了产品TNT2的客户信息:
SELECT cust_name, cust_contact
FROM productCustomers
WHERE prod_id = 'TNT2';
执行结果:
2.删除视图
使用DROP删除视图,其语法为DROP VIEW viewname;下列语句将删除视图productCustomers:
DROP VIEW productCustomers;
删除后,若再想检索视图中的数据是将报错,如下所示:
3.更新视图
更新视图时,可以先用DROP删除视图,再用CREATE创建视图。也可以直接用CREATE OR REPLACE VIEW
。如果要更新的视图不存在则会创建一个视图,若存在则会替换原来的视图。
如果视图定义中有以下操作,则不能进行视图的更新:
分组(使用GROUP BY和HAVING);
联结;
子查询;
并;
聚集函数(Min()、Count()、Sum()等);
DISTINCT。
一般的,应该将视图用于检索(SELECT语句),而并不用于更新(INSERT、UPDATE、DELLETE)。