当前位置: 首页 > news >正文

大莲网站建设公司金华农村网站建设

大莲网站建设公司,金华农村网站建设,电子商务网站需求分析,个人怎么交养老保险前言#xff1a;我个人认为#xff0c;有关MYSQL存储过程/函数在MYSQL中的实现比较粗糙#xff0c;可扩展性不够好#xff0c;其实现的耦合性太高#xff0c;所以主要讲一些它的原理方面的内容#xff0c;但有可能在某些方面理解不够好或者有些不正确的地方#xff0c;欢…前言我个人认为有关MYSQL存储过程/函数在MYSQL中的实现比较粗糙可扩展性不够好其实现的耦合性太高所以主要讲一些它的原理方面的内容但有可能在某些方面理解不够好或者有些不正确的地方欢迎指正谢谢2012-5-14 by whuai QQ:329570985 欢迎指正!在MYSQL中同样有很多类型的系统对象包括表、视图、存储过程、存储函数等但由于MYSQL的插件式存储引擎及其它实现方面的特点其每一种对象的缓存方式都不同或者说这些对象的缓存不是通过一种统一的方式来管理的每一种对象的缓存都是有自己的特点并且缓存的内容也有很大的差异下面再叙述一下存储过程(PLSQL)缓存方式。MYSQL数据库管理系统中的存储过程/函数也是有缓存机制的存储过程/函数实际上是用户通过创建存储过程的语句创建好的系统对象它具有指定的名字、类型(存储过程/函数)及要执行的语句序列等。例如下面就是一个创建过程的语句create procedure p()begin declare a int default 100;declare b int default 1000;declare d int default 1000;begindeclare c varchar(100) default hello world;insert into my values(a, c);end;end;上面创建的过程名字为p下面定义了一些变量并且都赋了初始值一对BEGIN及END标志了一个语句块的内容语句块可以嵌套定义比如上面就在第一对BEGIN及END之间又定义了一对BEGIN及END每一个语句块中又可以单独定义自己的变量同时这些变量又有自己的可见性范围假设在内层语句块中定义了一个变量在外层同时又定义了一个同名的变量那么在内层引用这个变量时实际上是内层定义的变量而这个变量在外层是不可见的可以引用到的只能是外层定义的变量。在实现上(基于源代码的分析)一个存储过程/函数分析后会得到一个sp_head结构体对象这个对象唯一对应一个存储过程而每一个语句块对应一个sp_pcontext结构对象这个对象之间存在着父子关系一个父亲可以有多个孩子一个孩子只能有一个父亲比如上面例子中的存储过程语句整体的存储过程P就对应一个sp_head结构体对象第一个BEGIN对应的语句块是父sp_pcontext而其中又包括了一个语句块这个语句块是父语句块的一个子语句块在分析之后同样会生成一个sp_pcontext对象它是一个子语句块对象sp_pcontext结构体内有一个成员m_parent它会指向父语句块实际上这个语句块可以被称为一个“上下文环境”因为它是可以被看作像C语言中的一个语句块比如用{}括起来的一段代码一样。在进行语法分析sp_compile时MYSQL会对每一条分析的语句都生成相应的指令这些指令都被顺序存储到类型为DYNAMIC_ARRAY的动态数组m_instr中这是用来存储所有的这个存储过程的指令的比如对于上面语句“declare b int default 1000;”系统首先会分配一个变量的存储空间变量被放在sp_pcontext对象中也是通过一个动态数组m_vars来存储的因为变量是语句块级的而上面这条语句还对应的一个操作就是给这个变量赋初始值所以系统要创建一个指令给这个变量设置初值这个指令为sp_instr_set每一个指令都需要实现一个执行函数exec_core这个函数是一个虚函数每一种指令的执行都要实现自己的执行函数就比如上面这个设置变量的指令它的实现是调用了函数set_variable来给指定的变量设置指定的初始值即可。对于不同的操作有不同的指令MYSQL包括的指令有sp_instr_stmt(执行SQL语句的指令)、sp_instr_set(设置变量的指令)、sp_instr_set_trigger_field(设置触发器中涉及到NEW/OLD变量的值的指令)、sp_instr_jump、sp_instr_jump_if_not(执行跳转指令)、sp_instr_freturn(函数返回指令)、sp_instr_cpush(游标声明指令)、sp_instr_copen(打开游标的指令)、sp_instr_cclose(关闭游标的指令)、sp_instr_cfetch(从游标取数据的指令)等在PLSQL中涉及到这些操作后都会创建相应的指令并加入到sp_head的指令动态数组中执行时会通过顺序或者跳转的方式执行。在PLSQL中本人最感兴趣的是变量的引用包括本地变量及上层语句块的变量的引用系统是如何正确的找到相应的变量的或者是通过什么方式来找到的其实sp_head中的每一个变量都对应一个编号是按照分析顺序生成的。变量是在sp_pcontext中定义的也就是说变量的存储单元是语句块(sp_pcontext)一个语句块中可以有多个变量。同时在每一个语句块结构体sp_pcontext中都有一个表示这个语句块中所定义的变量的编号的范围一个起始ID及变量个数因为sp_pcontext是按照父子关系来联系的那么一个语句块的开始变量ID号是其前面平行的语句块的开始ID号加1的值如果它本身就是第一个语句块则其起始语句块的变量ID号为其父语句块的结束ID号加1的值。所以这样就给每一个语句块指定了唯一的互不包含的变量ID号的范围。那么要引用一个变量时找到其在符号表中的对象是很容易的因为对每一个指令而言都有一个指针指向其所属的sp_pcontext同时每一个引用变量操作对应的指令都记录了这个变量的ID号这样系统可以直接根据sp_pcontext中的超始ID号及变量的个数计算出当前这个被引用的变量对应的ID号是否在当前语句块sp_pcontext中如果是则直接从sp_pcontext的变量动态数组m_vars中找到对应ID的变量对象如果没有找到则说明这个变量有可能是在父语句块中定义的则通过sp_pcontext中的m_parent找到其父语句块用同样的方法找对应的变量如果找到则已找不到继续向上依此类推直到找到在某一个语句块中的这个变量或者m_parent为空的时候则说明没有找到则说明这个引用是一个对未定义的变量的引用直接报错即可。那么通过上面的方法只要找到这个变量对象则对其访问或者给它赋值都可以直接访问其成员函数即可。由于PLSQL的数据类型及支持语句比较多这里只介绍一些比较重要的原理从上面所叙述的内容可以对PLSQL的分析、指令的生成及运行原理有一个大概的轮廓从总的结构来讲存储过程/函数生成的计划就是一个sp_head对象sp_head中包含了所有生成的指令在运行过程中按照指令顺序或者内部逻辑的跳转来执行。另外生成一个语句块的树形结构每一个树节点为sp_pcontext结构对象其中m_parent指向其父节点同时每一个sp_pcontext还存储了所有的子语句块链表PLSQL中定义的变量都存储在sp_pcontext中。本文还要讲另外一个内容就是存储过程/函数对象的缓存机制其实在MYSQL中缓存的并不是存储过程/函数的字典定义的对象也就是说不是像之前讲的表对象的字典缓存而是将整个分析好的sp_head对象缓存起来了。那么说白了MYSQL的存储过程/函数字典的缓存其实是其执行计划的缓存。只要执行过一次那么只要没有将这个存储过程/函数删除再次执行时只需要从缓存空间中找到这个计划拿出来直接执行即可这样就提高了存储过程/函数的执行效率不需要再进行词法、语法、语义、指令的生成等这些步骤了。总结在MYSQL中的存储过程/函数的分析过程将上面提到的所有步骤都揉合到了一起也就是说词法分析、语法分析、语义分析、指令的生成这些步骤的分析过程没有一个阶段性的区分没有明显的区分各个阶段的工作而是将所有这些步骤都一起完成每分析一条语句词法、语法做完之后直接分析这条语句中的语义、判断定义的变量是否存在、确定变量在语句块中的位置合法之后直接创建变量的空间同时还要分配一个指令为这个变量设置初始值等操作所有这些直接在语法文件中完成了在实现上难免非常混乱。
http://www.pierceye.com/news/550585/

