Atitit.code base view 视图的实现原理
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 视图的实现原理相关推荐
- Swoft View 视图
参考资料 swoft-view https://github.com/swoft-cloud/swoft-view Swoft提供PHP原生语法的视图渲染支持,并提供基础的布局以及内部引入文件等功能. ...
- Atitit. Async await 优缺点 异步编程的原理and实现 java c# php
Atitit. Async await 优缺点 异步编程的原理and实现 java c# php 1. async & await的来源1 2. 异步编程history1 2.1. 线程池 2 ...
- 【Android 逆向】IDA 工具使用 ( 同步指定的 IDA View 视图 | Hex View 数据格式 | 过滤设置 )
文章目录 一.同步指定的 IDA View 视图 二.Hex View 数据格式 三.过滤设置 一.同步指定的 IDA View 视图 IDA 中可以 同时打开多个 IDA View ( 下图红色矩形 ...
- 查看mysql view作用_Mysql中View视图的作用
浙江PHP博客分享关于Mysql中使用View视图的作用.很多小伙伴知道视图的作用,却不知道为什么要使用视图以及视图的一些好处是什么,下面浙江一点PHP将详细阐述关于视图的用法以及作用. 作用一: 提 ...
- {{view 视图层}}微信小程序
微信小程序 view 视图层//自学 1.数据绑定 数据绑定WXML中的动态数据均来自对应Page的data. 简单绑定数据绑定使用"Mustache"语法(双大括号)将变量包起来 ...
- atitit. hb 原生sql跨数据库解决原理 获得hb 数据库类型执行期获得Dialect
atitit. hb 原生sql跨数据库解决原理 获得hb 数据库类型执行期获得Dialect #-----原理 Hibernate 执行期获得Dialect 2010-07-28 12:59:58| ...
- 动态切换view视图viewflipper组件
2019独角兽企业重金招聘Python工程师标准>>> 个人理解viewflipper,他其实就是切换view视图很方便而已,在做广告的时候有利用的价值,它可以自己来进行图片的每隔多 ...
- Atitit.struts排除url 的设计and 原理 自定义filter 排除特定url
Atitit.struts排除url 的设计and 原理 自定义filter 排除特定url 1.1. 原理流程1 2. Invoke1 3. StrutsX2 1.1. 原理流程 读取struts配 ...
- IAR的View视图菜单中Watch、 Live Watch、 Quick Watch、 Auto、 Locals、 Statics这几个子菜单的含义和区别
一.简述IAR的View视图菜单 View这个菜单的意思就是打开(已关闭的)视图窗口,比如我们的工作空间窗口不见了,就可以通过该菜单打开. 不瞒大家,以前我初学软件的时候,常用的视图窗口不小心被我关闭 ...
- 数据库中的Schema(模式)和View(视图)
Schema(模式) 在mysql中,Schema和database即数据库的概念类似,利用建模式的语句 create schema name同样可以创建一个库 而在其他数据库中,例如oracle,S ...
最新文章
- 每天OnLineJudge 之 “杨辉三角 ”
- a - 数据结构实验之串一:kmp简单应用_串的两种模式匹配方式(BF/KMP算法)
- 家用笔记本电脑什么牌子好_家用什么牌子的吸尘器好?
- 梓益C语言学习笔记之指针
- javax.xml.bind.UnmarshalException: 意外的元素 (uri:, local:xml)。所需元素为(none)
- [js] 你有使用过pjax吗?它的原理是什么?
- 修改el-popover和el-select样式
- 2016 - 2- 2 非正式协议与正式协议
- 关于双网卡电脑无法加入域或失去与域的联系的方法
- JDK8新特性(七)之Stream流的count()、filter()、limit()、skip()方法
- juyter显示决策树图形_关于决策树可视化的treePlotter(学习笔记)
- 审计专业毕业论文有什么好写一点的论文选题吗?
- 笔记十三:python之类的继承实例(猜诗歌)
- matlab寻找频谱峰值,如何得到明显峰值的频谱图?
- ps保存psd后图层全没了_Photoshop文件不显示图层
- 电子计算机上total,计算器频幕上grand total 什么意思
- dropbox访问_使用PHP访问Dropbox
- 圆周率小数点后1千位(附计算圆周率源代码)
- 软件工程英文参考文献(优秀范文105个)
- Python Computer Vision Programming学习笔记(一)——Python以及各Package安装