首页 / MYSQL / MySQL——创建视图(3)
MySQL——创建视图(3)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL——创建视图(3),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3212字,纯文字阅读大概需要5分钟。
内容图文
要在MySQL中创建一个新视图,可以使用CREATE VIEW
语句。 在MySQL中创建视图的语法如下:
CREATE [ALGORITHM = {MERGE | TEMPTABLE | UNDEFINED}] VIEW [database_name].[view_name] AS [SELECT statement]
1、查看处理算法
算法属性允许您控制MySQL在创建视图时使用的机制,MySQL提供了三种算法:MERGE
,TEMPTABLE
?
和 UNDEFINED
。
-
使用
MERGE
算法,MySQL首先将输入查询与定义视图的SELECT语句组合成单个查询。 然后MySQL执行组合查询返回结果集。 如果SELECT语句包含集合函数(如MIN,MAX,SUM,COUNT,AVG等)或DISTINCT,GROUP BY,HAVING,LIMIT,UNION,UNION ALL,子查询,则不允许使用MERGE
算法。 如果SELECT语句无引用表,则也不允许使用MERGE
算法。 如果不允许MERGE
算法,MySQL将算法更改为UNDEFINED
。请注意,将视图定义中的输入查询和查询组合成一个查询称为视图分辨率。
- 使用
TEMPTABLE
算法,MySQL首先根据定义视图的SELECT
语句创建一个临时表,然后针对该临时表执行输入查询。因为MySQL必须创建临时表来存储结果集并将数据从基表移动到临时表,所以TEMPTABLE
算法的效率比MERGE
算法效率低。 另外,使用TEMPTABLE
算法的视图是不可更新的。
-
当您创建视图而不指定显式算法时,
UNDEFINED
是默认算法。UNDEFINED
算法使MySQL可以选择使用MERGE
或TEMPTABLE
算法。MySQL优先使用MERGE
算法进行TEMPTABLE
算法,因为MERGE
算法效率更高。
2、查看名称
在数据库中,视图和表共享相同的命名空间,因此视图和表不能具有相同的名称。 另外,视图的名称必须遵循表的命名规则。
SELECT语句
在SELECT
语句中,可以从数据库中存在的任何表或视图查询数据。SELECT
语句必须遵循以下几个规则:
SELECT
语句可以在WHERE子句中包含子查询,但FROM
子句中的不能包含子查询。SELECT
语句不能引用任何变量,包括局部变量,用户变量和会话变量。SELECT
语句不能引用准备语句的参数。
请注意,
SELECT
语句不需要引用任何表。
3、创建MySQL视图示例
创建简单的视图
我们来看看orderDetails
表。基于orderDetails
表来创建一个表示每个订单的总销售额的视图。
CREATE VIEW SalePerOrder AS SELECT orderNumber, SUM(quantityOrdered * priceEach) total FROM orderDetails GROUP by orderNumber ORDER BY total DESC;
要知道哪个对象是视图或表,请使用SHOW FULL TABLES
命令,如下所示:
mysql> SHOW FULL TABLES; +--------------------+------------+ | Tables_in_yiibaidb | Table_type | +--------------------+------------+ | article_tags | BASE TABLE | | contacts | BASE TABLE | | customers | BASE TABLE | | departments | BASE TABLE | | employees | BASE TABLE | | offices | BASE TABLE | | offices_bk | BASE TABLE | | offices_usa | BASE TABLE | | orderdetails | BASE TABLE | | orders | BASE TABLE | | payments | BASE TABLE | | productlines | BASE TABLE | | products | BASE TABLE | | saleperorder | VIEW | +--------------------+------------+结果集中的
table_type
列指定哪个对象是视图,哪个对象是一个表(基表)。如上所示,saleperorder
对应table_type
列的值为:VIEW
使用连接表创建视图
以下是使用INNER JOIN创建视图的示例。 该视图包含客户编号和客户支付的总金额。
CREATE VIEW customerOrders AS SELECT c.customerNumber, p.amount FROM customers c INNER JOIN payments p ON p.customerNumber = c.customerNumber GROUP BY c.customerNumber ORDER BY p.amount DESC;
使用子查询创建视图
以下说明如何使用子查询创建视图,该视图包含价格高于所有产品的平均价格的产品。CREATE VIEW aboveAvgProducts AS SELECT productCode, productName, buyPrice FROM products WHERE buyPrice > (SELECT AVG(buyPrice) FROM products) ORDER BY buyPrice DESC;
内容总结
以上是互联网集市为您收集整理的MySQL——创建视图(3)全部内容,希望文章能够帮你解决MySQL——创建视图(3)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。