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 视图的实现原理相关推荐

  1. Swoft View 视图

    参考资料 swoft-view https://github.com/swoft-cloud/swoft-view Swoft提供PHP原生语法的视图渲染支持,并提供基础的布局以及内部引入文件等功能. ...

  2. Atitit. Async await 优缺点 异步编程的原理and实现 java c# php

    Atitit. Async await 优缺点 异步编程的原理and实现 java c# php 1. async & await的来源1 2. 异步编程history1 2.1. 线程池 2 ...

  3. 【Android 逆向】IDA 工具使用 ( 同步指定的 IDA View 视图 | Hex View 数据格式 | 过滤设置 )

    文章目录 一.同步指定的 IDA View 视图 二.Hex View 数据格式 三.过滤设置 一.同步指定的 IDA View 视图 IDA 中可以 同时打开多个 IDA View ( 下图红色矩形 ...

  4. 查看mysql view作用_Mysql中View视图的作用

    浙江PHP博客分享关于Mysql中使用View视图的作用.很多小伙伴知道视图的作用,却不知道为什么要使用视图以及视图的一些好处是什么,下面浙江一点PHP将详细阐述关于视图的用法以及作用. 作用一: 提 ...

  5. {{view 视图层}}微信小程序

    微信小程序 view 视图层//自学 1.数据绑定 数据绑定WXML中的动态数据均来自对应Page的data. 简单绑定数据绑定使用"Mustache"语法(双大括号)将变量包起来 ...

  6. atitit. hb 原生sql跨数据库解决原理 获得hb 数据库类型执行期获得Dialect

    atitit. hb 原生sql跨数据库解决原理 获得hb 数据库类型执行期获得Dialect #-----原理 Hibernate 执行期获得Dialect 2010-07-28 12:59:58| ...

  7. 动态切换view视图viewflipper组件

    2019独角兽企业重金招聘Python工程师标准>>> 个人理解viewflipper,他其实就是切换view视图很方便而已,在做广告的时候有利用的价值,它可以自己来进行图片的每隔多 ...

  8. Atitit.struts排除url 的设计and 原理 自定义filter 排除特定url

    Atitit.struts排除url 的设计and 原理 自定义filter 排除特定url 1.1. 原理流程1 2. Invoke1 3. StrutsX2 1.1. 原理流程 读取struts配 ...

  9. IAR的View视图菜单中Watch、 Live Watch、 Quick Watch、 Auto、 Locals、 Statics这几个子菜单的含义和区别

    一.简述IAR的View视图菜单 View这个菜单的意思就是打开(已关闭的)视图窗口,比如我们的工作空间窗口不见了,就可以通过该菜单打开. 不瞒大家,以前我初学软件的时候,常用的视图窗口不小心被我关闭 ...

  10. 数据库中的Schema(模式)和View(视图)

    Schema(模式) 在mysql中,Schema和database即数据库的概念类似,利用建模式的语句 create schema name同样可以创建一个库 而在其他数据库中,例如oracle,S ...

最新文章

  1. 每天OnLineJudge 之 “杨辉三角 ”
  2. a - 数据结构实验之串一:kmp简单应用_串的两种模式匹配方式(BF/KMP算法)
  3. 家用笔记本电脑什么牌子好_家用什么牌子的吸尘器好?
  4. 梓益C语言学习笔记之指针
  5. javax.xml.bind.UnmarshalException: 意外的元素 (uri:, local:xml)。所需元素为(none)
  6. [js] 你有使用过pjax吗?它的原理是什么?
  7. 修改el-popover和el-select样式
  8. 2016 - 2- 2 非正式协议与正式协议
  9. 关于双网卡电脑无法加入域或失去与域的联系的方法
  10. JDK8新特性(七)之Stream流的count()、filter()、limit()、skip()方法
  11. juyter显示决策树图形_关于决策树可视化的treePlotter(学习笔记)
  12. 审计专业毕业论文有什么好写一点的论文选题吗?
  13. 笔记十三:python之类的继承实例(猜诗歌)
  14. matlab寻找频谱峰值,如何得到明显峰值的频谱图?
  15. ps保存psd后图层全没了_Photoshop文件不显示图层
  16. 电子计算机上total,计算器频幕上grand total 什么意思
  17. dropbox访问_使用PHP访问Dropbox
  18. 圆周率小数点后1千位(附计算圆周率源代码)
  19. 软件工程英文参考文献(优秀范文105个)
  20. Python Computer Vision Programming学习笔记(一)——Python以及各Package安装

热门文章

  1. php redis 是什么意思,redis协议是什么意思
  2. Linux之RedHat7如何更换yum源
  3. COOKIE和SESSION之间的区别以及用法
  4. MySQL数据库使某个不是主键的字段唯一
  5. 【Unity】6.2 在VS2015中调试 C# 脚本
  6. PHP使用MySQL数据库
  7. 从nginx访问日志中的400错误说起
  8. 在 Java 应用程序中定时执行任务
  9. 负载均衡技术沙龙2期圆满结束(现场图文、PPT)
  10. python: 列表的方法