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

wordpress仿站入门怎样推广自己的店铺啊

wordpress仿站入门,怎样推广自己的店铺啊,推广链接制作软件,国外的创意设计网站文章目录 一 MySQL 基础架构1.1 MySQL 基本架构1.2 Server 层基本组件介绍1) 连接器2) 查询缓存(MySQL 8.0 版本后移除)3) 分析器4) 优化器5) 执行器 二 语句分析2.1 查询语句2.2 更新语句为什么要用两个日志模块#xff0c;用一个日志模块不行吗?为什么必须有“两阶段提交”… 文章目录 一 MySQL 基础架构1.1 MySQL 基本架构1.2 Server 层基本组件介绍1) 连接器2) 查询缓存(MySQL 8.0 版本后移除)3) 分析器4) 优化器5) 执行器 二 语句分析2.1 查询语句2.2 更新语句为什么要用两个日志模块用一个日志模块不行吗?为什么必须有“两阶段提交”呢 三 总结 本篇文章会分析一下一个 sql 语句在 MySQL 中的执行流程包括 sql 的查询在 MySQL 内部会怎么流转sql 语句的更新是怎么完成的。 在分析之前我会先介绍下 MySQL 的基础架构知道了 MySQL 由哪些组件组成以及这些组件的作用是什么可以帮助我们理解和解决这些问题。 一 MySQL 基础架构 1.1 MySQL 基本架构 从下图你可以很清晰的看到用户的 SQL 语句在 MySQL 内部是如何执行的。 先简单介绍一些组件的基本作用帮助大家理解这幅图 连接器 身份认证和权限相关(登录 MySQL 的时候)。查询缓存: 执行查询语句的时候会先查询缓存MySQL 8.0 版本后移除因为这个功能不太实用。分析器: 没有命中缓存的话SQL 语句就会经过分析器分析器说白了就是要先看你的 SQL 语句要干嘛再检查你的 SQL 语句语法是否正确。优化器 按照 MySQL 认为最优的方案去执行。执行器: 执行语句然后从存储引擎返回数据。 简单来说 MySQL 主要分为 Server 层和存储引擎层 Server 层主要包括连接器、查询缓存、分析器、优化器、执行器等所有跨存储引擎的功能都在这一层实现比如存储过程、触发器、视图函数等还有一个通用的日志模块 binlog 日志模块。存储引擎 主要负责数据的存储和提取其架构模式是插件式的支持 InnoDB、MyISAM、Memory 等多个存储引擎其中 InnoDB 引擎有自己的日志模块 redolog 模块。现在最常用的存储引擎是 InnoDB它从 MySQL 5.5.5 版本开始就被当做默认存储引擎了。 1.2 Server 层基本组件介绍 1) 连接器 连接器主要和身份认证和权限相关的功能相关就好比一个级别很高的门卫一样。负责用户登录数据库进行用户的身份认证包括校验账户密码权限等操作。 如果用户名或密码不对你就会收到一个Access denied for user的错误然后客户端程序结束执行。如果用户名密码认证通过那么连接器会到权限表里面查出你拥有的权限。之后这个连接里面的权限判断逻辑都将依赖于此时读到的权限。也就是一个用户已经成功建立连接之后即使你用管理员账号对这个用户的权限做了修改也不会影响已经存在连接的权限。修改完成后只有再新建的连接才会使用新的权限设置。 2) 查询缓存(MySQL 8.0 版本后移除) 查询缓存主要用来缓存我们所执行的 SELECT 语句以及该语句的结果集。 MySQL 拿到一个查询请求后会先到查询缓存看看之前是不是执行过这条语句。之前执行过的语句及其结果可能会以 key-value 对的形式被直接缓存在内存中。key 是查询的语句value 是查询的结果。 如果你的查询能够直接在这个缓存中找到 key那么这个value 就会被直接返回给客户端。如果语句不在查询缓存中就会继续后面的执行阶段。执行完成后执行结果会被存入查询缓存中。你可以看到如果查询命中缓存MySQL 不需要执行后面的复杂操作就可以直接返回结果这个效率会很高。当然在真正执行缓存查询的时候还是会校验用户的权限是否有该表的查询条件。 但MySQL 查询不建议使用缓存因为查询缓存失效在实际业务场景中可能会非常频繁只要有对一个表的更新那么这个表上所有的查询缓存都会被清空。对于不经常更新的数据来说使用缓存还是可以的。 所以一般在大多数情况下我们都是不推荐去使用查询缓存的。MySQL 8.0 版本后删除了缓存的功能。 3) 分析器 如果没有命中查询缓存就要开始真正执行语句了。首先MySQL 需要知道你要做什么。那么就会进入分析器分析器主要是用来分析 SQL 语句是来干嘛的分析器也会分为几步 第一步词法分析一条 SQL 语句有多个字符串和空格组成MySQL 需要识别出里面的字符串分别是什么代表什么。比如 select提出查询的表提出字段名提出查询条件等等。 例如输入 select ID from T MySQL 从你输入的select这个关键字识别出来这是一个查询语句。它也要把字符 串“T”识别成“表名 T”把字符串“ID”识别成“列 ID 做完这些操作后就会进入第二步。 第二步语法分析根据词法分析的结果语法分析器会根据语法规则判断你输入的这个 SQL 语句是否满足 MySQL 语法。 完成这 2 步之后MySQL 就准备开始执行了但是如何执行怎么执行是最好的结果呢这个时候就需要优化器上场了。 4) 优化器 优化器是在表里面有多个索引的时候决定使用哪个索引或者在一个语句有多表关联join的时候决定各个表的连接顺序等。 可以说经过了优化器之后可以说这个语句具体该如何执行就已经定下来。然后进入执行器阶段。 5) 执行器 MySQL 通过分析器知道了你要做什么通过优化器知道了该怎么做于是就进入了执行器阶段开始执行语句。 当选择了执行方案后MySQL 就准备开始执行了首先执行前会校验该用户有没有权限如果没有权限就会返回错误信息如果有权限就会去调用引擎的接口返回接口执行的结果。 二 语句分析 2.1 查询语句 通过上面的介绍大家应该对执行一条sql的基本流程已经清楚了接下来详细介绍一条sql是如何执行的。我们的 sql 可以分为两种一种是查询一种是更新增加更新删除。我们先分析下查询语句语句如下 select * from sys_student A where A.age18 and A.nameBruce;结合上面的说明我们分析下这个语句的执行流程 在连接器登录认证通过后先检查该用户是否有权限如果没有权限直接返回错误信息如果有权限在 MySQL8.0 版本以前会先查询缓存以这条 sql 语句为 key 在内存中查询是否有结果如果有直接缓存如果没有执行下一步。 通过分析器进行词法分析提取 sql 语句的关键元素比如提取上面这个语句是 select 查询操作提取需要查询的表名为 sys_student ,需要查询所有的列查询条件是这个表的 age‘18’ and name‘Bruce’。然后进行语法分析判断这个 sql 语句是否有语法错误比如关键词是否正确等等如果检查没问题就执行下一步。 接下来就是优化器进行确定执行方案上面的 sql 语句可以有两种执行方案 a.先查询学生表中姓名为“Bruce”的学生然后判断是否年龄是 18。b.先找出学生中年龄 18 岁的学生然后再查询姓名为“Bruce”的学生。那么优化器根据自己的优化算法进行选择执行效率最好的一个方案优化器认为有时候不一定最好。那么确认了执行计划后就准备开始执行了。 MySQL 通过分析器知道了你要做什么通过优化器知道了该怎么做于是就进入了执行器阶段开始执行语句。开始执行前先进行权限校验如果没有权限就会返回错误信息如果有权限就打开表继续执行。打开表的时候执行器就会根据表的引擎定义去使用这个引擎提供的接口返回引擎的执行结果。 2.2 更新语句 以上就是一条查询 sql 的执行流程那么接下来我们看看一条更新语句如何执行的呢sql 语句如下 update sys_student A set A.age19 where A.name Bruce ;我们来给Bruce修改下年龄这条语句也基本上会沿着上一个查询的流程走只不过执行更新的时候肯定要记录日志啦这就会引入日志模块了MySQL 自带的日志模块是 binlog归档日志 所有的存储引擎都可以使用我们常用的 InnoDB 引擎还自带了一个日志模块 redo log重做日志我们就以 InnoDB 模式下来探讨这个语句的执行流程。流程如下 先查询到nameBruce这一条或多条数据。如果nameBruce 这一行所在的数据页本来就在内存中就直接返回给执行器否则需要先从磁盘读入内存然后再返回。然后拿查询得到的语句把 age 改为 19然后调用引擎 API 接口写入这一行数据InnoDB 引擎把数据保存在内存中同时记录 redo log此时 redo log 进入 prepare 状态然后告诉执行器执行完成了随时可以提交。执行器收到通知后记录 binlog然后调用引擎接口提交 redo log 为提交状态。更新完成。 为什么要用两个日志模块用一个日志模块不行吗? 因为最开始 MySQL 里并没有 InnoDB 引擎。MySQL 自带的引擎是 MyISAM但是 MyISAM 没有 crash-safe 的能力(crash-safe 的能力即使数据库发生异常重启之前提交的记录都不会丢失)。binlog 日志只能用于归档用于记录数据库执行的写入性操作信息记载的是update/delete/insert这样的SQL语句数据的逻辑变化。而 InnoDB 是另一个公司以插件形式引入 MySQL 的既然只依靠 binlog 是没有 crash-safe 能力的所以 InnoDB使用另外一套日志系统——也就是 redo log 来实现 crash-safe 能力redo log记载的是物理修改的内容xxxx页修改了xxx。redo log的作用是为持久化而生的。写完内存如果数据库挂了那我们可以通过redo log来恢复内存还没来得及刷到磁盘的数据将redo log加载到内存里边那内存就能恢复到挂掉之前的数据了。 并不是说只用一个日志模块不可以只是 InnoDB 引擎就是通过 redo log 来支持事务的。 为什么必须有“两阶段提交”呢 这是为了让两份日志之间的逻辑一致。 先写 redo log 直接提交然后写 binlog假设写完 redo log 后binlog还没写完MySQL 进程异常重启。由于我们前面说过的redo log 写完之后系统即使崩溃仍然能够把数据恢复回来所有恢复后这一行age的值是19。 但是由于 binlog 没写完就 crash 了这时候 binlog 里面就没有记录这个语句。因此之后备份日志的时候存起来的 binlog 里面就没有这条语句。同时主从同步也会丢失这一条数据。先写 binlog然后写 redo log假设写完了 binlogMySQL 进程异常重启了由于没有 redo log本机是无法恢复这一条记录的但是 binlog 又有记录那么和上面同样的道理就会产生数据不一致的情况。 如果采用 redo log 两阶段提交的方式就不一样了当写入redo log 处于prepare状态binlog 也已经写完了这个时候发生了异常重启MySQL 的处理过程如下 如果redo log处于commit状态则判断 redo log 是否完整如果判断是完整的就立即提交。如果 redo log 只是预提交但不是 commit 状态这个时候就会去判断 binlog 是否完整如果binlog完整就提交 redo log, 不完整就回滚事务。 这样就解决了数据一致性的问题。 三 总结 MySQL 主要分为 Server 层和引擎层Server 层主要包括连接器、查询缓存MySQL 8.0 版本后移除、分析器、优化器、执行器同时还有一个日志模块binlog这个日志模块所有执行引擎都可以共用,redolog 只有 InnoDB 有。引擎层是插件式的目前主要包括MyISAM,InnoDB,Memory 等。查询语句的执行流程如下连接数据库----》权限校验—》查询缓存—》分析器—》优化器—》权限校验—》执行器—》引擎更新语句执行流程如下连接数据库----》权限校验—》分析器----》优化器----》权限校验----》执行器—》引擎—》写入redo log(prepare 状态—》写binlog—》提交事务redo log处于commit状态
http://www.sczhlp.com/news/206171/

