MySQL数据库学习手册之MySQL客户工具和APIWord格式文档下载.docx

上传人:b****5 文档编号:18641628 上传时间:2022-12-30 格式:DOCX 页数:13 大小:22.20KB
下载 相关 举报
MySQL数据库学习手册之MySQL客户工具和APIWord格式文档下载.docx_第1页
第1页 / 共13页
MySQL数据库学习手册之MySQL客户工具和APIWord格式文档下载.docx_第2页
第2页 / 共13页
MySQL数据库学习手册之MySQL客户工具和APIWord格式文档下载.docx_第3页
第3页 / 共13页
MySQL数据库学习手册之MySQL客户工具和APIWord格式文档下载.docx_第4页
第4页 / 共13页
MySQL数据库学习手册之MySQL客户工具和APIWord格式文档下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

MySQL数据库学习手册之MySQL客户工具和APIWord格式文档下载.docx

《MySQL数据库学习手册之MySQL客户工具和APIWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《MySQL数据库学习手册之MySQL客户工具和APIWord格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。

MySQL数据库学习手册之MySQL客户工具和APIWord格式文档下载.docx

如果你使用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

字段名,欢迎光临八一学习网,收藏本篇文章

$False$

是一个空结尾的字符串。

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代替

你可以使用IS_NUM()宏来测试字段是否有一种数字类型。

将type值传给IS_NUM()并且如果字段是数字的,它将计算为TRUE:

if(IS_NUM(field->

type))

printf("

Fieldisnumeric\n"

);

unsignedintlength

字段宽度,在表定义中指定。

unsignedintmax_length

对结果集合的字段的最大宽度(对实际在结果集合中的行的最长字段值的长度)。

如果你使用mysql_store_result()或mysql_list_fields(),这包含字段最大长度。

如果你使用mysql_use_result(),这个变量的值是零。

unsignedintflags

字段的不同位标志。

flags值可以是零个或多个下列位设置:

标志值标志含义

NOT_NULL_FLAG字段不能是NULL

PRI_KEY_FLAG字段是一个主键的一部分

UNIQUE_KEY_FLAG字段是一个唯一键的一部分

MULTIPLE_KEY_FLAG字段是一个非唯一键的一部分。

UNSIGNED_FLAG字段有UNSIGNED属性

ZEROFILL_FLAG字段有ZEROFILL属性

BINARY_FLAG字段有BINARY属性

AUTO_INCREMENT_FLAG字段有AUTO_INCREMENT属性

ENUM_FLAG字段是一个ENUM(不推荐)

BLOB_FLAG字段是一个BLOB或TEXT(不推荐)

TIMESTAMP_FLAG字段是一个TIMESTAMP(不推荐)

BLOB_FLAG、ENUM_FLAG和TIMESTAMP_FLAG标志的使用是不推荐的,因为他们指出字段的类型而非它的类型属性。

欢迎光临八一学习网,收藏本篇文章

对FIELD_TYPE_BLOB、FIELD_TYPE_ENUM或FIELD_TYPE_TIMESTAMP,最好是测试field->

type。

下面例子演示了一个典型的flags值用法:

if(field->

flags&

NOT_NULL_FLAG)

Fieldcan'

tbenull\n"

你可以使用下列方便的宏决来确定flags值的布尔状态:

IS_NOT_NULL(flags)真,如果该字段被定义为NOTNULL

IS_PRI_KEY(flags)真,如果该字段是一个主键

IS_BLOB(flags)真,如果该字段是一个BLOB或TEXT(不推荐;

相反测试field->

type)

unsignedintdecimals

对数字字段的小数位数。

20.3CAPI函数概述

在CAPI中可用的函数列在下面,并且在下一节更详细地描述。

见20.4CAPI函数描述。

mysql_affected_rows()返回被最新的UPDATE,DELETE或INSERT查询影响的行数。

mysql_close()关闭一个服务器连接。

mysql_connect()连接一个MySQL服务器。

该函数不推荐;

使用mysql_real_connect()代替。

mysql_change_user()改变在一个打开的连接上的用户和数据库。

mysql_create_db()创建一个数据库。

而使用SQL命令CREATEDATABASE。

mysql_data_seek()在一个查询结果集合中搜寻一任意行。

mysql_debug()用给定字符串做一个DBUG_PUSH。

mysql_drop_db()抛弃一个数据库。

该函数

123456789不推荐;

而使用SQL命令DROPDATABASE。

mysql_dump_debug_info()让服务器将调试信息写入日志文件。

