现在越来越多人用plsql 查询和执行sql,因为该工具很方便,不仅可以执行sql、以及命令窗口,但是呢,有时候我们执行完sql,可能忘记保存或者当时觉得可能不怎么重要,就没有保存, 等到了第二天或者过段时间...,想看看之前执行的sql,这时候怎么办呢?...首先打开sql窗口,如图所示 ? 然后,按住 CTRL+E,就会显示之前执行过的sql语句啦 ?...但是显示的好像只有最近200条的,,所以大家在执行sql 的时候,最好还是每天可以备份一下自己执行过的sql语句,毕竟好记性不如烂笔头
本文的主要围绕着下面这些问题展开的,在阅读之前可以先思考一下问题的答案是什么MySQL的体系组成结构是什么样的?MySQL中的SQL执行流程是什么样的?如何分析一条SQL的执行时间?...SQL执行流程SQL语句→缓存查询→解析器→优化器→执行器。查询缓存:Server如果在查询缓存中发现了这条SQL语句,就会直接将结果返回给客户端;如果没有,就进入到解析器阶段。...MySQL8.0之后删除了查询缓存解析器:在解析器中对SQL语句进行语法分析、语义分析。优化器:在优化器中会确定SQL语句的执行路径,比如是根据全表检索,还是根据索引来检索等。...执行器:在执行之前需要判断该用户是否具备权限,如果具备权限就执行SQL查询并返回结果。在MySQL8.0以下的版本,如果设置了查询缓存,这时会将查询结果进行缓存。...如何分析一条SQL的执行时间1、查看profiling是否开启sql 代码解读复制代码mysql> select @@profiling;2、profiling=0代表关闭,我们需要把profiling
这几天在厦门讲课,每天6小时,没有太多时间写新代码,宾馆不知道咋想的也不提供WiFi,只好用手机做个热点临时分享一点基础知识,300M的包月流量伤不起,热点瞬间就把仅剩的40M流量用完了,赶紧发完关闭热点...在Python中,有while和for两种循环,并且都可以带有else子句。...其中while循环常用于无法提前确定循环次数的场合,当然也可以用于循环可以提前确定的场合;for循环常用于可以提前确定循环次数的场合,尤其适合用来迭代或遍历可迭代对象中的元素,这也是for循环的本质。...对于带有else子句的循环,如果是因为循环条件不成立或序列中的元素已迭代结束而使得循环自然结束,则继续执行else子句中的代码;而如果是因为执行了break语句使得循环提前结束,则不再执行else子句中的代码...下面的代码用来输出小于100的最大素数: ? 下面的代码用来输出小于100的所有素数: ?
SQL(结构化查询语言)语句的执行过程在数据库管理系统中是一个复杂但有序的过程。...以下是SQL语句(特别是查询语句)在关系型数据库管理系统(RDBMS)中的典型执行过程: 解析(Parsing): 当SQL语句被提交给数据库时,它首先被解析器(Parser)接收。...执行(Execution): 数据库引擎(Database Engine)按照执行计划中的步骤执行查询。 这可能涉及从磁盘读取数据、在内存中操作数据、写入结果等。...日志记录(Logging): 数据库系统可能会记录查询的执行过程、结果和其他相关信息,以便进行审计、故障排查或性能分析。...此外,对于复杂的查询或大型的数据集,执行过程可能会涉及更多的步骤和复杂性。
前言 今天的分析的核心是SQL的执行过程。...主要分为如下章节进行分析 代理类的生成 SQL的执行过程 处理查询结果 mapper 接口的代理类的生成过程分析 首先我们来看看mapper 接口的代理类的生成过程,如下是一个MyBatis查询的调用实例...分析完了MapperProxy的生成过程,接下来我们来分析下SQL的执行过程。 SQL的执行过程 SQL 的执行过程是从MapperProxy的invoke方法开始。...首先,此方法首先调用doQuery方法执行查询,然后将查询的结果放入缓存中。 接着我们再来看看SimpleExcutor中的doQuery方法。...总结 本文通过两个时序图,为主线来展开分析了Mapper接口代理类的生成过程,以及SQL的执行过程。希望对大家有所帮助。 ?
本篇文章将以MapperMethod的execute() 方法作为起点,对MyBatis中的一次实际执行请求进行说明,并结合源码对执行器Executor的原理进行阐释。...() 方法大部分逻辑是在为MyBatis中的一级缓存服务,这里暂时不分析,除开缓存的逻辑,上述query() 方法做的事情可以概括为:先从缓存中获取查询结果;获取到则返回缓存中的查询结果;否则直接查询数据库...MyBatis中的一次实际执行,会由所执行方法对应的MapperMethod的execute() 方法完成。...MapperMethod在这其中的作用就是MapperMethod关联着本次执行方法所对应的SQL语句以及入参和出参等信息。...,创建StatementHandler的过程中还会一并将处理参数和处理结果的ParameterHandler和ResultSetHandler创建出来,创建好StatementHandler之后,会基于
写在前面的话:有时不理解SQL语句各个部分执行顺序,导致理解上出现偏差,或者是书写SQL语句时随心所欲,所以有必要了解一下sql语句的执行顺序。可以有时间自己写一个简单的数据库,理解会更加深入。...没错,对于这样的简单的语句,一眼就能看出来,可是对于稍微复杂一些的SQL语句或者更加复杂的SQL语句,有时我们一眼就看不出来了,为了能够正确分析SQL语句以及写出正确的SQL语句,有必要了解一下SQL语句各部分的执行顺序...(6)COUNT:执行聚合函数,选出对应Table1.id的行数,生成的结果给虚拟表VT5 (7)having:选择VT5中Table1.id的所有结果,给虚拟表VT6 (8)select:选择VT6...中相应的列,给虚拟表VT7 (9)distinct:将VT7中重复的行去除,生成VT8 (10)order by:将VT8的结果按照Table1.id进行排序,这里没有生成一个新的表VT9,而是生成游标...(11)top:从游标VC9的开始处选择指定的行数,这里是1行,生成虚拟表VT10. 经过上面的过程,最终的SQL语句将VT10返回给用户使用。
数据库编程 keywords: OLEDB, 数据库编程, VC++, 数据库,执行SQL, 获取结果集 --- 上次说到命令对象是用来执行SQL语句的。...数据源在执行完SQL语句后会返回一个结果集对象,将SQL执行的结果返回到结果集对象中,应用程序在执行完SQL语句后,解析结果集对象中的结果,得到具体的结果,这次的主要内容是如何解析结果集对象并获取其中的值...如何执行SQL语句 执行SQL语句一般的步骤如下: 创建ICommandText接口....这些属性必须在执行SQL语句得到结果集的操作之前定义好。因为在获得数据源返回的结果集的时候数据源已经设置了对应的属性。...最终行数据就被放置到了指定的缓冲中。循环调用GetNextRow和GetData即可遍历整个二维结果集。
前言: 很多人都在使用mysql数据库,但是很少有人能够说出来整个sql语句的执行过程是怎样的,如果不了解执行过程的话,就很难进行sql语句的优化处理,也很难设计出来优良的数据库表结构。...这篇文章主要是讲解一下sql语句的执行过程。 sql语句的执行过程: 客户端、连接器、分析器、优化器、执行器、存储引擎几个阶段。 连接器的作用:管理链接、权限验证的处理。...查询缓存: 连接建立完毕之后,进行查询缓存的处理,执行sql语句会先到缓存中看看是不是刚刚执行了这条语句,之前执行过的语句及其结果就会以key-value对的形式直接存储在内存中的,key是查询的语句,...如果语句不在查询缓存中的话,就会继续后面的执行阶段,执行完成后,执行结果会被存入查询缓存中。如果可以查询到缓存的话,就不会进行后面的复杂操作了,效率会高很多。...: 第一种执行的结果是处理t1.c=10是否走索引,然后可以先判断 一下逻辑的结果是否一样,如果执行的结果是一样的话,可以任意选择一种方案进行处理。
* 本文速览 本篇文章较为详细的介绍了 MyBatis 执行 SQL 的过程。该过程本身比较复杂,牵涉到的技术点比较多。...本篇文章我将分析MyBatis 执行 SQL 的过程,该过程比较复杂,涉及的技术点很多。...在代理逻辑中可根据方法名及方法归属接口获取到当前方法对应的 SQL 以及其他一些信息,拿到这些信息即可进行数据库操作。 上面是一个简版的 SQL 执行过程,省略了很多细节。...当运行时参数被设置到 SQL 中 后,下一步要做的事情是执行 SQL,然后处理 SQL 执行结果。对于更新操作,数据库一般返回一个 int 行数值,表示受影响行数,这个处理起来比较简单。...2.2.6.4 存储映射结果 存储映射结果是“查询结果”处理流程中的最后一环,实际上也是查询语句执行过程的最后一环。
ALTER PROC [dbo].[Student_Friend_Get] @startRowIndexId INT, @max...
java后台controller中,for循环执行数据库操作,但是发现实际仅仅执行了一次,或者说提交成功了一次,并没有实际的个数循环 有可能是同一个对象导致的 可以仔细看一下下面两段代码有什么区别 ps...boolean updateResult = Service.update(entity ); } 很明显上面是声明了一个引用,每一次都创建了一个新的对象...,并执行update操作 下面是同一个对象,不断地改变赋值,然后执行了update操作 其结果截然不同: 上面的一段代码,会执行实际的次数,循环0,1,2,3,4 执行5次update 下面的代码仅仅只会执行一次...,因为是同一个对象 所以如果循环里面,调用service,service调用了dao执行了sql,如果发现仅仅只是执行了一次,可以考虑怀疑是不是对象是同一个
语句 存储引擎 ---- 查询优化器会调用存储引擎的接口,去执行 SQL,也就是说真正执行 SQL 的动作是在存储引擎中完成的。...在执行这个 SQL 的时候 SQL 语句对应的数据要么是在内存中,要么是在磁盘中,如果直接在磁盘中操作,那这样的随机IO读写的速度肯定让人无法接受的,所以每次在执行 SQL 的时候都会将其数据加载到内存中...但是有了 Buffer Pool 就是我们第一次在查询的时候会将查询的结果存到 Buffer Pool 中,这样后面再有请求的时候就会先从缓冲池中去查询,如果没有再去磁盘中查找,然后在放到 Buffer...log 采用循环写的方式记录,当写到结尾时,会回到开头循环写日志。...2、ROW 基于行的复制(row-based replication, RBR),不记录每条SQL语句的上下文信息,仅需记录哪条数据被修改了 【优点】:不会出现某些特定情况下的存储过程、或 function
写操作执行过程 如果这条sql是写操作(insert、update、delete),那么大致的过程如下,其中引擎层是属于 InnoDB 存储引擎的,因为InnoDB 是默认的存储引擎,也是主流的,所以这里只说明...2、缓存(Cache) 也称为查询缓存,存储的数据是以键值对的形式进行存储,如果开启了缓存,那么在一条查询sql语句进来时会先判断缓存中是否包含当前的sql语句键值对,如果存在直接将其对应的结果返回...,mysql会计算各个执行方法的最佳时间,最终确定一条执行的sql交给最后的执行器 5、执行器 执行器会调用对应的存储引擎执行 sql。...缺点是在 mysql 集群时可能会导致操作不一致从而使得数据不一致(比如在操作中加入了Now()函数,主从数据库操作的时间不同结果也不同)。优点是占空间小,执行快。 3、Mixed。...0x02: 执行过程 写操作 通过上面的分析,可以很容易地了解开始的更新执行图。这里就不过多阐述了。
在之前的分析中,我们基本明白了mybatis对接口和xml的sql文件的组装拼接的原理。但是我们执行sql又是如何实现的,或者说sql的执行到底走了哪些流程。...那么这之间到底是怎么执行的,除此之外我们也应当考虑mybatis提供的四大拦截器的具体执行顺序。所以这是我们今天的主要工作。 首先我们知道,我们通过mybatis执行sql大概是这样的。...也就是说我们的sql执行肯定是通过这里的proxymapper来执行的。那么我们重点看一下这里的proxymapper。因为这里是jdk动态代理,所以我们找一下proxymapper的代码。 ?...sql进行分类,然后去执行。...分析到这里,我们可能有点疑问,我们的executor是在哪里进行初始化的,不是说好的有拦截器么,怎么分析的过程中并没有执行?怀着这种疑问我们再来看看。
写操作执行过程 如果这条sql是写操作(insert、update、delete),那么大致的过程如下,其中引擎层是属于 InnoDB 存储引擎的,因为InnoDB 是默认的存储引擎,也是主流的,所以这里只说明...2、缓存(Cache) 也称为查询缓存,存储的数据是以键值对的形式进行存储,如果开启了缓存,那么在一条查询sql语句进来时会先判断缓存中是否包含当前的sql语句键值对,如果存在直接将其对应的结果返回...,mysql会计算各个执行方法的最佳时间,最终确定一条执行的sql交给最后的执行器,关于肉眼品世界,回复666,与1000名CTO在一起 5、执行器 执行器会调用对应的存储引擎执行 sql。...缺点是在 mysql 集群时可能会导致操作不一致从而使得数据不一致(比如在操作中加入了Now()函数,主从数据库操作的时间不同结果也不同)。优点是占空间小,执行快。 3、Mixed。...0x02: 执行过程 写操作 通过上面的分析,可以很容易地了解开始的更新执行图。这里就不过多阐述了。
之前执行过的语句及其结果会以 key-value 对的形式,被直接缓存在内存中。key 是查询的语句,value 是查询的结果。...语法分析:根据词法分析的结果,语法分析主要就是判断你输入的SQL语句是否正确,是否符合MYSQL语法,如果你的语句不对,就会收到“You have an error in your SQL syntax...如果有权限,就会去调用引擎的接口,返回接口执行的结果。...语句分析 我们以下面一条真实SQL查询语句来进行分析下MYSQL查询的执行过程select id,name,sex,phoone from user t where t.age='26' and t.account...在MYSQL8.0之前会先去查询缓存中,以这条SQL语句作为key在内存中查询是否有结果,如果有则先判断是否有权限,有权限则返回客户端,否则报错;如果没有从查询缓存命中则进入下一步 通过分析器进行词法分析
C#调用SQL中的存储过程中有output参数,类型是字符型的时候一定要指定参数的长度。不然获取到的结果总是只有第一字符。本人就是由于这个原因,折腾了很久。在此记录一下,供大家以后参考!...RoleName nvarchar(10), @Description nvarchar(50), @RoleID int output AS DECLARE @Count int -- 查找是否有相同名称的记录...SqlCommand( "sp_AccountRole_Create", DbConnection ); DbConnection.Open(connectString); // 废置SqlCommand的属性为存储过程...permission.PermissionName; command.parameters["@Description"].value = permission.Description; // 可以返回新的ID
通过这张图,我们可以直观的看到MySQL的内部结构,包括连接器、缓存、解析器、优化器、存储引擎以及支持DDL、DML、存储过程、视图等功能的SQL接口。...一、SQL语句的执行流程 1、连接MySQL 通常我们会编写sql语句通过某个客户端来执行并且接受执行结果,比如命令行、JDBC、navicat。...语句了,「SQL接口」就像我们写的Controller一样会接收到sql语句,如果是 select 语句,将会去「缓存」中检索结果响应给客户端。...有些博客的说法是在解析后才查询缓存,这种说法是不严谨的,这里抛出官方的说明“如果收到相同的语句,服务器将从查询缓存中检索结果,而不是解析并再次执行该语句” 同时在该说明中可以看到“从MySQL 5.7.20...: 先检查该语句是否有权限,如果没有权限,直接返回错误信息,如果有权限,在 MySQL8.0 版本以前,会先查询缓存,以这条 sql 语句为 key 在内存中查询是否有结果,如果有直接缓存,如果没有,
大家好,又见面了,我是全栈君 1、创建一个字段名称和数量与存储过程的执行结果一致的临时表; 2、insert into #t1 EXEC Porc1 ‘a’ 示例: CREATE PROCEDURE Proc1
领取专属 10元无门槛券
手把手带您无忧上云