相关文章:

  • 电商网站建设网263企业邮箱个人入口登录
  • 推广网站平台2022最新时事新闻及点评
  • 运动类网站站长工具端口检测
  • 2025多校冲刺 CSP 模拟赛 6
  • Cisco ASR 9000 Router IOS XR Release 7.11.2 MD - 思科 ASR 9000 路由器系统软件
  • 2025年瑕疵检测设备厂家推荐排行榜,表面瑕疵检测,薄膜瑕疵检测,铝箔瑕疵在线检测,外观瑕疵检测机公司精选!
  • 建设网站管理规定wordpress2019中文下载
  • 常见的网站建设类型都有哪些方面有了域名后怎么完成网站建设
  • 网站建设类课题的研究方法建设部网站国家级工法目录
  • 机械毕业设计代做网站推荐建网站 发信息 做推广
  • 优跃达官网网站建设项目汉中市网站建设
  • 网站安全检测在线免费制作商标
  • 深圳企业网站建设方案南京网站建设公司排名
  • 济宁做网站比较好的公司有哪些怎样建网站?
  • 长治做网站哪家好网站程序超市
  • 教育网站制作论文wordpress 会员积分
  • 网站开发一般用什么技术成都 网站改版
  • 接网站建设的单子微信商户平台开发
  • 网站的稳定性自己做淘宝网站
  • 浙江网站龙岗网站建设哪家便宜
  • 沈阳专业做网站方案搭建网站需要哪些东西
  • 园林景观设计公司招聘seo是指什么
  • 郑州网站建设一汉狮网络wordpress html5 mp3
  • 神农架网站建设给教育类做网站
  • 是在百度中建设网站优化培训方式
  • 如何黑掉jsp做的网站wordpress 一键迁移
  • 网站如何开通支付功能网站建设可以抵扣吗
  • 做购物网站的图标从哪里来湘潭营销网站建设
  • 如何做分销型网站深圳加盟网站建设
  • 网站审批需要什么手续中国八冶建设集团网站