mysql_eof()确定是否已经读到一个结果集合的最后一行。

这功能被反对;

mysql_errno()或mysql_error()可以相反被使用。

mysql_errno()返回最近被调用的MySQL函数的出错编号。

mysql_error()返回最近被调用的MySQL函数的出错消息。

mysql_escape_string()用在SQL语句中的字符串的转义特殊字符。

mysql_fetch_field()返回下一个表字段的类型。

mysql_fetch_field_direct()返回一个表字段的类型,给出一个字段编号。

对与每个非--SELECT查询(例如,INSERT、UPDATE、DELETE等),你可以调用mysql_affected_rows()知道有多少行受到影响(改变)。

对于SELECT查询,你作为一个结果集合来检索选择的行。

(注意一些语句是类SELECT的,他们返回行。

这些包括SHOW、DESCRIBE和EXPLAIN。

他们应该象SELECT语句相同的方式来对待。

对客户,有两种方法处理结果集合。

一种方法是通过调用mysql_store_result()立刻

检索全部结果。

该函数从服务器获得查询返回的所有行,并将他们存储在客户端。

第二种方法是对客户通过调用mysql_use_result()初始化一个一行一行地结果集合的检索。

该函数初始化检索,但是实际上不从服务器获得任何行。

在两种情况中,你通过mysql_fetch_row()存取行。

用mysql_store_result()、mysql_fetch_row()储存取已经从服务器被取出的行。

用mysql_use_result()、mysql_fetch_row()实际上从服务器检索行。

调用mysql_fetch_lengths()可获得关于每行中数据值尺寸的信息。

在你用完一个结果集合以后,调用mysql_free_result()释放由它使用的内存。

两种检索机制是互补的。

客户程序应该选择最适合他们的要求的途径。

在实践中,客户通常更愿意使用mysql_store_result()。

mysql_store_result()的一个优点是既然行均被客户取到,你不仅能顺序存取行,你也能mysql_data_seek()或mysql_row_seek()在结果集合中前后移动以改变在结果集合中的当前行位置。

你也能通过调用mysql_num_rows()知道有多少行。

另一方面,mysql_store_result()的内存需求对较大结果集合可能很高,并且你最可能遇到out-of-memory情况。

mysql_use_result()的一个优点是客户为结果集合需要较少的内存,因为它一次只是维持一行(并且因为有较少的分配开销,mysql_use_result()能更快些)。

欢迎光临八一学习网,点击这里查看更多文章教程

缺点是你必须尽快处理每一行以避免困住服务器,你不必再结果集合中随意存取行(你只能顺序存取行),而且你不知道在结果集合中有多少行,直到你检索全部结果。

还有,你必须检索出所有行,即使你在检索中途确定你已找到了想寻找的信息。

API使得客户正确应答查询成为可能(仅检索必要的行),不用知道查询是否是一个SELECT。

你可以通过在mysql_query()(或mysql_real_query())之后调用mysql_store_result()做到。

如果结果集合调用成功并且查询是一个SELECT,你能读取行。

如果结果集合调用,调用mysql_field_count()确定结果是否是实际期望的。

如果mysql_field_count()返回0,查询没有返回数据(表明它是一个INSERT、UPDATE、DELETE等),所以不期望返回行。

如果mysql_field_count()是非零,查询应该有返回行,但是没有。

这表明查询是一个失败的SELECT。

见mysql_field_count()如何能做到的例子的描述。

<

20.4.2.2返回值

没有。

20.4.2.3错误

CR_COMMANDS_OUT_OF_SYNC

命令以一个不正确的次序被执行。

CR_SERVER_GONE_ERROR

MySQL服务器关闭了。

CR_SERVER_LOST

对服务者的连接在查询期间失去。

CR_UNKNOWN_ERROR

发生一个未知的错误。

20.4.3mysql_connect()

MYSQL*mysql_connect(MYSQL*mysql,constchar*host,constchar*user,constchar*passwd)

20.4.3.1说明

该函数不推荐使用,而更好使用mysql_real_connect()。

mysql_connect()试图建立一个对运行在host的一个MySQL数据库引擎的连接。

mysql_connect()必须在你能执行其他API函数之前成功地完成,除了mysql_get_client_info()。

参数的含义与mysql_connect()相应的参数相同,不同的是连接参数可以是NULL。

在这种情况下,CAPI

自动为连接结构分配内存,并且当你调用mysql_close(),释放它。

这种方法的缺点是如果连接失败,你不能检索出一条错误消息。

(为了从mysql_errno()或mysql_error()得到错误信息,你必须提供一个有效的MYSQL指针。

20.4.3.2返回值

同mysql_real_connect()。

20.4.3.3错误

20.4.4mysql_change_user()

my_boolmysql_change_user(MYSQL*mysql,constchar*user,constchar*password,constchar*db)

20.4.4.1说明

改变用户并且使得由db指定数据库成为由mysql指定的连接上的缺省(当前)数据库。

在随后的查询中,这个数据库是不包括一个明确的数据库指定符的表引用的缺省值。

这个函数功能在MySQL3.23.3中引入。

除非连接的用户能被认证或如果他没有权限使用数据库,mysql_change_user()失败。

在这种情况下,用户和数据库都没被改变。

如果你不想有一个缺省本文关键字:

20.4.8.3错误

20.4.8.4范例

if(mysql_drop_db(&

mysql,"

my_database"

))

fprintf(stderr,"

Failedtodropthedatabase:

Error:

%s\n"

mysql_error(&

mysql));

20.4.9mysql_dump_debug_info()

intmysql_dump_debug_info(MYSQL*mysql)

20.4.9.1说明

指示服务者将一些调试信息写入日志文件。

连接的用户对此必须有precess权限才能工作。

20.4.9.2返回值

如果命令成功,零。

如果发生一个错误,非零。

20.4.9.3错误

MySQL服务者关闭了。

对服务器的连接在查询期间失去。

 

20.4.10mysql_eof()

my_boolmysql_eof(MYSQL_RES*result)

20.4.10.1说明

这个函数不推荐,而使用mysql_errno()或mysql_error()。

mysql_eof()确定是否已经读到了一个结果集合的最后一行。

如果你从成功的mysql_store_result()调用获得一个结果集合,客户程序用一个操作收到全部集合。

在这种情况下,从mysql_fetch_row()返回一个NULL总是意味着已经到达了结果集合的尾部,没必要调用mysql_eof()。

在另一方面,如果你使用mysql_use_result()初始化一个结果集合的检索,该集合的行随着你重复调用mysql_fetch_row()一个一个地从服务器获得。

因为在这个过程中在连接上可能发生一个错误,从mysql_fetch_row()返回一个NULL值并不意味着集合正常到达了尾部。

在这种情况下,你能使用mysql_eof()确定发生了什么。

如果到达结果集合的尾部,mysql_eof()返回非零值,并且如果发生一个错误,返回零。

在时间上,mysql_eof()先于标准MySQL错误函数mysql_errno()和mysql_error()。

因为这些错误函数提供相同的信息,他们的使用更好本文关键字:

20.4.13.2范例

c

harquery,*end;

end=strmov(query,"

INSERTINTOtest_tablevalues("

*end++='

'

;

end+=mysql_escape_string(end,"

What'

sthis"

11);

'

binarydata:

\0\r\n"

16);

)'

if(mysql_real_query(&

mysql,query,(unsignedint)(end-query)))

{

fprintf(stderr,"

Failedtoinsertrow,Error:

}

例子中所用的strmov()函数被包括在mysqlclient库中且功能类似于strcpy(),但是返回一个指向空终止的第一个参数的指针。

20.4.13.3返回值

放进to的值的长度,不包括

123456789终止空字符。

20.4.13.4错误

无。

20.4.14mysql_fetch_field()

MYSQL_FIELD*mysql_fetch_field(MYSQL_RES*result)

20.4.14.1说明

返回作为一个MYSQL_FIELD结构的一个结果集合的一个列的定义。

重复调用这个函数在结果集合中检索所有关于列的信息。

当没有剩下更多的字段时,mysql_fetch_field()返回NULL。

在每次你执行一个新的SELECT查询,mysql_fetch_field()被重置(reset)以返回有关第一列的信息。

由mysql_fetch_field()返回的字段也受调用mysql_field_seek()的影响。

如果你调用mysql_query()在一张表上执行一个SELECT,但是没调用mysql_store_result(),如果你调用mysql_fetch_field()询问一个BLOB字段的长度,MySQL返回缺省BLOB长度(8K字节)。

(选择8K的长度是因为MySQL不知道BLOB的最大长度。

这应该在某个时候是它可配置)一旦你已经检索了结果集合,field->

max_length包含了在特定查询中对于该列最大值的长度。

20.4.14.2返回值

当前列的MYSQL_FIELD结构。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1