第一节 使用视图

摘抄:MySQL必知必会

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

为什么使用视图?

  1. 重用SQL语句
  2. 简化复杂的SQL查询,编写后可以重用,不必知道内部细节;
  3. 使用表的组成部分而不是整个表;
  4. 保护数据,可以给用户授予表的特定部分的访问权限而不是整个表的访问权限;
  5. 更改数据格式和表示,视图可以返回与底层表的表示和格式不同的数据。
  • 视图创建之后,可以用与表相同的方式操作它,执行insert、select、排序等操作;
  • 如果添加或者改变基础表的数据,视图会返回已经改变后的数据,视图本身并不存储数据,仅仅是用来查看基础表的一种措施。
  • 每次使用视图,都必须处理查询执行时所需要的任一个检索。如果使用了多个联结和过滤创建了复杂的视图或者嵌套视图,性能可能会下降得厉害。

视图的规则和限制

  1. 视图必须唯一命名;
  2. 创建视图没有数量限制;
  3. 创建视图,必须有足够的权限;
  4. 视图可以嵌套;
  5. 视图可以使用Order by,如果从该视图中检索数据SELECT语句中使用了ORDER BY ,那么原视图中的ORDER BY 将被覆盖;
  6. 视图不能索引,也不能有关联的触发器和默认值;
  7. 视图可以和表一起使用。

使用视图

  1. CREATE VIEW
  2. SHOW CREATE VIEW viewname;可以查看创建视图的语句;
  3. DROP VIEW viewname; 可以删除视图
  4. CREATE OR REPLACE VIEW 更新视图,或者先DROP再CREATE

利用视图简化复杂的联结

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 cust_name, cust_contact
FROM productcustomers
WHERE prod_id = 'TNT2';

使用视图重新格式化数据

SELECT Concat(RTrim(vend_name), '(', RTrim(vend_country), ')') AS vend_title
FROM verdors
ORDER BY vend_name;

如果经常用这个格式的结果,不需要每次执行联结,创建一个视图,每次需要的时候使用它即可;

CREATE VIEW vendorlocations AS
SELECT Concat(RTrim(vend_name), '(', RTrim(vend_country), ')') AS vend_title
FROM verdors
ORDER BY vend_name;

用视图过滤不想要的数据

CREATE VIEW customeremaillist AS
SELECT cust_id, cust_name, cust_email
FROM customers
WHERE cust_email IS NOT NULL;

使用视图与计算字段

SELECT prod_id, quantity, item_price,
       quantity*item_price AS expanded_price
FROM orderitems
WHERE order_num = 20005;

更新视图

通常视图是可以更新的,(可以使用insert、update、delete)。更新视图将改变基表。

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

  • 分组 group by 和 having
  • 联结;
  • 子查询;
  • 并;
  • 聚集函数;
  • DISTINCT;
  • 导出(计算)列

一般地,视图主要用于数据检索,而不用于更新。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值