MYSQL源码学习
文章平均质量分 51
fengbangyue
做一个真实的自我
展开
-
mysqld工程学习(一):两个基本函数的学习strmov和int10_to_str
以下特指WINDOW平台下MYSQL源码。要使用mysql数据库来作为我们的数据管理工具,我们首先要安装mysql或下载一个压缩包解压。但不管是那一种方式,都需要启动mysqld服务,使用过mysql的都知道。(在mysql的bin目录下有一个文件mysqld.exe文件.)mysql服务器启动后我们才能够连接到数据库进行数据的增删插改等查找。今天对mysqld的源码进行了了解,其主要就是实现了创建和安装window服务,并开启业务处理线程。先看看mysqld工程下的目录文件。nt_servc.h头文原创 2011-03-15 21:28:00 · 4352 阅读 · 1 评论 -
MySQL中Max+Group BY查询最大值记录无效
在SQL Server中 要对记录进行分类,并取出其中的最大最小项的时候,使用GROUP BY 加MAX/MIN函数实现,但是今天在MySQL中需要取出每天最晚产生的一条记录时,就不行了。如下面几张图所示(本来是有图片的,恩,CSDN的博客图片的方式真不敢恭维,这么老套,为什么就不支持直接题图呢,难道技术不行!搞不定), 是不是说MySQL中的这几个函数在这种场合下是无用的,那是不是MyS原创 2011-06-28 19:16:00 · 7120 阅读 · 0 评论 -
MySQL提供IP转换函数,对于IP类型的地址,建议使用int类型存储
不仅节省了存储空间,对比较也是比较快的,毕竟对整型和对15个长的字符比较差别还是很大的。查询语句中使用如下:select inet_aton(127.0.0.1),inet_aton(255.255.255.255),inet_ntoa(4294967295);原创 2011-06-20 19:50:00 · 6031 阅读 · 0 评论 -
MySQL源码中处理客户端不同地址族的源码
在ws2def.h文件中定义的结构:typedef struct sockaddr_storage { ADDRESS_FAMILYss_family; // addressfamily CHAR __ss_pad1[_SS_PAD1SIZE]; // 6 byte pad, thisis to make原创 2011-06-18 12:15:00 · 968 阅读 · 0 评论 -
MySQL在Windows平台下通信方式
在Windows平台下,MySQL可以使用三种方式和客户单通信。分别是套接字(SOCKET)、管道(Pipe)、共享内存(ShareMemory).而到底使用哪种方式,MySQL在编译的时候就已经决定了,在vio.c文件中会对通信方式进行初始化(vio_init函数,见后面),而对于不同类型的通信方式肯定会有不同的函数定义了,这些指针函数就定义在viosocket.c当中。这其中又有连个原创 2011-06-18 15:00:00 · 1102 阅读 · 0 评论 -
MySQL判断是否有数据可读源码
/** Indicate whether there is data to read on a given socket. @note An exceptional condition event and/or errors are interpreted as if there is data to read. @param sd原创 2011-06-18 11:23:00 · 861 阅读 · 0 评论 -
MySQL查看接收缓冲区数据长度
源码如下:/** Retrieve the amount of data that can be read from a socket. @param vio A VIO object. @param bytes[out] The amount of bytes available. @retval FALSE Success.原创 2011-06-18 10:38:00 · 1791 阅读 · 0 评论 -
MySQL复制数据时判断是否要做字符集转换函数
在服务器和客户端设置相同的字符集对程序运行的影响如下:bool Protocol::net_store_data(constuchar *from,size_t length, CHARSET_INFO *from_cs,CHARSET_INFO *to_cs){ uint dummy_errors;原创 2011-06-16 20:05:00 · 970 阅读 · 0 评论 -
MySQL中两个表字段名相同导致的一个问题
今天在对两个表进行查询的时候,由于两个表的有已个字段名是相同的,最终导致了查询结果不是我要的,该问题导致我检查了很久啊。大致如下:表A字段:PID,PName,PNote表B字段:PID,Money,PayDate查询语句如下:SELECT PID,PName,(SELECT SUM(Money) FROM B WHERE PID=PID) TotalMoney ,PN原创 2011-06-15 19:20:00 · 8001 阅读 · 1 评论 -
初探MySQL网络处理部分
在MySQL的源码中,mysql_com.h和violite.h中都有定义网络处理的结构,而且从表面上看好像是互相嵌套的,但应该里面的几个宏在发挥作作用,现在还没有深入不是特别了解。在mysql_com.h中入下:struct st_vio;typedef struct st_vio Vio; typedef struct st_net{#if !defined(原创 2011-06-13 21:26:00 · 788 阅读 · 0 评论 -
MySQL中的ALIGN_SIZE宏解释
在看MySQL的内存池分配的时候,看见了ALIGN_SIZE宏,知道是用作字节对齐的,实现原理如何不甚很明白,在网上查了一下。找到了这么一篇http://bbs.chinaunix.net/archiver/tid-846225.html解释,该页面布局不太好看,就搬到这里来了。很实用的。原帖内容:以前对于这个宏有讨论过,不过似乎都讲得很模糊,作为一个知识点不应该有模糊这个宏转载 2011-06-08 12:50:00 · 2066 阅读 · 0 评论 -
MySQL内存池结构源码 my_alloc.h
MySQL使用内存池结构,理解该结构挺简单的,但是对于my_alloc.c中的分配过程感觉上很难理解。/* Data structures for mysys/my_alloc.c (rootmemory allocator)*/ #ifndef _my_alloc_h#define _my_alloc_h #define ALLOC_MAX_B原创 2011-06-07 20:03:00 · 1496 阅读 · 0 评论 -
MySQL中JOIN查询详解
MySQL中JOIN查询详解文章来源:原创 作者:zhjx922 更新时间:2011-02-14 16:53:59一般而言,如果要设计一个小型数据库(指代码量少),但又要适应海量数据及访问的性能需求,最有效的方法莫过于针对主要应用场景选择一个或几个性能优异的核心算法作为引擎,然后努力将一些非主要应用场景作为该算法的特例或变种植入到引擎当中。 MySQL、Postgre转载 2011-06-07 19:09:00 · 4946 阅读 · 0 评论 -
MySQL一个线程处理一个连接源码
<br /><br />MySQL新到来一个连接后,会为该线程分配一个线程。如果服务器已经有空闲的线程被缓存了,则直接使用。如果没有缓存可用的线程,则重新创建一个线程给该连接使用。<br />/*<br /> Scheduler that uses one thread per connection<br />*/<br /> <br />voidcreate_thread_to_handle_connection(THD *thd)<br />{<br /> if (cached_thread_cou原创 2011-06-02 18:49:00 · 2858 阅读 · 0 评论 -
MySQL 从接收连接到执行连接命令的一个源码流程
MySQL 从接收连接到执行连接命令的一个源码流程函数从上到下的调用顺序mysqld_mainhandle_connections_methodshandle_connections_sockets_threadhandle_connections_socketscreate_new_threadcreate_thread_to_handle_connectionhandle_one_connectiondo_handle_one_connectionlogin_connectionprepare_new_原创 2011-06-02 20:04:00 · 782 阅读 · 0 评论 -
MySQL 服务器监听客户端连接源码
<br /><br />在下面的代码有,有些结构体还不清楚,如THD,st_vio,pollfd等。但可以看出MySQL使用Select模型来接收客户端的连接。而且也在网上查清,unix_sock是指同一机器中不同进程间的通信,如命名管道。而ip_sock指的是不同主机间的通信。<br />voidhandle_connections_sockets()<br />{<br /> my_socketUNINIT_VAR(sock),UNINIT_VAR(new_sock);<br /> uinter原创 2011-06-02 19:40:00 · 1497 阅读 · 0 评论 -
MySQL新增一个连接源码
<br /><br /> 当客户端向服务器发起查询时,就是和服务器之间建立了一个连接。而MySQL是提供了一个最大连接数限制的。所以,每次在一个连接建立成功后,服务器要给该连接分配处理线程的时候会判断现在的连接数是否已经操作了配置的最大连接数了。如果已经超过,则不会再分配线程来处理,直接关闭在连接。<br /> <br />staticvoidcreate_new_thread(THD*thd)<br />{<br /> DBUG_ENTER("create_new_thread");<br /> <原创 2011-06-02 19:10:00 · 978 阅读 · 0 评论 -
mysqld工程学习(一):CHARSET_INFO
<br />CHARSET_INFO结构是很大,本来想了解一下,但是就这样针对一个结构去来解每一项的含义,意义也不时很大。关键还是要看对结构的操作。对于MYSQL的CHARSET_INFO,在网址http://dev.mysql.com/doc/refman/5.1/zh/charset.html有中文的详细介绍。对此了解后,我们也大概可以了解到对该结构会有什么操作,也就大概知道该结构中应该要包含那些属性了。下面是CHARSET_INFO的结构。后面阅读代码是遇见详细操作在讲。<br />typedef s原创 2011-03-19 13:48:00 · 1296 阅读 · 0 评论 -
C++中istream和stringstream的使用
上个项目完成第一个版本开发,写的部分由于是底层SDK。测试的时候没有BUG可改,于是又回到本部门开始做数据库维护的工作。数据库表设计已基本成型,主要是添加或删除一些字段。麻烦的是要为数据库表建立触发器,而且这些触发器功能都一样,就是在数据更新的时候写历史记录。一百多个表,一个一个写不知道写到什么时候,甚至有些表字段就差不多有一百个字段。于是下载一个MySQL的C++连接器,不知道为什么,下源码居然原创 2011-12-14 13:04:03 · 12920 阅读 · 1 评论