数据库知识总结

您所在的位置:网站首页 视图表达方法有哪些 数据库知识总结

数据库知识总结

2024-04-21 01:13| 来源: 网络整理| 查看: 265

一. 使用视图

本节用到的表结构定义如下:

orderitems表orders表customers表

1.视图

视图是虚拟的表,它不包含表中应该有的任何列和数据,只包含使用时动态检索数据的查询。视图的常见应用:

(一)重用SQL。

(二)简化复杂的SQL操作,在编写查询后,可以方便地重用它而不必知道它的基本查询细节。

(三)使用表的组成部分而不是整个表。

(四)保护数据。给用户授予表的特定权限。

(五)更改数据格式和表示。

在视图创建之后,可以用和表基本相同的方式利用它们。可以对视图执行SELECT操作,过滤和排序数据,将视图联结到其他视图或表,甚至能添加和更新数据。在添加或更改这些表中的数据时,视图将返回改变过的数据。视图创建和使用的规则和限制如下所示:

(一)与表一样,视图必须唯一命名。

(二)创建的视图数目没有限制。

(三)为了创建视图,必须有足够的访问权限。

(四)视图可以嵌套,可以利用从其它视图中检索数据的查询来构造一个视图。

(五)Order by可以用在视图中,若select中含有order by,则视图的将被覆盖。

(六)视图不能索引,也不能有关联的触发器或默认值。

(七)视图可以和表一起使用。

2.使用视图

(一)视图用create view创建;

(二)使用show create view viewname; 查看创建视图的语句;

(三)用Drop删除视图,例如Drop view viewname;

(四)更新视图时,可以先用drop再用create,也可以直接用create or replace view。若更新的视图不存在,则第二条更新语句会创建一个视图,若存在,则会替换原有视图。

视图最常见的应用之一是隐藏复杂的通常都涉及联结的sql。

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;

这条语句创建一个名为productcustomers的视图,它联结三个表,以返回已订购了任意产品的所有客户的列表。下面两个例子是对该视图进行查询操作:

// 列出订购任意商品的客户 select * from productcustomers;// 检索订购产品tnt2的客户 Select cust_name,cust_contact From productcustomers Where prod_id = ‘TNT2’;

可以看出,从视图中检索特定数据时,极大地简化了复杂sql语句的使用。这样我们可以利用视图一次性编写基础SQL,然后根据需要多次使用。

(1)用视图重新格式化检索出的数据

//下面是单个组合计算列中返回供应商名和城市 Select concat(RTrim(vend_name),‘(’,RTrim(vend_country),‘)’) as vend_title from vendors order by vend_name;

假设我们经常需要这种格式,可以创建一个视图,每次需要时用它即可。

//转换为视图 Create view vendorlocations as Select concat(RTrim(vend_name),‘(’,RTrim(vend_country),‘)’) as vend_title from vendors order by vend_name; //检索出所有数据 select * from vendorlocations;

(2)用视图过滤不想要的数据

视图对于应用普通的WHERE 子句也很有用。例如,可以定义customeremail视图,它过滤没有电子邮件地址的客户。

Create view customeremail as Select cust_id,cust_name,cust_email From customers Where cust_email is not null;

显然,在发送电子邮件到邮件列表时,需要排除没有电子邮件地址的用户。使用该视图。

select * from customeremail;

(3)使用视图和计算字段

视图对于简化计算字段的使用特别有用。例如下面是检索某个特定订单中的物品,计算每种物品的总价格。

Select prod_id,quantity,item_price, quantity*item_price as expanded_price From orderitems Where order_num = 20005; // 转换为视图 Create view orderitemsexpanded as Select order_num,prod_id,quantity,item_price, quantity*item_price as expanded_price From orderitems; // 检索20005的内容: Select * from orderitemsexpanded where order_num = 20005;

可以看到,正确使用视图可以极大简化复杂的数据处理。

3.更新视图 通常,视图是可更新的(即,可以对它们使用INSERT、UPDATE和DELETE)。更新一个视图将更新其基表,如果你对视图增加或删除行,实际上是对其基表增加或删除行。但是并非所有视图都是可更新的,如果MySQL不能正确地确定被更新的基数据,则不允许更新。如果视图定义中有以下操作,则不能进行视图的更新:分组;联结;子查询;并;聚集函数;DISTINCT;导出列。因此视图主要用于数据的检索(select)而不用于更新(insert,update,delete)。

总结一下:视图为虚拟的表。它们包含的不是数据而是根据需要检索数据的查询。视图提供了一种MySQL的SELECT语句层次的封装,可用来简化数据处理以及重新格式化基础数据或保护基础数据。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3