相关文章:

  • 网站建设基本目标如何建设 linux 网站
  • 电子商务网站开发 php汕头 网站建设
  • 郑州做网站的论坛山西利用模板建站
  • 网站引流.定期报告系统下载官网
  • 北京网站排名珠海 网页设计
  • 长春火车站防疫政策wordpress调用图片代码
  • 建设论坛网站自学江苏中小企业网站建设
  • 东莞网站建设效果好网站建设制作设计
  • 成华区建设局门户网站wordpress.fr
  • 河北制作网站模板建站公司网站开发流程的认识
  • 天津网站建设有哪些做网站的公司为什么人少了
  • 提供中山精品网站建设建俄语网站哪个公司最好
  • 建设银联官方网站怎样在网站做宣传
  • 网站开发支付宝二维码支付建设网站装配式建筑楼房
  • 湖北系统建站怎么用做网站买一个域名就够了吗
  • 如何做问卷调查网站济南网络公司
  • 纯js做网站Wordpress税
  • 建云科技网站首页阿里云 wordpress 安装
  • 浙江省建设工程协会网站动漫网站的设计与实现
  • wordpress能导出网站吗企业内部网站开发
  • 景观石网站建设方案一 网站开发背景
  • 开发app的平台外贸seo建站
  • 网站界面设计实训报告深圳设计公司办公室
  • 京东网站的公司地址别人网站建设多少钱
  • 如何加快网站打开速度wordpress注册怎样通过邮箱验证码
  • 有关图书网站建设策划书电脑公司网站系统源码
  • 西班牙网站后缀360收录提交入口网址
  • 济宁网站建设工程教育网官网学员登录
  • html5导航网站源码下载wordpress 调用 discuz
  • 住房和城乡建设部网站 投诉有哪些网站可以学做糕点的