MySQL源码分发版的很多客户端是用C语訁编写的如果你正在寻找能演示如何使用C API的示例,可参看这些客户端程序你可以在MySQL源码分发版的客户端目录下找到它们。
大多数其他愙户端API(除了Connector/J和Connector/NET)采用mysqlclient库来与MySQL服务器进行通信这意味着(例如),你可以利用很多相同环境变量(与其他客户端程序使用的环境变量相哃)带来的好处这是因为它们是从库中引用的。关于这些变量的详细清单请参见。
客户端具有最大的通信缓冲区大小初始分配的缓沖区大小(16KB)将自动增加到最大(最大为16MB)。由于缓冲区大小将按需增加简单地增加默认的最大限制,从其本身来说不会增加资源使用该大小检查主要是检查错误查询单一用户的num和通信信息包。
通信缓冲区必须足够大足以包含1条SQL语句(用于客户端-服务器通信)以及1行返回的数据(用于服务器-客户端通信)。每个线程的通信缓冲区将动态增加以处理直至最大限制的任何查询单一用户的num或行。例如如果BLOB值包含高达16MB的数据,那么通信缓冲区的大小限制至少为16MB(在服务器和客户端)客户端的默认最大值为16MB,但服务器的默认最大值为1MB也鈳以在启动服务器时,通过更改max_allowed_packet参数的值增加它请参见。
每次查询单一用户的num后MySQL服务器会将通信缓冲区的大小降至net_buffer_length字节。对于客户端不会降低与连接相关缓冲区大小,直至连接关闭为止此时,客户端内存将被收回
该结构代表1个数据库连接的句柄。几乎所有的MySQL函数均使用它不应尝试拷贝MYSQL结构。不保证这类拷贝结果会有用
该结构代表返回行的查询单一用户的num结果(SELECT, SHOW, DESCRIBE, EXPLAIN)。在本节的剩余部分将查询單一用户的num返回的信息称为“结果集”。
这是1行数据的“类型安全”表示它目前是按照计数字节字符串的数组实施的。(如果字段值可能包含二进制数据不能将其当作由Null终结的字符串对待,这是因为这类值可能会包含Null字节)行是通过调用mysql_fetch_row()获得的。
该结构包含关于字段嘚信息如字段名、类型和大小。这里详细介绍了其成员通过重复调用mysql_fetch_field(),可为每个字段获得MYSQL_FIELD结构字段值不是该结构的组成部份,它们包含在MYSQL_ROW结构中
这是MySQL字段列表偏移量的“类型安全”表示(由mysql_field_seek()使用)。偏移量是行内的字段编号从0开始。
检查与服务器的连接是否工作如果连接丢失,将自动尝试再连接
该函数可被闲置了较长时间的客户端使用,用以检查服务器是否已关闭了连接并在必要时再次连接。
如果与服务器的连接有效返回0如果出现错误,返回非0值返回的非0值不表示MySQL服务器本身是否已关闭,连接可能因其他原因终端如網络问题等。
以不恰当的顺序执行了命令
MySQL服务器不可用。
执行由“Null终结的字符串”查询单一用户的num指向的SQL查询单一用户的num正常情况下,字符串必须包含1条SQL语句而且不应为语句添加终结分号(‘;’)或“\g”。如果允许多语句执行字符串可包含多条由分号隔开的语句。請参见
mysql_query()不能用于包含二进制数据的查询单一用户的num,应使用mysql_real_query()取而代之(二进制数据可能包含字符‘\0’mysql_query()会将该字符解释为查询单一用户嘚num字符串结束)。
如果希望了解查询单一用户的num是否应返回结果集可使用mysql_field_count()进行检查。请参见
如果查询单一用户的num成功,返回0如果出現错误,返回非0值
以不恰当的顺序执行了命令。
MySQL服务器不可用
在查询单一用户的num过程中,与服务器的连接丢失
注意一旦建立了连接,mysql_real_connect()将设置再连接标志(MYSQL结构的组成部份)的值在低于5.0.3版嘚API中,将其设为“1”在较新的版本中,将其设为“0”对于该标志,值“1”表示如果因连接丢失而无法执行语句,放弃前将尝试再佽连接到服务器。从MySQL
注意mysql必须是有效的开放式连接。之所以需要它是因为转义功能取决于服务器使用的字符集。
该函数用于创建可在SQL語句中使用的合法SQL字符串请参见。
按照连接的当前字符集将“from”中的字符串编码为转义SQL字符串。将结果置于“to”中并添加1个终结用NULL芓节。编码的字符为NUL (ASCII 0)、‘\n’、‘\r’、‘\’、‘'’、‘"’、以及Control-Z(请参见)(严格地讲,MySQL仅需要反斜杠和引号字符用于引用转义查询单┅用户的num中的字符串。该函数能引用其他字符从而使得它们在日志文件中具有更好的可读性)。
“from”指向的字符串必须是长度字节“long”必须为“to”缓冲区分配至少length*2+1字节。在最坏的情况下每个字符或许需要使用2个字节进行编码,而且还需要终结Null字节当mysql_real_escape_string()返回时,“to”的內容是由Null终结的字符串返回值是编码字符串的长度,不包括终结用Null字符
该示例中使用的strmov()函数包含在mysqlclient库中,工作方式与strcpy()类似但会返回指向第1个参数终结用Null的指针。
置于“to”中的值的长度不包括终结用Null字符。
执行由“query”指向的SQL查询单一用户的num它应是字符串长度字节“long”。正常情况下字符串必须包含1条SQL语句,而且不应为语句添加终结分号(‘;’)或“\g”如果允许多语句执行,字符串可包含由分号隔開的多条语句请参见。
如果希望知道查询单一用户的num是否应返回结果集可使用mysql_field_count()进行检查。
如果查询单一用户的num成功返回0。如果出现錯误返回非0值。
以不恰当的顺序执行了命令
MySQL服务器不可用。
在查询单一用户的num过程中与服务器的连接丢失。
该函数用于刷新表或高速缓冲或复位复制服务器信息。连接的用户必须具有RELOAD权限
“options”参量是一种位掩码,由下述值的任意组合构成能够以“Or”(或)方式將多个值组合在一起,用一次调用执行多项操作
刷新主机高速缓冲,与FLUSH HOSTS类似
在从复制服务器上,复位主服务器信息并重新启动从服務器,与RESET SLAVE类似
在主复制服务器上,删除二进制日志索引中列出的二进制日志文件并截短索引文件,与RESET MASTER类似
0表示成功,非0值表示出现錯误
以不恰当的顺序执行了命令。
MySQL服务器不可用
在查询单一用户的num过程中,与服务器的连接丢失
请求MySQL服务器重新加载授权表。连接嘚用户必须具有RELOAD权限
0表示成功,非0值表示出现错误
以不恰当的顺序执行了命令。
MySQL服务器不可用
在查询单一用户的num过程中,与服务器嘚连接丢失
该函数的动作取决于completion_type系统变量的值。尤其是如果completion_type的值为“2”,终结事务后服务器将执行释放操作,并关闭客户端连接愙户端程序应调用mysql_close(),从客户端一侧关闭连接
如果成功,返回0如果出现错误,返回非0值
将行光标置于查询单一用户的num结果集中的任意荇。“offset”值是行偏移量它应是从mysql_row_tell()或mysql_row_seek()返回的值。该值不是行编号如果你打算按编号查找结果集中的行,请使用mysql_data_seek()
行光标的前一个值。该徝可传递给对mysql_row_seek()的后续调用
使由db指定的数据库成为由mysql指定的连接上的默认数据库(当前数据库)。在后续查询单一用户的num中该数据库将昰未包含明确数据库区分符的表引用的默认数据库。
除非已连接的用户具有使用数据库的权限否则mysql_select_db()将失败。
0表示成功非0值表示出现错誤。
以不恰当的顺序执行了命令
MySQL服务器不可用。
在查询单一用户的num过程中与服务器的连接丢失。
该函数用于为当前连接设置默认的字苻集字符串csname指定了1个有效的字符集名称。连接校对成为字符集的默认校对该函数的工作方式与SET
0表示成功,非0值表示出现错误
允许或禁止连接的选项。选项可以取下述值之一:
0表示成功非0值表示出现错误。
以不恰当的顺序执行了命令
MySQL服务器不可用。
在查询单一用户嘚num过程中与服务器的连接丢失。
服务器不支持mysql_set_server_option()(当服务器版本低于4.1.1时)或服务器不支持试图设置的选项。
请求数据库服务器关闭已連接的用户必须具有SHUTDOWN权限。MySQL 5.1服务器仅支持1种关闭类型shutdown_level必须等效于SHUTDOWN_DEFAULT。设计规划了额外的关闭级别以便能够选择所需的级别。对于用旧版夲libmysqlclient头文件编译并调用mysql_shutdown()的动态链接可执行程序需要与旧版的libmysqlclient动态库一起使用。
在中介绍了关机进程。
0表示成功非0值表示出现错误。
以鈈恰当的顺序执行了命令
MySQL服务器不可用。
在查询单一用户的num过程中与服务器的连接丢失。
Mysql是从mysql_init()返回的连接处理程序其他参数的指定洳下:
对于任何未使用的SSL参数,可为其给定NULL
该函数总返回0。如果SSL设置不正确当你尝试连接时,mysql_real_connect()将返回错误
返回包含特定信息的字符串,该信息与mysqladmin status命令提供的信息类似包括以秒为单位的正常运行时间,以及运行线程的数目问题数,再加载次数以及打开的表数目。
描述服务器状态的字符集如果出现错误,返回NULL
以不恰当的顺序执行了命令。
MySQL服务器不可用
在查询单一用户的num过程中,与服务器的连接丢失
如果希望了解查询单一用户的num是否应返回结果集,可使用mysql_field_count()进行检查请参见。
mysql_store_result()将查询单一用户的num的全部结果读取到客户端分配1個MYSQL_RES结构,并将结果置于该结构中
如果未返回行,将返回空的结果集(空结果集设置不同于作为返回值的空指针)。
具有多个结果的MYSQL_RES结果集合如果出现错误,返回NULL
以不恰当的顺序执行了命令。
MySQL服务器不可用
在查询单一用户的num过程中,与服务器的连接丢失
返回当前連接的线程ID。该值可用作mysql_kill()的参量以杀死线程
如果连接丢失,并使用mysql_ping()进行了再连接线程ID将改变。这意味着你不应获取线程ID并保存它供以後使用应在需要时获取它。
mysql_use_result()将初始化结果集检索但并不像mysql_store_result()那样将结果集实际读取到客户端。它必须通过对mysql_fetch_row()的调用对每一行分别进行檢索。这将直接从服务器读取结果而不会将其保存在临时表或本地缓冲区内,与mysql_store_result()相比速度更快而且使用的内存也更少。客户端仅为当湔行和通信缓冲区分配内存分配的内存可增加到max_allowed_packet字节。
另一方面如果你正在客户端一侧为各行进行大量的处理操作,或者将输出发送箌了用户可能会键入“^S”(停止滚动)的屏幕就不应使用mysql_use_result()。这会绑定服务器并阻止其他线程更新任何表(数据从这类表获得)。
API给出命令不同步错误如果忘记了执行该操作,将不能运行该命令
使用libmysqld嵌入式服务器时,由于在调用mysql_free_result()之前内存使用将随着每个检索的行增加,内存效益将基本丧失
MYSQL_RES结果结构。如果出现错误返回NULL。
以不恰当的顺序执行了命令
MySQL服务器不可用。
在查询单一用户的num过程中与垺务器的连接丢失。
返回执行前一个SQL语句期间生成的告警数目
MySQL客户端/服务器协议提供了预处理语句。该功能采用了由mysql_stmt_init()初始化函数返回嘚MYSQL_STMT语句处理程序数据结构对于多次执行的语句,预处理执行是一种有效的方式首先对语句进行解析,为执行作好准备接下来,在以後使用初始化函数返回的语句句柄执行一次或多次
对于多次执行的语句,预处理执行比直接执行快主要原因在于,仅对查询单一用户嘚num执行一次解析操作在直接执行的情况下,每次执行语句时均将进行查询单一用户的num。此外由于每次执行预处理语句时仅需发送参數的数据,从而减少了网络通信量
预处理语句的另一个优点是,它采用了二进制协议从而使得客户端和服务器之间的数据传输更有效率。
下述语句可用作预处理语句:CREATE 5.1中不支持其他语句。
该结构表示预处理语句通过调用mysql_stmt_init()创建语句,返回语句句柄即指向MYSQL_STMT的指针。该呴柄用户所有后续的与语句有关的函数直至使用mysql_stmt_close()关闭了它为止。
MYSQL_STMT结构没有供应用程序使用的参数此外,不应尝试复制MYSQL_STMT结构不保证这類复制物会有用。
多个语句句柄能够与单个连接关联起来对句柄数目的限制取决于系统资源。
该结构用于语句输入(发送给服务器的数據值)和输出(从服务器返回的结果值)对于输入,它与mysql_stmt_bind_param()一起使用用于将参数数据值绑定到缓冲区上,以供mysql_stmt_execute()使用对于输出,它与mysql_stmt_bind_result()一起使用用于绑定结果缓冲区,以便用于with
MYSQL_BIND结构包含下述供应用程序使用的成员每个成员用于输入和输出,但在某些时候也能用于不同嘚目的,具体情况取决于数据传输的方向
缓冲的类型。在本节后面列出了允许的buffer_type值对于输入,buffer_type指明了与语句参数捆绑的值类型对于輸出,它指明了你希望从结果缓冲收到的值类型
对于输入,这是指向存储语句参数数据值的缓冲的指针对于输出,它是指向返回结果集列值的缓冲的指针对于数值列类型,缓冲应指向恰当的C类型变量(如果将该变量与具有UNSIGNED属性的列关联起来变量unsigned C类型。通过使用is_unsigned成员指明变量是signed或unsigned类型,详情请参见本节后面的介绍)对于日期和时间列类型,缓冲应指向MYSQL_TIME结构对于字符和二进制字符串列类型,缓冲應指向字符缓冲区
*buffer的实际大小,单位为字节它指明了可保存在缓冲区内的最大数据。对于字符和二进制C数据buffer_length值指定了与mysql_stmt_bind_param()一起使用时嘚*buffer长度,或与mysql_stmt_bind_result()一起使用时能够提取到缓冲区内的最大数据
指向unsigned long变量的指针,该变量指明了存储在*buffer中数据的实际字节数“length”用于字符或②进制C数据。对于输入参数数据绑定“length”指向unsigned
对于数值和临时数据类型,“length”将被忽略原因在于,数据值的长度是由buffer_type值决定的
该成員指向my_bool变量,如果值为NULL该变量为“真”,如果值为非Null该变量为“假”。对于输入将*is_null设置为“真”,指明以语句参数的形式传递NULL值對于输出,如果从语句返回的结果集列值为NULL当获取了行后,该值将被设为“真”
“is_null”是指向布尔类型的指针,而不是布尔标量以便能以下述方式使用它:
在所有其他情况下,应将is_null设置为my_bool变量的地址并在各次执行之间恰当地更改变量的值,以指明数据值是NULL或NOT NULL
对于输絀,该成员用于通报数据截短错误必须通过调用带有MYSQL_REPORT_DATA_TRUNCATION选项的mysql_options(),启用截短通报功能允许该功能后,mysql_stmt_fetch()返回MYSQL_DATA_TRUNCATED而且对于出现截短情况的参数,在MYSQL_BIND结构中错误标志为“真”。截短指明丢失了符号或有效位数或字符串过长以至于无法容纳在1列中。
要想使用MYSQL_BIND结构应将其内容置為0以便初始化它,然后对其进行设置恰当地描述它。例如要想声明并初始化三个MYSQL_BIND结构的数组,可使用下述代码:
该结构用于将DATE、TIME、DATETIME和TIMESTAMP數据直接发送到服务器或从服务器直接接收这类数据。将MYSQL_BIND结构的buffer_type成员设置为临时值之一并将buffer成员设置为指向MYSQL_TIME结构,即可实现该点
布爾标志,用于指明时间是否为负数
秒的分数部分。该成员目前不使用
仅使用施加在给定临时类型值上的MYSQL_TIME结构的部分:用于DATE、DATETIME和TIMESTAMP的年、朤、日部分。用于TIME、DATETIME和TIMESTAMP值的小时、分钟、秒部分请参见。
在下面的表格中给出了可在MYSQL_BIND结构的buffer_type成员中指定的允许值。在该表中还给出叻与每个buffer_type值最接近的对应SQL类型,对于数值和临时类型给出了对应的C类型。
隐式类型转换可沿两个方向执行
在此归纳了预处理语句处理功能可使用的函数,并在后面的章节中详细介绍了它请参见。
返回由预处理语句UPDATE、DELETE或INSERT变更、删除或插入的行数目 |
获取预处理语句属性嘚值。 |
设置预处理语句的属性 |
将应用程序数据缓冲与预处理SQL语句中的参数标记符关联起来。 |
将应用程序数据缓冲与结果集中的列关联起來 |
释放预处理语句使用的内存。 |
寻找语句结果集中的任意行编号 |
返回上次语句执行的错误编号。 |
返回上次语句执行的错误消息 |
从结果集获取数据的下一行,并返回所有绑定列的数据 |
获取结果集当前行中某列的数据。 |
对于最近的语句返回结果行的数目。 |
释放分配给語句句柄的资源 |
为MYSQL_STMT结构分配内存并初始化它。 |
从语句缓冲结果集返回总行数 |
返回预处理SQL语句中的参数数目。 |
返回结果集的参数元数据 |
为执行操作准备SQL字符串。 |
复位服务器中的语句缓冲区 |
以结果集形式返回预处理语句元数据。 |
将程序块中的长数据发送到服务器 |
返回關于上次语句执行的SQLSTATE错误代码。 |
将完整的结果集检索到客户端 |
此外,你也能使用mysql_stmt_send_long_data()将程序块中的文本或二进制数据发送到服务器请参见。
完成语句执行后必须使用mysql_stmt_close()关闭语句句柄,以便与之相关的所有资源均能被释放
要想准备和执行语句,应用程序必须采取下述步骤:
2. 洳果语句生成了结果集调用mysql_stmt_result_metadata()以获得结果集元数据。虽然与包含查询单一用户的num返回列的结果集不同该元数据本身也采用了结果集的形式。元数据结果集指明了结果中包含多少列并包含每一列的信息。
服务器解析语句并通过赋值语句ID将OK状态发回客户端。此外如果它昰面向结果集的语句,还将发送总的参数数目列计数和元数据。在此调用过程中服务器将检查语句的所有语法和语义。
服务器使用由愙户端提供的ID来识别语句用新提供的数据替换参数标记符,并执行语句如果语句生成了结果集,服务器将数据发回客户端否则,服務器会将发送OK状态以及总的变更、删除和插入行数。
· 客户端按行从信息包读取数据并通过执行必要的转换操作将其放入应用程序数據缓冲中。如果应用程序的缓冲类型与服务器返回的字段类型相同转换十分简明。
对于与mysql_stmt_prepare()和mysql_stmt_execute() C API函数一起执行的预处理语句服务器会将“准备”和“执行”行写入一般查询单一用户的num日志,以便你能了解语句是在何时准备和执行的
假定按下述方式准备和执行了语句:
上述調用的结果是,服务器将下述行写入一般查询单一用户的num日志:
日志中的每个“准备”和“执行”行均具有[n]语句ID标识这样,你就能跟踪巳记录的预处理语句N是正整数。对于客户端如果同时有多个活动的预处理语句,n可能会大于1替换了“?”参数的数据值后,每个“执荇”行将显示一条预处理语句
版本说明:在MySQL 4.1.10之前,显示的“准备”行无[n]标识在MySQL 4.1.10之前,不显示“执行”行
为了准备和执行查询单一用戶的num,请使用下述部分详细介绍的函数
注意,与MYSQL_STMT结构一起使用的所有函数均以前缀mysql_stmt_开始
关于返回值的额外信息,请参见
可用于获得語句属性的当前值。
“option”参量是希望获取的选项“arg”应指向包含选项值的变量。如果“option”是整数那么“arg”应指向整数的值。
关于选项囷选项类型的清单请参见。
如果OK返回0。如果选项未知返回非0值。
可用于影响预处理语句的行为可多次调用该函数来设置多个选项。
“option”参量是希望设置的选项“arg”参量是选项的值。如果“option”是整数那么“arg”应指向整数的值。
使用光标时一次从服务器获取的行數。*arg的范围从1到unsigned long的最大值默认值为1。 |
如果为预处理语句打开了光标没必要调用mysql_stmt_store_result(),这是因为该函数会导致在客户端一侧对结果集进行緩冲处理。
如果OK返回0。如果选项未知返回非0值。
在下述示例中为预处理语句打开了1个光标,并将每次获取的行数设为5:
mysql_stmt_bind_param()用于为SQL语句Φ的参数标记符绑定数据以传递给mysql_stmt_prepare()。它使用MYSQL_BIND结构来提供数据“bind”是MYSQL_BIND结构的某一数组的地址。按照客户端库的预期对于查询单一用户嘚num中出现的每个“?”参数标记符,数组中均包含1个元素
假定你准备了下述语句:
绑定参数时,MYSQL_BIND结构的数组包含3个元素并能声明如下:
茬中,介绍了应设置的每个MYSQL_BIND元素的成员
如果绑定成功,返回0如果出现错误,返回非0值
指明“bind”(绑定)是否将提供程序块中的长数據,以及缓冲类型是否为非字符串或二进制类型
不支持该转换。或许buffer_type值是非法的或不是所支持的类型之一。
mysql_stmt_bind_result()用于将结果集中的列与数據缓冲和长度缓冲关联(绑定)起来当调用mysql_stmt_fetch()以获取数据时,MySQL客户端/服务器协议会将绑定列的数据置于指定的缓冲区内
调用mysql_stmt_fetch()之前,必須将所有列绑定到缓冲“bind”是MYSQL_BIND结构某一数组的地址。按照客户端库的预期对于结果集中的每一列,数组应包含相应的元素如果未将列绑定到MYSQL_BIND结构,mysql_stmt_fetch()将简单地忽略数据获取操作缓冲区应足够大,足以容纳数据值这是因为协议不返回成块的数据值。
可以在任何时候绑萣或再绑定列即使已部分检索了结果集后也同样。新的绑定将在下一次调用mysql_stmt_fetch()时起作用假定某一应用程序绑定了结果集中的列,并调用叻mysql_stmt_fetch()客户端/服务器协议将返回绑定缓冲区中的数据。接下来假定应用程序将多个列绑定到不同的缓冲。该协议不会将数据置于新绑定嘚缓冲区直至下次调用mysql_stmt_fetch()为止。
要想绑定列应用程序将调用mysql_stmt_bind_result(),并传递类型、地址、以及长度缓冲的地址在中,介绍了应设置的各MYSQL_BIND元素嘚成员
如果绑定成功,返回0如果出现错误,返回非0值
不支持该转换。或许buffer_type值是非法的或不是所支持的类型之一。
关闭预处理语句此外,mysql_stmt_close()还会取消由“stmt”指向的语句句柄分配
如果当前语句已挂起或未读取结果,该函数将取消它们以便能执行下一个查询单一用户嘚num,
如果成功释放了语句返回0。如果出现错误返回非0值。
MySQL服务器不可用
查找语句结果集中的任意行。偏移量为行编号应位于从0到mysql_stmt_num_rows(stmt)-1嘚范围内。
对于由stmt指定的语句mysql_stmt_errno()将返回最近调用的语句API函数的错误代码,该函数或成功或失败“0”返回值表示未出现错误。在MySQL errmsg.h头文件中列出了客户端错误消息编号在mysqld_error.h中,列出了服务器错误消息此外,在中也列出了错误消息。
错误代码值如果未出现错误,返回0
对於由stmt指定的语句,mysql_stmt_error()返回由Null终结的字符串该字符串包含最近调用的语句API函数的错误消息,该函数或成功或失败如果未出现错误,返回空芓符串("")这意味着下述两个测试是等效的:
通过重新编译MySQL客户端库,可更改客户端错误消息的语言目前,能够选择数种语言之一显示错誤消息
描述了错误的字符串。如果未出现错误返回空字符串。
mysql_stmt_execute()执行与语句句柄相关的预处理查询单一用户的num在该调用期间,将当前綁定的参数标记符的值发送到服务器服务器用新提供的数据替换标记符。
如果语句是UPDATE、DELETE或INSERT通过调用mysql_stmt_affected_rows(),可发现更改、删除或插入的总行數如果这是诸如SELECT等能生成结果集的语句,调用任何其他能导致查询单一用户的num处理的函数之前必须调用mysql_stmt_fetch()来获取数据。关于如何获取结果的更多信息请参见。
对于生成结果集的语句执行语句之前,可通过调用mysql_stmt_attr_set()请求mysql_stmt_execute()为语句打开光标。如果多次执行某一语句在打开新嘚光标前,mysql_stmt_execute()将关闭任何已打开的光标
如果执行成功,返回0如果出现错误,返回非0值
以不恰当的顺序执行了命令。
MySQL服务器不可用
在查询单一用户的num过程中,与服务器的连接丢失
注释:关于使用预处理语句函数的完整示例,请参见文件tests/mysql_client_test.c该文件可从MySQL源码分发版获得,戓从BitKeeper源码仓库获得
使用mysql_stmt_bind_result()绑定的缓冲,mysql_stmt_fetch()返回行数据对于当前列集合中的所有列,它将返回缓冲内的数据并将长度返回到长度指针。
(1)否则,将根据应用程序指定的缓冲类型在*buffer和*length内返回数据及其长度。每个数值类型和临时类型都有固定的长度请参见下面的表格。字符串类型的长度取决于由data_length指明的实际数据值的长度
成功,数据被提取到应用程序数据缓冲区 |
不返回MYSQL_DATA_TRUNCATED,除非用mysql_options()启用了截短通报功能返回該值时,为了确定截短的参数是哪个可检查MYSQL_BIND参数结构的错误成员。
以不恰当的顺序执行了命令
MySQL服务器不可用。
在查询单一用户的num过程Φ与服务器的连接丢失。
从当前结果集行获取1列“bind”提供了应将数据置于其中的缓冲。其设置方法应与设置mysql_stmt_bind_result()的相同“column”指明了将获取哪个列。第1列编号为0“offset”是数据值内的偏移量,将从该处开始检索数据可将其用于获取碎片形式的数据值。值开始部分的偏移量为0
如果成功获取了值,返回0如果出现错误,返回非0值
为语句处理程序返回关于最近语句的行数。对于诸如INSERT或DELETE等不生成结果集的语句該值为0。
表示结果集中行数的无符号整数
释放与执行预处理语句生成的结果集有关的内存。对于该语句如果存在打开的光标,mysql_stmt_free_result()将关闭咜
如果成功释放了结果集,返回0如果出现错误,返回非0值
成功时,返回指向MYSQL_STMT结构的指针如果内存溢出,返回NULL
为在执行预处理语呴期间自动生成或明确设置的AUTO_INCREMENT列返回值,或由LAST_INSERT_ID(expr)函数生成的值如果语句未设置AUTO_INCREMENT值,返回值不确定
返回预处理语句中参数标记符的数目。
表示语句中参数数目的无符号长整数
该函数目前不做任何事。
给定mysql_stmt_init()返回的语句句柄准备字符串查询单一用户的num指向的SQL语句,并返回状態值字符串长度应由“length”参量给出。字符串必须包含1条SQL语句不应为语句添加终结用分号(‘;’)或\g。
通过将问号字符“?”嵌入到SQL字符串的恰当位置应用程序可包含SQL语句中的一个或多个参数标记符。
标记符仅在SQL语句中的特定位置时才是合法的例如,它可以在INSERT语句的VALUES()列表中(为行指定列值)或与WHERE子句中某列的比较部分(用以指定比较值)。但是对于ID(例如表名或列名),不允许使用它们不允许指定二進制操作符(如等于号“=”)的操作数。后一个限制是有必要的原因在于,无法确定参数类型一般而言,参数仅在DML(数据操作语言)語句中才是合法的在DDL(数据定义语言)语句中不合法。
执行语句之前必须使用mysql_stmt_bind_param(),将参数标记符与应用程序变量绑定在一起
如果成功處理了语句,返回0如果出现错误,返回非0值
以不恰当的顺序执行了命令。
MySQL服务器不可用
查询单一用户的num过程中,与服务器的连接丢夨
在客户端和服务器上,将预处理语句复位为完成准备后的状态主要用于复位用mysql_stmt_send_long_data()发出的数据。对于语句任何已打开的光标将被关闭。
如果语句成功复位返回0。如果出现错误返回非0值。
以不恰当的顺序执行了命令
MySQL服务器不可用。
查询单一用户的num过程中与服务器嘚连接丢失。
如果传递给mysql_stmt_prepare()的语句能够成生结果集mysql_stmt_result_metadata()将以指针的形式返回结果集元数据,该指针指向MYSQL_RES结构可用于处理元信息,如总的字段數以及单独的字段信息该结果集指针可作为参量传递给任何基于字段且用于处理结果集元数据的API函数,如:
完成操作后应释放结果集結构,可通过将其传递给mysql_free_result()完成它与释放通过mysql_store_result()调用获得的结果集的方法类似。
MYSQL_RES结果结构如果不存在关于预处理查询单一用户的num的任何元信息,返回NULL
将行光标设置到语句结果集中的任意行。“offset”值是行偏移的值行偏移应是从mysql_stmt_row_tell()或mysql_stmt_row_seek()返回的值。该值不是行编号如果打算按编號查找结果集中的行,可使用mysql_stmt_data_seek()取而代之
行光标的前一个值。可以将该值换递给后续的mysql_stmt_row_seek()调用
允许应用程序分段地(分块)将参数数据发送到服务器。可以多次调用该函数以便发送关于某一列的字符或二进制数据的不同部分,列必须是TEXT或BLOB数据类型之一
“parameter_number”指明了与数据關联的参数。参数从0开始编号“data”是指向包含将要发送的数据的缓冲区的指针,“length”指明了缓冲区内的字节数
如果希望复位/忽略已發送的数据,可使用mysql_stmt_reset()请参见。
如果成功地将数据发送到服务器返回0。如果出现错误返回非0值。
以不恰当的顺序执行了命令
MySQL服务器鈈可用。
在下面的示例中介绍了以信息块形式为TEXT列发送数据的方法。它会将数据值“MySQL最流行的开放源码数据库”插入到text_column列中。假定mysql变量具有有效的连接句柄
对于由stmt指定的语句,mysql_stmt_sqlstate()返回由Null终结的字符串该字符串包含针对最近调用预处理语句API函数的SQLSTATE错误代码,该函数或成功或失败错误代码由5个字符构成。"00000"表示“无错误”这些值由ANSI SQL和ODBC指定。关于可能值的列表请参见。
注意并非所有的MySQL错误均会被映射箌SQLSTATE代码。值"HY000"(一般错误)用于未映射的错误
包含SQLSTATE错误代码、由Null终结的字符串。
对于其他语句没有必要调用mysql_stmt_store_result(),但如果调用了它也不会慥成任何伤害或导致任何性能问题。通过检查mysql_stmt_result_metadata()是否返回NULL可检测语句是否生成了结果集。更多信息请参见。
如果成功完成了对结果的缓沖处理返回0。如果出现错误返回非0值。
以不恰当的顺序执行了命令
MySQL服务器不可用。
在查询单一用户的num过程中与服务器的连接丢失。
下面列出了一些目前已知的与预处理语句有关的问题:
将整数转换为字符串时在某些情况下,当MySQL不打印前导0时可与预处理语句一起使用ZEROFILL。例如与MIN(number-with-zerofill)一起。
支持在单个查询单一用户的num字符串中指定的多语句的执行要想与给定的连接一起使用该功能,打开连接时必须將标志参数中的
多语句功能可与mysql_query()或mysql_real_query()一起使用。它不能与预处理语句接口一起使用按照定义,预处理语句仅能与包含单个语句的字符串一起使用
二进制协议允许你使用MYSQL_TIME结构发送和接受日期和时间值(DATE、TIME、DATETIME和TIMESTAMP)。在中介绍了该结构的成员。
要想发送临时数据值可使用mysql_stmt_prepare()创建预处理语句。然后在调用mysql_stmt_execute()执行语句之前,可采用下述步骤设置每个临时参数:
要想检索临时值可采用类似的步骤,但应将buffer_type成员设置為打算接受的值的类型并将缓冲成员设为应将返回值置于其中的MYSQL_TIME结构的地址。调用mysql_stmt_execute()之后并在获取结果之前,使用mysql_bind_results()将缓冲绑定到语句上
下面给出了一个插入DATE、TIME和TIMESTAMP数据的简单示例。假定mysql变量具有有效的连接句柄
当你打算创建线程客户端时,需要使用下述函数请参见。
調用任何MySQL函数之前需要在程序中调用该函数。它将初始化MySQL所需的某些全局变量如果你正在使用线程安全客户端库,它还能为该线程调鼡mysql_thread_init()
对于每个创建的线程,需要调用该函数来初始化与线程相关的变量
如果成功,返回0如果出现错误,返回非0值
注意,该函数不会被客户端库自动调用必须明确调用它以避免内存泄漏。
该函数指明了客户端是否编译为线程安全的
如果客户端是线程安全的,返回1否则返回0。
C API库的使用时应调用它们。关于更多信息请参见。
调用任何其他MySQL函数之前必须在使用嵌入式服务器的程序中调用该函数。咜将启动服务器并初始化服务器使用的任何子系统(mysys、InnoDB等)。如果未调用该函数对mysql_init()的下一次调用将执行mysql_server_init()。如果你正在使用与MySQL一起提供嘚DBUG软件包应在调用了my_init()之后调用它。
对于main()的参量argc和argv是类似的参量。argv的第1个元素将被忽略(典型情况下它包含程序名)。为了方便起见如果没有针对服务器的命令行参量,argc可以是0mysql_server_init()将复制参量,以便能够在调用之后安全地摧毁argv或groups
如果打算连接到外部服务器而不启动嵌叺式服务器,应为argc指定负值
“groups”中以Null终结的字符串列表选择了选项文件中的活动“groups”。请参见为了方便起见,groups可以是NULL在该情况下,[server]囷[embedded]组是活动的
如果OK,返回0如果出现错误,返回1
在所有其他MySQL函数后,在程序中必须调用该函数一次它将关闭嵌入式服务器。
除了查詢单一用户的num返回的结果集外还能获取下述信息:
...、UPDATE)将返回额外信息。结果由mysql_info()返回关于它返回的字符串格式,请参见关于mysql_info()的介绍洳果没有额外信息,mysql_info()将返回NULL指针
如果将记录插入包含AUTO_INCREMENT列的表中,通过调用mysql_insert_id()函数可获取保存在该列中的值。
通过执行下述代码可从C应鼡程序检查某一值是否保存在AUTO_INCREMENT列中(假定该语句已成功执行)。它能确定查询单一用户的num是否是具有AUTO_INCREMENT索引的INSERT:
关于更多信息请参见。
对於LAST_INSERT_ID()最近生成的ID是在服务器上按连接维护的。它不会被另一个客户端改变即使用non-magic值(即非Null非0值)更新了另一个AUTO_INCREMENT列,也不会更改它
如果咑算使用从某一表生成的ID,并将其插入到第2个表中可使用如下所示的SQL语句:
链接时,在某些系统上可能出现下述错误:
如果在你的系统仩出现了该情况必须在编译/链接行的末尾增加“-lm”,通过该方式包含数学库
如果你编译了自己编写的MySQL客户端,或编译了从第三方获取嘚MySQL客户端必须在链接命令中使用“-lmysqlclient
对于使用MySQL头文件的客户端,编译它们时还须指定“-I”选项(例如-I/usr/local/mysql/include),以便编译器能找到头文件
为叻使在Unix平台上编译MySQL程序变得简单,提供了mysql_config脚本请参见。
你也可以使用它来编译MySQL客户端如下所述:
客户端库总是线程安全的。最大的问題在于从套接字读取的net.c中的子程序并不是中断安全的或许你可能希望用自己的告警中断对服务器的长时间读取,以此来解决问题如果為SIGPIPE中断安装了中断处理程序,套接字处理功能应是线程安全的
在较旧的发布在我方网站上()的二进制版本中,未用线程安全的选项对愙户端库进行正常编译(默认情况下编译的Windows二进制版本是线程安全的)。较新的二进制分发版应是正常的和线程安全的客户端库
为了獲得能从其他线程中断客户端的线程式客户端,并在与MySQL服务器通信时设置超时应使用“-lmysys”、“-lmystrings”和“-ldbug”库,以及服务器使用的net_serv.o代码
如果你不需要使用中断或超时,可编译线程安全客户端库(mysqlclient_r)并使用它。请参见在该情况下,不必担心net_serv.o对象文件或其他MySQL库
使用线程式愙户端并打算使用超时或中断时,可更好地利用thr_alarm.c文件中的子程序如果你正在使用来自mysys库的子程序,唯一需要记住的事是首先调用my_init()!请参見
对于除mysql_real_connect()外的所有函数,在默认情况下它们均是线程安全的在下面的说明中,介绍了编译线程安全客户端库的方法以及以线程安全方式使用它的方法。(下面关于mysql_real_connect()的说明实际上也适用于mysql_connect()但由于mysql_connect()已不再被重视,总应尽量使用mysql_real_connect())
要想使mysql_real_connect()成为线程安全的,必须用下述命囹再次编译客户端库:
它创建了线程安全客户端库libmysqlclient_r(假定你的操作系统有线程安全的gethostbyname_r()函数)。按照连接该库是线程安全的。可遵循下述警告使两个线程共享相同的连接:
在相同的连接上,两个线程不能同时将查询单一用户的num发送到MySQL服务器尤其是,必须确保在mysql_query()和mysql_store_result()之间没有使用相同连接的其他线程。
如果使用了mysql_use_result务必确保无其他线程正在使用相同的连接,直至关闭了结果集为止然而,对于线程式客戶端最好是共享相同的连接以使用mysql_store_result()。
如果打算在相同的连接上使用多个线程必须在mysql_query()和mysql_store_result()调用组合上拥有互斥锁。一旦mysql_store_result()准备就绪可释放鎖定,其他线程可在相同的连接上执行查询单一用户的num
如果你有1个调用MySQL函数的线程,而该函数未创建与MySQL数据库的连接就需了解下述事宜:
在线程调用mysql_init()或mysql_connect()之前,如果调用了MySQL函数该线程将没有所需的线程类变量,而且你很可能或早或晚结束于内核转储
要想使这些操作平穩工作,需要采取下述措施:
将客户端链接到libmysqlclient_r时如果存在未定义的符号,可能会出错在大多数情况下,其原因在于未将线程库包含茬link/compile行上。
从f文件的obdc部分读取额外选项 |
rc文件-g 取消全局文件名。help 终止主机FTP进程,并退出FTP管理方式.pwd 列出当前远端主机目录put 或 send 本地文件名 [上传到主机上的文件名] 将本地一个文件传送至远端主机中get 或 recv [远程主机文件名] [丅载到本地后的文件名] 从远端主机中传送至本地主机中mget [remote-files] 从远端主机接收一批文件至本地主机mput 列出当前远端主机目录中的文件.如果有本地文件,就将结果写至本地文件ascii 设定以ASCII方式传送文件(缺省值)bin 或 image 设定以二进制方式传送文件bell 每完成一次文件传送,报警提示cdup 返回上一级目录close 改变当前夲地主机的工作目录,如果缺省,就转到当前用户的HOME目录chmod 改变远端主机的文件权限case 当为ON时,用MGET命令拷贝的文件名到本地机器中,全部转换为小写字毋cd remote-dir 进入远程主机目录cdup 进入远程主机目录的父目录!
连接MYSQL;如果刚安装好MYSQL超级用户root是没有密码的。
增加新用户(注意:和上面不同,下面嘚因为是MYSQL环境中的命令所以后面都带一个分号作为命令结束符)show databases; 显示数据库列表。刚开始时才两个数据库:mysql和testmysql库很重要它里面有MYSQL的系統信息,我们改密码和新增用户实际上就是用这个库进行操作。use
备份数据库:(命令在DOS的\\mysql\\bin目录下执行);注释:将数据库school备份到school.bbb文件school.bbb是一個文本文件,文件名任取打开看看你会有新发现。win2003系统下新增命令(实用部份):shutdown /参数 关闭或重启本地或远程主机
例:shutdown /r /t 0 立即重启本地主机(无延时)taskill /参数 进程名或进程嘚pid 终止一个或多个任务和进程。
要终止的进程的进程名/F 强制终止进程,/T 终止指定的进程及他所启动的子进程tasklist 显示当前运行在本地和远程主机上的进程、服务、服务各进程的进程标识符(PID)。参数说明:/M 列出当前进程加载的dll文件/SVC 显示出每个进程对应的服务,无参数时就只列絀当前的进程
Linux系统下基本命令: 要区分大小写
dir 显示当前目录文件,ls -al 显示包括隐藏文件(同win2K的 dir)pwd 查询单一用户的num当前所在的目录位置cd cd ..回到仩一层目录,注意cd 与..之间有空格cd /返回到根目录。
cp 复制文件mv 移动文件rm 文件名 删除文件rm -a 目录名删除目录及子目录
rmdir 删除子目录,目录内没有文档chmod 设定档案或目录的存取权限grep 在档案中查找字符串diff 档案文件比较find 档案搜寻date 现在的日期、时间who 查询单一用户的num目湔和你使用同一台机器的人以及Login时间地点w 查看自己下过的命令ps 显示进程状态kill 停止某进程gcc 黑客通常用它来编译C语言写的文件su 权限转换为指定使用者telnet IP telnet连接对方主机(同win2K),当出现bash$时就说明连接成功ftp ftp连接上某服务器(同win2K)
在SQLServer数据库查询单一用户的num中为叻对查询单一用户的num成果进行对比、解析,我们经常会用到GROUPBY子句以及COUNT()函数来对查询单一用户的num成果进行分类、统计等然则我们在应鼡的过程中往往会存在一些题目,本文我们就介绍了一个题目并给出了它的解决规划,接下来就让我们来一路懂得一下这项目组内容吧
0 |
0 |
初看此题目,我们很轻易写出如下语句:
可运行之后获得的成果如下:
造成以上成果的原因是因为在SELECT语句中WHERE子句先于GROUP BY履行是以在履行GROUPBY孓句时,表中的记录已经将Category = 3的记录过滤分组处理惩罚中天然不管帐算在内。
1、FROM子句组装来自不合数据源的数据;
2、WHERE子句基于指定的前提對记录进行筛选;
3、GROUP BY子句将数据划分为多个分组;
4、应用凑集函数进行策画;
5、应用HAVING子句筛选分组;
7、应用ORDER BY对成果进行排序
机关含有所囿CategoeyID的成果集与其上语句所得成果集进行连接,并哄骗NULL调换函数(如SQLSERVER中的ISNULL()、ORACLE中的NVL())将NULL调换为0
履行后即可返回正确的成果:
0 |
以上就昰SQL Server数据库中含有GROUPBY子句的SELECT语句中显示COUNT()为0的成果的办法,本文就介绍到这里了欲望本次的介绍可以或许对您有所收成