sql语句是怎么执行的(在SQL Server2005中如何运行SQL语句)

本文目录
在SQL Server2005中如何运行SQL语句
1、首先打开SQL Server 软件,然后,单击图中的“数据库”前面的“+”号,展开数据库。
2、然后,用同样的方法单击图中红色方框标注的数据库,那是用户自己添加的数据库。
3、然后,单击红色方框中的“表”,将之展开。
4、如图,红色方框中标注的是数据库中表的名字,记住这些名字,接下来有用。
5、然后,再次单击自己添加的数据库,选中它,然后单击“新建查询”。
6、然后,在软件的右边就会出现新的页面,如图所示。
7、在新的页面中输入符合SQL语法的SQL语句,然后,单击图中标注的“查询”就会执行SQL语句了。
8、执行结果如图所示,完成效果图。
一句sql语句是如何执行的
登录成功之后,会校验当然登录账号的权限。后续所有的数据库操作都被当前权限所限制。因此,管理员修改用户权限时,不会立即生效,需要重新连接才会生效。
MySQL默认情况下,当一个链接空闲超过8(60608)小时之后会自动断开连接。但是连接池则以为该被断开的连接依然有效。 这个时候如果客户端代码发送请求时,连接池会把已经失效的代码返回至客户端。这样就会导致代码异常。
通过show global variables like ‘%timeout%‘可进行查看, 缺省情况下是使用wait_timeout 这个字段。
另外可以用show processlist;用来显示用户正在运行的线程。
注意:除了 root 用户能看到所有正在运行的线程外,其他用户都只能看到自己正在运行的线程,看不到其它用户正在运行的线程。除非单独个这个用户赋予了PROCESS 权限。
mysql》 show processlist;
+----+-----------------+-----------+------+---------+------+------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-----------------+-----------+------+---------+------+------------------------+------------------+
| 4 | event_scheduler | localhost | NULL | Daemon | 461 | Waiting on empty queue | NULL |
| 13 | root | localhost | NULL | Query | 0 | starting | show processlist |
+----+-----------------+-----------+------+---------+------+------------------------+------------------+
查询缓存
当我们建立连接之后,执行SQL语句时,会先进行缓存查询(如果开启了缓存查询)。如果之前执行了相同的SQL语句,则会从缓存中直接返回结果。 这个过程可以理解为SQL文本和查询结果的映射。
但是查询缓存真的能提升效率吗? 理论上,不建议开启查询缓存
因为缓存和失效都会有额外的资源消耗,数据发生改变或者表结构发生改变时,都会导致缓存失效。最差的情况就是你刚建立了一份缓存,另外一边又有人修改数据。这样导致缓存失效,重新建立了一份新的缓存。
有这些INSERT、UPDATE、 DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE会导致缓存数据失效。所以查询缓存适合有大量相同查询的应用,不适合有大量数据更新的应用
在MySQL8.0的版本删除了查询缓存的功能。
如果你是8.0之前的版本,可以通过以下方法关闭查询缓存:
1、临时关闭,直接执行命令行
set global query_cache_size=0
set global query_cache_type=0
2、永久关闭,修改配置文件my.cnf ,添加下面的配置即可。
query_cache_type=0
query_cache_size=0
分析器
当在查询缓存中没有找到对象的查询结果时,这时候就需要分析器对SQL进行解析。比如解析出响应的关键词。如Select(查询)、Delete(删除)等等,同时也会把相应的表明、字段名都分析出来。如果SQL语法错误,会告诉我们You have an error in your SQL syntax
优化器
SQL实际的执行顺序不一定就是我们写的顺序。在通过分析器的解析,数据库知道了我们要做什么。然后会按照一定的规则重写SQL。当有多个索引的时候,优化器也会决定去使用哪个索引;当多表关联查询的时候,也会去决定各个表的链接顺序。总之,优化器会通过一系列的算法规则去给出一个最优的执行策略。
执行器
SQL通过分析器知道要做什么,通过优化器知道该怎么做。最后通过执行器就进入了执行阶段。
首先会根据连接的账号查看是否有操作该表的权限。如果没有,则返回权限错误。如果有权限,则继续执行。
打开表的时候,执行器会根据表的引擎 去使用该引擎提供的接口。
存储引擎层
存储引擎层负责数据的存储和提取。
可通过show engines查看MySQL的存储引擎。存储引擎有InnoDB、MylSAM、MEMORY、MERGE等等..
但是我们常用的基本是InnoDB和MylSAM。
InnoDB在5.5.5版本之后为默认的存储引擎
InnoDB
InnoDB是一个事务型的存储引擎,有行级锁定和外键约束,提供了具有提交,回滚和崩溃恢复的事务安全,但是对比MyLSAM引擎,写的效率会比差一些,并且会占用更多的磁盘空间以保持数据和索引。
特点:
更新多的表,适合处理多重并发的更新请求。
支持事务。
可以从灾难中恢复(通过bin-log日志等)。
外键约束。只有他支持外键。
支持自动增加列属性auto_increment。
MylSAM
Mylsam 存储引擎独立于操作系统,简单说就是可用在windows上使用,也可用将数据转移到Lunex操作系统上。系统兼容性很好!!!。这种存储引擎在建表的时候,它会创建3个文件。分别是(.frm,.MYD,.MYI),简单说明一下:.frm 存储表的定义(也就是表结构啦),.MYD 就是表里面的数据,.MYD存储索引。这样的划分操作系统对大文件的操作是比较慢的,这样将表分为三个文件,那么.MYD这个文件单独来存放数据自然可以优化数据库的查询等操作。
特点:
1、不支持事务
2、不支持外键
3、查询速度很快。如果数据库insert和update的操作比较多的话采用表锁效率低(建议使用innodb)。
4、对表进行加锁
总结
Server层涵盖了MySQL执行的大多数的核心功能,以及各种各样的内置函数,比如时间、日期等,不管使用的是什么存储引擎,它的Server层是一样的。
详解一条sql语句在mysql中是如何执行的
概览
最近开始在学习mysql相关知识,自己根据学到的知识点,根据自己的理解整理分享出来,本篇文章会分析下一个sql语句在mysql中的执行流程,包括sql的查询在mysql内部会怎么流转,sql语句的更新是怎么完成的。
一、mysql架构分析
下面是mysql的一个简要架构图:
mysql主要分为Server层和存储引擎层
Server层:主要包括连接器、查询缓存、分析器、优化器、执行器等,所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图,函数等,还有一个通用的日志模块 binglog日志模块。
存储引擎: 主要负责数据的存储和读取,采用可以替换的插件式架构,支持InnoDB、MyISAM、Memory等多个存储引擎,其中InnoDB引擎有自有的日志模块redolog 模块。
InnoDB 5.5.5版本作为默认引擎。
连接器
主要负责用户登录数据库,进行用户的身份认证,包括校验账户密码,权限等操作,如果用户账户密码已通过,连接器会到权限表中查询该用户的所有权限,之后在这个连接里的权限逻辑判断都是会依赖此时读取到的权限数据,也就是说,后续只要这个连接不断开,即时管理员修改了该用户的权限,该用户也是不受影响的。
查询缓存
连接建立后,执行查询语句的时候,会先查询缓存,Mysql会先校验这个sql是否执行过,以Key-Value的形式缓存在内存中,Key是查询预计,Value是结果集。如果缓存key被命中,就会直接返回给客户端,如果没有命中,就会执行后续的操作,完成后也会把结果缓存起来,方便下一次调用。当然在真正执行缓存查询的时候还是会校验用户的权限,是否有该表的查询条件。
Mysql 查询不建议使用缓存,因为对于经常更新的数据来说,缓存的有效时间太短了,往往带来的效果并不好,对于不经常更新的数据来说,使用缓存还是可以的,Mysql 8.0 版本后删除了缓存的功能,官方也是认为该功能在实际的应用场景比较少,所以干脆直接删掉了。
分析器
mysql 没有命中缓存,那么就会进入分析器,分析器主要是用来分析SQL语句是来干嘛的,分析器也会分为几步:
第一步,词法分析,一条SQL语句有多个字符串组成,首先要提取关键字,比如select,提出查询的表,提出字段名,提出查询条件等等。做完这些操作后,就会进入第二步。
第二步,语法分析,主要就是判断你输入的sql是否正确,是否符合mysql的语法。
完成这2步之后,mysql就准备开始执行了,但是如何执行,怎么执行是最好的结果呢?这个时候就需要优化器上场了。
优化器
优化器的作用就是它认为的最优的执行方案去执行(虽然有时候也不是最优),比如多个索引的时候该如何选择索引,多表查询的时候如何选择关联顺序等。
执行器
当选择了执行方案后,mysql就准备开始执行了,首先执行前会校验该用户有没有权限,如果没有权限,就会返回错误信息,如果有权限,就会去调用引擎的接口,返回接口执行的结果。
二、语句分析
2.1 查询语句
说了以上这么多,那么究竟一条sql语句是如何执行的呢?其实我们的sql可以分为2中,一种是查询,一种是更新(增加,更新,删除)。我们先分析下查询语句,语句如下:
select * from tb_student A where A.age=’18’ and A.name=’张三’;
结合上面的说明,我们分析下这个语句的执行流程:
先检查该语句是否有权限,如果没有权限,直接返回错误信息,如果有权限,在mysql8.0版本以前,会先查询缓存,以这条sql语句为key在内存中查询是否有结果,如果有直接缓存,如果没有,执行下一步。
通过分析器进行词法分析,提取sql语句的关键元素,比如提取上面这个语句是查询select,提取需要查询的表名为tb_student,需要查询所有的列,查询条件是这个表的id=’1’。然后判断这个sql语句是否有语法错误,比如关键词是否正确等等,如果检查没问题就执行下一步。
接下来就是优化器进行确定执行方案,上面的sql语句,可以有两种执行方案:
a.先查询学生表中姓名为“张三”的学生,然后判断是否年龄是18。
b.先找出学生中年龄18岁的学生,然后再查询姓名为“张三”的学生。
那么优化器根据自己的优化算法进行选择执行效率最好的一个方案(优化器认为,有时候不一定最好)。那么确认了执行计划后就准备开始执行了。
进行权限校验,如果没有权限就会返回错误信息,如果有权限就会调用数据库引擎接口,返回引擎的执行结果。
2.2 更新语句

