首页 存档 技术 查看内容

MySQL客户端代码引发的思考

2018-3-30 13:00 |来自: 互联网 262 0

摘要: 一次偶然的机会debug代码瞅了一眼Mysql客户端的代码(Java版本),最引发我兴趣的是这一句: execSQL是一个非常重要的方法,所有SQL语句的最终都是交由这个代码来实现的;这个方法被一个connectionMutex锁(这个锁 ...

一次偶然的机会debug代码瞅了一眼Mysql客户端的代码(Java版本),最引发我兴趣的是这一句:


execSQL是一个非常重要的方法,所有SQL语句的最终都是交由这个代码来实现的;这个方法被一个connectionMutex锁(这个锁其实就是Connection对象自己,Mysql客户端通过使用了“反射”所以不能直接使用this)包裹着这就意味着在同一时刻一个Mysql连接只能执行一条SQL语句

MySQL客户端的“锁”

带着疑问我走读了这段代码,画一幅图


MysqlIO是负责网络通讯的底层类,使用的是Java是BIO通讯属于“标准”的TCP客户端写法。它内部有三个重要的成员变量

  • mysqlConnection是一个Socket类型

  • mysqlOutput是一个BufferedOutputStream类型

  • InputStream是一个InputStream类型(Mysql做了一点封装理解成BufferedInputStream也没什么问题)

这三个成员变量的初始化是在MySqlIO的构造函数完成的,当执行SQL语句的时相当于:

  • 锁住Socket,此时只有当前连接可以使用这个Socket对象(实际的锁范围更大)

  • mysqlOutput写入数据包,发送Command(内部称客户端-

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部