1、一条 SQL 语句提交到数据库之后,数据库都会执行哪些动作?
2、MySQL 是如何恢复到某一天的某一秒的状态?
先看下一条读操作 SQL 的查询过程:
连接器
客户端在提交 SQL 语句之前,你需要先连接上数据库,也就是说要提供用户名密码登陆,这便是连接器发挥作用的时候。
连接上去后,MySQL 就创建了一个连接对象放在了内存中,连接对象里有用户的相关权限信息,此时如果管理员修改了用户权限,只要用户不退出重新连接,就不会被影响。
内存资源是比较昂贵的,不用的话就要被清理。如果不做任何操作,在一定的时间之后(默认是 8 小时),连接器会自动断开,此时再查询就会报错。
一个比较好的方案是使用数据库连接池。Python 编程可以使用第三方库 DBUtils 来管理数据库连接池。
查询缓存
缓存可以快速返回命中的查询,在使用上的感受就是同一个 SQL,第二次查询时结果是立刻显示的。查询缓存中以 SQL 语句作为 KEY,查询结果作为 VALUE。
如果你的查询能够直接在这个缓存中找到 key,并且具有对该表的相应的权限,那么这个 value 就会被直接返回给客户端。
如果没有找到,会走接下来流程,一旦查到结果,结果还是会保存在查询缓存中。
分析器
如果没有命中查询缓存,SQL 语句就会传给分析器进行词法分析,分析是否有语法错误,解析中表名,字段名等等,其实不仅仅数据库有分析器,很多开源的工具也有分析 SQL 的功