在服务器启动的过程中,只是创建了套接字且绑定了端口,但还没有对其进行监听,也就是还没有形成服务器监听模式,这些操作是在函数handle_connections_methods中完成,这里所做的工作就是等待一个用户的连接请求,并给它分配一个工作线程。
一个大的循环里面有select或者poll(网络编程),然后通过mysql_socket_accept生成一个新的套接字,这个就是真正针对新连接的连接套接字,这个套接字才是用来监听连接请求的,而服务器的连接监听套接字会在创建新连接线程(create_new_thread)之后,返回循环中继续监控有没有新的连接进来。
在MySQL中,用户连接退出后,在服务器中其实并没有真正地销毁工作线程,而是将它缓存起来,如果以后有新的连接请求,系统会将已经缓存起来的连接直接交给这个用户使用,这样可以在一定程度上提高性能。如果没有找到空余的线程,就重新创建一个线程
查询缓存中存放着最近一段时间内,出现频率最高的语句和它对应的查询结果。这个函数首先判断当前处理的语句在不在Query Cache中(对于MySQL的查询缓存,其实功能非常弱,因为只有当语句完全相同,包括空格及大小写也要完全相同的情况下才能命中,但这样的情况一般是很少出现的)。如果当前处理的语句存在于Query Cache中,则直接将其对应的结果集返回给用户;如果没有,则通过parse_sql对SQL语句进行分析,这主要是系统根据系统语法文件sql_yacc.yy进行语法分析,生成相应的语法树,然后通过函数mysql_execute_command来执行这条语句
SQLCOM_INSERT对应的就是插入语句,SQLCOM_SELECT对应的就是查询语句,它们分别对应的操作函数为mysql_insert与execute_sqlcom_select。通过各自对应的操作函数,就可以将对应的操作执行完成。