mysql 一条sql的执行顺序

本文详细解析了SQL从编写到执行的全过程,包括连接器、分析器、优化器、执行器及存储引擎的作用,同时深入探讨了数据库事务的四大特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql 也是一个常见的数据库系统,一条sql 从写好到执行,要经历几个阶段,就像你去办一个营业执照  ,先提交材料--》 初步审核--》缴费--》审核2---》发证

一条sql 进入数据库执行,需要经历一下步骤:

连接器(权限校验)  --》分析器(词法分析)--》优化器(执行计划,选择索引) --》执行器 --》 存储引擎(innodb)

门口保安                    --》大厅向导服务人员  ----》 科员帮你填材料  -------------》审批   -----》办事发执照

  • 连接器:

    show processlist 可以查看链接信息, Command  显示连接状态 sleep 代表此连接空闲

  • 分析器

    语法分析,判断是否有那些字段,是否符合mysql 的语法,是否存在mysql关键字 例如你将select 写成 sele ,或者少些  from字段 ,这个阶段mysql 就会给你返回错误信息,避免继续执行

select * user where ID=1;

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select * user where ID=1' at line 1
  • 优化器
优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。
  • 执行器
开始执行的时候,要先判断一下你对这个表 user_xxx 有没有执行查询的权限,如果没有,就会返回没有权限的错误
  • 存储引擎

   mysql的执行Write-Ahead Logging,它的关键点就是先写日志,再写磁盘

        例如innodb 需要更新一条数据库记录的时候,先把记录写道redo log中,马上更新内存,这个时候算更新完成了,在后续系统不忙的时候,

InnoDB 将这个操作记录更新到磁盘里面

        当然redo log 是可以配置大小的,比如配置 2个 1g的文件   当记录写道靠近checkpoint的时候 ,checkpoint  擦除记录前要把记录更新到数据文件。

redo log 是 InnoDB 引擎特有的日志redo log(重做日志):  redo log 记录的是“在某个数据页上做了什么修改”;redo log 是循环写的,空间固定会用完;

 mysql 的所有存储引擎都有binlog(归档日志)。 binlog 是逻辑日志,记录的是这个语句的原始逻辑,比如“给 id=111111 这一行的 score 字段加 1 ”,binlog 是可以追加写入的。“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志

当然binlog 有一个优点是 redolog无法替代的 :redolog是循环写的,不持久保存,binlog的“归档”这个功能,redolog是不具备的。

数据库的事务:

一定要保证事务的原子性,不可分割

隔离性

一致性

持久性 一旦提交 数据库中的数据的改变就是永久性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值