你的位置:编程库 >> 资讯 >> MySQL >> mysql教程 >> 详细内容 在线投稿

MySQL中文参考手册---20 MySQL客户工具和API

发布: 2008-7-01 09:00 |  作者: admin |   查看: 13次

MySQL中文参考手册---20 MySQL客户工具和API

【字体:小 大】

MySQL中文参考手册---20 MySQL客户工具和API

作者:不详 文章来源:网络 点击数:6718 更新时间:2007-1-21

20.1MySqlCAPI

CAPI代码是随MySql分发的,它被包含在MySqlclient库且允许C程序存取一个数据库。

在MySql源代码分发中的很多客户是用C编写的。如果你正在寻找演示怎样使用CAPI的例子,看一下这些客户程序。

大多数其他客户API(除了Java的所有)都使用MySqlclient库与MySQL服务器通信。这意味着,例如,你能利用很多被其他客户程序使用的同一环境变量,因为他们从库中引用。对这些变量的一张表,见12.1不同的MySQL程序的概述。

客户有一个最大通讯缓冲区大小。初始分配的缓冲区大小(16K字节)自动地增加到最大尺寸(缺省的最大值是24M)。因为缓冲区大小只是按保证需求而被增加,简单地增加缺省的最大限制并不造成更多被消耗。该尺寸检查主要是一个对错误的查询和通讯包的检查。

通讯缓冲区必须足够大以便一个单独的SQL语句(对客户-服务器传输)和一行返回的数据(对服务器-客户传输)。每个线程的通讯缓冲区被动态扩大到最大限制来处理任何查询或行。例如,如果你包含大到16M数据的BLOB值,你必须有一个至少16M通讯缓冲区限制(在服务器和客户两端)。客户的缺省最大值是24M,但是在服务器端的缺省最大值是1M。你可以在服务器启动时通过改变max_allowed_packet参数的值来改变它。见10.2.3调节服务器参数。

MySQL服务器在每个查询后缩小每个通讯缓冲区到net_buffer_length个字节。对客户,与一个连接相关的缓冲区的大小没被减少,直到连接被关闭,在此时客户内存被回收。

如果你用线程的编程,你应该用--with-thread-safe-client编译MySQLCAPI,这将使CAPI线程对每个连接更安全。你可以让2个线程共享相同的连接,只要如果你做下列事情:两个线程不能同时在同一个连接上发送查询到MySQL。特别是你必须保证在一个mysql_query()和mysql_store_result()之间没有其他线程正在使用同一个连接。许多线程能存取用mysql_store_result()检索出来的不同结果集合。如果你使用mysql_use_result,你必须保证没有其他线程在同一个连接上正在询问任何东西,直到结果集合被关闭。20.2CAPI数据类型MYSQL这个结构表示对一个数据库连接的句柄,它被用于几乎所有的MySQL函数。MYSQL_RES这个结构代表返回行的一个查询的(SELECT,SHOW,DESCRIBE,EXPLAIN)的结果。从查询返回的信息在本章下文称为结果集合。MYSQL_ROW这是一个行数据的类型安全(type-safe)的表示。当前它实现为一个计数字节的字符串数组。(如果字段值可能包含二进制数据,你不能将这些视为空终止串,因为这样的值可以在内部包含空字节)行通过调用mysql_fetch_row()获得。MYSQL_FIELD这个结构包含字段信息,例如字段名、类型和大小。其成员在下面更详细地描述。你可以通过重复调用mysql_fetch_field()对每一列获得MYSQL_FIELD结构。字段值不是这个结构的部分;他们被包含在一个MYSQL_ROW结构中。MYSQL_FIELD_OFFSET这是一个相对一个MySQL字段表的偏移量的类型安全的表示。(由mysql_field_seek()使用。)偏移量是在一行以内的字段编号,从0开始。my_ulonglong该类型用于行编号和mysql_affected_rows()、mysql_num_rows()和mysql_insert_id()。这种类型提供0到1.84e19的一个范围。在一些系统上,试图打印类型my_ulonglong的值将不工作。为了打印出这样的值,将它变换到unsignedlong并且使用一个%lu打印格式。例如:

printf(Numberofrows:%lu\n",(unsignedlong)mysql_num_rows(result));

MYSQL_FIELD结构包含列在下面的成员:char*name字段名,是一个空结尾的字符串。char*table包含该字段的表的名字,如果它不是可计算的字段。对可计算的字段,table值是一个空字符串。char*def这字段的缺省值,是一个空结尾的字符串。只要你使用,只有你使用mysql_list_fields()才可设置它。enumenum_field_typestype字段类型。type值可以是下列之一:类型值类型含义FIELD_TYPE_TINYTINYINT字段FIELD_TYPE_SHORTSMALLINT字段FIELD_TYPE_LONGINTEGER字段FIELD_TYPE_INT24MEDIUMINT字段FIELD_TYPE_LONGLONGBIGINT字段FIELD_TYPE_DECIMALDECIMAL或NUMERIC字段FIELD_TYPE_FLOATFLOAT字段FIELD_TYPE_DOUBLEDOUBLE或REAL字段FIELD_TYPE_TIMESTAMPTIMESTAMP字段FIELD_TYPE_DATEDATE字段FIELD_TYPE_TIMETIME字段FIELD_TYPE_DATETIMEDATETIME字段FIELD_TYPE_YEARYEAR字段FIELD_TYPE_STRING字符串(CHAR或VARCHAR)字段FIELD_TYPE_BLOBBLOB或TEXT字段(使用max_length决定最大长度)FIELD_TYPE_SETSET字段FIELD_TYPE_ENUMENUM字段FIELD_TYPE_NULLNULL-类型字段FIELD_TYPE_CHAR不推荐;使用FIELD_TYPE_TINY代

[8] [9] [10] [11] [12] [13] [14]

打印 | 收藏此页 |  推荐给好友 | 举报
上一篇 下一篇
 

评分:0

发表评论
查看全部回复【已有0位网友发表了看法】