Atitit.code base view 视图的实现原理
来源:互联网 发布:网络搜索优化方案 编辑:程序博客网 时间:2024/05/19 02:23
Atitit.code base view 视图的实现原理
1. 视图的执行算法:1
2. 不可更新的视图:1
3. 关于视图的可插入性:insert2
4. 视图定义3
5. 调用3
1. 视图的执行算法:
存在两种执行算法:
1、 Merge:合并的执行方式,每当执行的时候,先将我们视图的sql语句与外部查询视图的sql语句,混合在一起,最终执行;
2、 Temptable:临时表模式,每当查询的时候,将视图所使用的select语句生成一个结果的临时表,再在当前的临时表内进行查询。
指的是一个视图是在什么时候执行,依据哪些方式执行;
对于MERGE,会将引用视图的语句的文本与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分。
对于TEMPTABLE,视图的结果将被置于临时表中,然后使用它执行语句。
对于UNDEFINED,MySQL将选择所要使用的算法。如果可能,它倾向于MERGE而不是TEMPTABLE,这是因为MERGE通常更有效,而且如果使用了临时表,视图是不可更新
当用户创建视图时,mysql默认使用一种undefine的处理算法,就是会自动在合并和临时表内进行选择。
作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
2. 不可更新的视图:
某些视图是可更新的。也就是说,可以在诸如UPDATE、DELETE或INSERT等语句中使用它们,以更新基表的内容。对于可更新的视图,在视图中的行和基表中的行之间必须具有一对一的关系。还有一些特定的其他结构,这类结构会使得视图不可更新。更具体地讲,如果视图包含下述结构中的任何一种,那么它就是不可更新的:
· 聚合函数(SUM(), MIN(), MAX(), COUNT()等)。
· DISTINCT
· GROUP BY
· HAVING
· UNION或UNION ALL
· 位于选择列表中的子查询
· Join
· FROM子句中的不可更新视图
· WHERE子句中的子查询,引用FROM子句中的表。
· 仅引用文字值(在该情况下,没有要更新的基本表)。
· ALGORITHM = TEMPTABLE(使用临时表总会使视图成为不可更新的)。
3. 关于视图的可插入性:insert
如果视图满足关于视图列的下述额外要求,可更新的视图也是可插入的:
· 不得有重复的视图列名称。
· 视图必须包含没有默认值的基表中的所有列。
· 视图列必须是简单的列引用而不是导出列。导出列不是简单的列引用,而是从表达式导出的。下面给出了一些导出列示例:
· 3.14159
· col1 + 3
· UPPER(col2)
· col3 / col4
· (subquery)
混合了简单列引用和导出列的视图是不可插入的,但是,如果仅更新非导出列,视图是可更新的。
4. 视图定义
wxb_order
#left join tabxxx on order_id=order_id
wxb_order_count,order_id=order_id
5. 调用
public List<String> insertSql(Map m) {
List<String> li = Lists.newArrayList();
if (m.get("$tabletype") != null && m.get("$tabletype").equals("view")) {
String[] tabs = new View(m.get("$table"), m.get("$view_store_path"))
.getTables();
for (String tab : tabs) {
Map m2 = MapX.clone(m);
m2.put("$table", tab);
String s = get_insert_singleTable_sql(m2);
li.add(s);
}
return li;
}
return li;
}
package com.attilax.orm;
import java.util.Map;
import com.attilax.io.filex;
import com.attilax.io.pathx;
import com.attilax.sql.SqlJoinAst;
import com.attilax.sql.SqlJoinParser;
public class View {
private Object obj;
private Object viewStorePath;
public View(String viewName) {
// TODO Auto-generated constructor stub
}
public View(Object objectName) {
this.obj = objectName;
}
public View(Object objectName, Object viewStorePath) {
this.obj = objectName;
this.viewStorePath = viewStorePath;
}
public String[] getTables() {
String f = pathx.classPath() + "/" + this.viewStorePath + "/"
+ obj.toString() + ".txt";
// String t=filex.read(f);
SqlJoinAst ast = new SqlJoinParser().parse(f);
String tabs = ast.table;
for (Map join_tab : ast.joinTables) {
tabs = tabs + "," + join_tab.get("joinTable");
}
return tabs.split(",");
}
}
- Atitit.code base view 视图的实现原理
- Atitit。Time base gc 垃圾 资源 收集的原理与设计
- Atitit 异常的实现原理 与用户业务异常
- Atitit 面向对象 封装的实现原理
- Atitit.编程语言原理---方法重载的实现与设计 调用方法的原理
- Atitit 自然语言处理原理与实现 attilax总结
- Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构
- Atitit.linq java的原理与实现 解释器模式
- Atitit Gaussian Blur 高斯模糊 的原理and实现and 用途
- Atitit.木马病毒的免杀原理---sikuli 的使用
- atitit.md5算法的原理 与 总结
- Atitit.病毒木马程序的感染 传播扩散 原理
- Atitit.木马病毒 webftp 的原理跟个设计
- Atitit.执行cli cmd的原理与调试
- Atitit.数据库存储引擎的原理与attilax 总结
- Atitit.创建快捷方式 windows快捷方式的原理
- Atitit. Async await 优缺点 异步编程的原理and实现 java c# php
- Atitit.upnp SSDP 查找nas的原理与实现java php c#.net c++
- 支持向量机 SVM 机器学习基础(6)
- css+div网页布局大全
- 最详细的Android Studio百度地图(BaiduMap)开发教程,可以用作官方文档的教程!
- 使用Python的SnowNLP模块实现情感分析
- 主成分分析法
- Atitit.code base view 视图的实现原理
- win10java环境配置
- Hanoi Tower Troubles Again! (找规律)
- LightOJ 1089 Points in Segments (II) 离散化 标记
- 263. Ugly Number
- BlueTooth: 蓝牙协议栈实现模式分析
- Struts2入门~工作原理及访问Servlet API
- Knots (组合数学)
- HDU 3078Network (LCA)