您的位置:首页 > 数据库 > MySQL

mysql基础教程(1)---视图

2015-11-12 09:55 447 查看

视图

参考mysql必知必会, 有不足和误解处还望指点。

视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。

视图的作用是让你把复杂的查询写在一起,方便重用。他的优点如下

重用SQL语句。

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

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

保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限。

更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。

假设有一查询语句

-- 根据用户id查询该用户姓名、地址、订单id, 订单价格(用户和订单的关系应该是一对多, 这里只做演示)
select u.name, u.address, o.id, o.price
from user u, order o
where u.id = o.u_id
and u.id = 1


假设该sql足够复杂, 每次我们想获取用户名和订单时都要经过这复杂的sql来查询,这是可把该sql语句封装成一视图

-- 创建视图用create view 跟试图名, 视图名要求在该数据库唯一, 在在后面跟上AS语句即可跟上自己的sql
create view viewname as
select u.name, u.address, o.id, o.price
from user u, order o
where u.id = o.u_id
and u.id = 1


此时该视图viewname 相当于一张表,只是是虚拟的表, 该虚拟表会又你的sql语句所查询的各个字段组成, 如上面的这个视图打开后就是如下格式

nameaddressidprice
adminchongqing15200
admin2chongqing1115202
admin3chongqing2125203
admin4chongqing3135204
既原sql中的查询字段组成视图虚拟表得各个字段。创建好视图后, 就可以直接对改视图进行查询操作,而不关心该视图的类别结构。

select * from viewname where id > 10 and name like '%admin%'


可直接把该视图当做表来查询, 当基础表(此为用户表和点单表)数据发生改变时, 视图也相应的更新。

迄今为止的所有视图都是和SELECT语句使用的。

然而,视图的数据能否更新?答案视情况而定。通常,视图是可更新的(即,可以对它们使用INSERT、UPDATE和DELETE)。更新一个视图将更新其基表(可以回忆一下,视图本身没有数据)。如果你对视图增加或删除行,实际上是对其基表增加或删除行。

但是,并非所有视图都是可更新的。基本上可以说,如果MySQL不能正确地确定被更新的基数据,则不允许更新(包括插入和删除)。这实际上意味着,如果视图定义中有以下操作,则不能进行视图的更新:

分组(使用GROUP BY和HAVING);

联结;

子查询;

并;

聚集函数(Min()、Count()、Sum()等);

使用视图应注意的限制

与表一样,视图必须唯一命名(不能给视图取与别的视图或表相同的名字)

对于可以创建的视图数目没有限制。

为了创建视图,必须具有足够的访问权限。这些限制通常由数据库管理人员授予。

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

ORDER BY可以用在视图中,但如果从该视图检索数据SELECT中也含有ORDER BY,那么该视图中的ORDER BY将被覆盖。

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

视图可以和表一起使用。例如,编写一条联结表和视图的SELECT语句。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql