标签:tac count 部分 语句 测试 添加 构造 col 组成
mysql5版本增加了对视图的支持, 所以本文章仅适用mysql5以后的版本
视图是一张虚拟的表,其内容由查询定义,它们包含的不是数据而是根据需要检索数据的查询。视图提供了一种MySQL的SELECT语句层次的封装,可用来简化数据处理以及重新格式化基础数据或保护基础数据。
视图本身不包含数据,所以通过视图返回的数据是从其他的表检索来的
SELECT cust_name, cust_contact FROM customers, orders, orderitems
WHERE customers.cust_id = orders.cust_id AND orderitems.order_num = orders.order_num AND prod_id=‘TNT2‘;
创建视图order
create view other as SELECT cust_name, cust_contact FROM customers, orders, orderitems WHERE customers.cust_id = orders.cust_id AND orderitems.order_num = orders.order_num;
创建好后就可以这样取值了
SELECT cust_name, cust_contact FROM order WHERE prod_id=‘TNT2‘;
在视图创建之后,可以用于基本表相同的方式操作视图,如select操作,过滤和排序,将视图连接到其他的视图或表,甚至能添加和更新数据(添加更新数据存在着一些限制,用的很少)。
性能问题:由于视图补办含数据,所以每次查询都必须处理查询执行时所需的任一索引。如果使用多个连接和过滤创建了复杂的属兔或者嵌套的视图,可能会发现性能下降的很厉害,隐藏,再部署使用大量视图前要先测试。
SELECT cust_name, cust_contact FROM order WHERE prod_id=‘TNT2‘;
DROP VIEW viewname
简化复杂连接:如上示例,使用视图时,将指定的where子句添加到视图中已有的where中
重新格式化数据
输入:
SELECT Concat(RTrim(vend_name), ‘(‘ , RTrim(vend_country) , ‘)‘ ) AS vend_title FROM vendors ORDER BY vend_name;
输出:
+----------------------------+ | vend_title | +----------------------------+ | ACME(USA) | | AnvilsRUs(USA) | | FurballInc.(USA) | | JetSet(England) | | JouetsEtOurs(France) | | LTSupplies(USA) | +----------------------------+
创建视图
CREATE VIEW vendorlocations AS SELECT Concat(RTrim(vend_name), ‘(‘ , RTrim(vend_country) , ‘)‘ ) AS vend_title FROM vendors ORDER BY vend_name;
创建视图后查询语句直接 select * 即可
使用视图过滤掉不想要的数据
使用视图计算字段
视图能否更新,要视情况而定
通常视图是可以更新的(即,可以对他们使用,insert、update、delete)。更新一个视图将更新其基表,对视图的操作实际上都是对基表的操作。
如果视图不能确定被更新的基数据,则不能被更新,如下的操作则不能更新:
本文中的大部分示例都是不能更新的, 因为视图主要用于数据检索
标签:tac count 部分 语句 测试 添加 构造 col 组成
原文地址:https://www.cnblogs.com/musl/p/13178972.html