MYSQL中视图的使用

一、什么是视图

执行一条SQL,将结果集保存在一张虚拟表中mysql

二、为何要使用视图

  1. 重复利用SQL语句
  2. 简化SQL查询,快速取数据
  3. 只用知道表的部分结构
  4. 保护数据,根据特定受权
  5. 更改数据格式和表示,视图可返回与底层表的表示和格式不一样的数据。

注意事项
• 在视图建立后,能够用与表基本相同的方式使用(查询、过滤、排序数据、与其余视图或连结、(添加、更新))
• 视图只是用来查看存储在别处的数据的设施,自己不包含数据,返回的数据也是从其余表检索出来的。
• 由于视图自己不包含数据,索引多个表连结或嵌套可能存在性能问题,需测试sql

三、规则和限制

  1. 表名必须惟一(与其余视图和表)
  2. 建立视图没有限制
  3. 足够权限
  4. 视图能够嵌套,能够从其余视图查询来构造一个视图
  5. 若是视图和从视图中查询都有order by,视图中的order by将被覆盖
  6. 视图不能索引
  7. 视图能够和表一块儿使用

四、使用视图

  1. 建立视图 create view
  2. 查看建立视图的语句。Show create view viewname
  3. 删除视图 drop view viewname
  4. 更新视图,1⃣️ 先drop后create 2⃣️ 直接用create or replace view
  5. 利用视图简化复杂的联结查询

五、利用视图简化复杂的联结查询

建立视图函数

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 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;

能够直接经过视图查询得出结果code

SELECT * FROM vendorlocations;排序

七、用视图过滤不想要的数据

create view custmeremaillist AS
SELECT cust_id ,cust_name,cust_email
from customers
where cust_email is not NULL;

直接使用视图索引

SELECT * from custmeremaillist ;

八、使用视图与计算字段

mysql查询rem

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

建立视图it

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

使用视图

SELECT
    *
FROM
    orderitemsexpanded
WHERE order_num=20005;

九、更新视图

一般,视图是能够更新的(insert、update、delete)。更新视图将更新基表。若是视图中有如下定义将不能被更新。

1. 分组(group by 和 having)
2. 联结
3. 自查询
4. 并
5. 聚合函数(min()、count()、sum()等)
6. Distinct
7. 导出(计算)列

因此视图最好直接使用select查询

以上内容均引自《mysql必知必会》
相关文章
相关标签/搜索