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

本文介绍了MySQL中的视图,视图是一个虚拟的表,用于重用复杂的SQL语句,简化查询操作。通过创建视图,可以方便地对数据进行部分访问,保护数据安全,更改数据表示。视图通常由SELECT语句定义,但并非所有视图都可更新,更新条件受到一些限制,如分组、联结、子查询等。视图不能索引,但可以与其他表一起使用。
摘要由CSDN通过智能技术生成

视图

参考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()等);

使用视图应注意的限制

  1. 与表一样,视图必须唯一命名(不能给视图取与别的视图或表相同的名字)
  2. 对于可以创建的视图数目没有限制。
  3. 为了创建视图,必须具有足够的访问权限。这些限制通常由数据库管理人员授予。
  4. 视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造一个视图。
  5. ORDER BY可以用在视图中,但如果从该视图检索数据SELECT中也含有ORDER BY,那么该视图中的ORDER BY将被覆盖。
  6. 视图不能索引,也不能有关联的触发器或默认值。
  7. 视图可以和表一起使用。例如,编写一条联结表和视图的SELECT语句。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值