mysql 很少使用视图_MySQL基础之使用视图

视图

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

为什么使用视图

重用SQL语句

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

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

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

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

在视图创建之后, 可以用与表相同的方式利用它们。可以对视图执行SELECT操作, 过滤和排序数据, 将视图联结到其他视图或表, 甚至能添加和更新数据

主要的是知道视图仅仅是用来查看存储在别处的数据的一种措施。视图本身不包含数据, 因此他们返回的数据是从其他表中检索出来的。在添加或更改这些表中的数据时, 视图将返回改变过的数据

视图的规则和限制

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

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

为了创建视图, 必须具有足够的访问权限

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

ORDER BY可以用在视图中

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

视图可以和表一起使用

使用视图

视图的创建

视图用CREATE VIEW语句来创建

使用SHOW CREATE VIEW viewname; 来查看创建视图的语句

用DROP删除视图, 其语法为DROP VIEW viewname;

更新视图时, 可以先用DROP再用CREATE, 也可以直接用CREATE OR REPLACE VIEW。如果要更新的数据不存在, 则第2条更新语句会创建一个视图

利用视图简化复杂的联结

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

MariaDB [crashcourse]> 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;

Query OK,0 rows affected (0.008sec)

MariaDB[crashcourse]>

视图极大的简化了复杂的SQL语句的使用。利用视图, 可以次性编写基础的SQL, 然后根据需要多次使用

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

如果进行需要一个格式的结果, 不必在每次需要时执行联结, 创建一个视图, 每次需要的时候使用它即可。

MariaDB [crashcourse]> CREATE VIEW vendorlocations AS SELECT Concat(RTrim(vend_name), '(', RTirm(vend_country), ')') AS vendors ORDER BY vend_name;

用视图过滤不需要的数据

视图对于应用普遍的WHERE子句也很有用。

MariaDB [crashcourse]> CREATE VIEW customeremaillist AS SELECT cust_id, cust_name, cust_email FROM customers WHERE cust_email IS NOT NULL;

Query OK,0 rows affected (0.002sec)

MariaDB[crashcourse]>

使用视图与计算字段

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

MariaDB [crashcourse]> CREATE VIEW orderitemsexpanded AS SELECT order_num, prod_id, quantity, item_price, quantity*item_price AS expanded_price FROMorderitems;

Query OK,0 rows affected (0.002sec)

MariaDB[crashcourse]>

更新视图

通常, 视图是可以更新的。更新一个视图将更新其基表。如果对视图增加或删除行, 实际上是对其基表增加或删除行。

但是, 并非所有的视图都是可更新的。基本上可以说, 如果MySQL不能正确地确定被更新的基数据, 则不允许更新。

这实际意味着, 如果视图定义中有以下操作, 则不能进行视图的更新

分组(使用GROUP BY和HAVING)

联结

子查询

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

DISTINCT

导出(计算)列

一般, 应该将视图用于检索(SELECT语句)而不是用于更新(INSERT, UPDATE和DELETE)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值