更多文章:
细胞之间的interaction(细胞间相互作用方式有什么 有什么区别)
2026年5月26日 18:45
powder是什么刷子(rt化妆刷怎么样Real Techniques化妆刷怎么样)
2025年5月28日 07:15
u16女足亚洲杯直播(女足亚洲杯半决赛时间直播什么平台能看)
2026年4月9日 20:45
excel教程进阶(小白学Excel之操作中的常用技巧-Excel学习网)
2026年4月22日 12:45
结构体数组交换位置(c语言编程:将一个数组中的值按逆序重新存放,例如,原来顺序为8,6,5,4,3,要求改为3,4,5)
2025年9月14日 12:00
哪些cms可以做小说站(Wordpress、Discuz、KingCMS、MediaWiki各适合建什么样的站)
2026年7月24日 05:30
countif是计算什么的(excel中countif函数的功能是什么)
2025年5月29日 21:15
html5可以用在哪些方面(html5可以用来干什么,应用于哪些领域发展前景如何)
2026年3月11日 15:30
什么不是数据库系统的特点(急求解答题目 :什么不是数据库系统阶段的特点等)
2025年7月23日 08:45
运算放大器权威指南第五版(单电源运放和双电源运放有什么区别)
2026年5月1日 20:15
函数图像生成器 网页(有没有一种软件,当你输入数学公式后,软件就可以生成相应的图形(平面的或三维的))
2026年5月26日 16:45
thinkphp后台模板(为什么在thinkphp中的模板里只显示html代码,如图)
2025年7月25日 16:45
webservice部署在服务器(如何部署java webservice)
2025年12月16日 21:15
decimal转换为int(C#中怎样将decimal转int)
2025年6月3日 04:30
java的graphics详解(Java的Graphics类应该怎么用)
2026年8月9日 23:00











