C API数据类型
-
该结构代表1个数据库连接的句柄。几乎所有的MySQL函数均使用它。不应尝试拷贝MYSQL结构。不保证这类拷贝结果会有用。
-
该结构代表返回行的查询结果(SELECT, SHOW, DESCRIBE,EXPLAIN)。在本节的剩余部分,将查询返回的信息称为“结果集”。
-
这是1行数据的“类型安全”表示。它目前是按照计数字节字符串的数组实施的。(如果字段值可能包含二进制数据,不能将其当作由Null终结的字符串对待,这是因为这类值可能会包含Null字节)。行是通过调用mysql_fetch_row()获得的。
-
该结构包含关于字段的信息,如字段名、类型和大小。这里详细介绍了其成员。通过重复调用mysql_fetch_field(),可为每个字段获得MYSQL_FIELD结构。字段值不是该结构的组成部份,它们包含在MYSQL_ROW结构中。
-
这是MySQL字段列表偏移量的“类型安全”表示(由mysql_field_seek()使用)。偏移量是行内的字段编号,从0开始。
-
用于行数以及mysql_affected_rows()、mysql_num_rows()和mysql_insert_id()的类型。该类型提供的范围为0~1.84e19。
在某些系统上,不能打印类型my_ulonglong的值。要想打印这类值,请将其转换为无符号长整数类型并使用%lu打印格式,例如:
printf ("Number of rows: %lu\n", (unsigned long) mysql_num_rows(result));
下面列出了MYSQL_FIELD结构包含的成员:
· char * name :字段名称,由Null终结的字符串。如果用AS子句为该字段指定了别名,名称的值也是别名。
· char * org_name :段名称,由Null终结的字符串。忽略别名。
· char * table :包含该字段的表的名称,如果该字段不是计算出的字段的话。对于计算出的字段,表值为空的字符串。如果用AS子句为该表指定了别名,表的值也是别名。
· char * org_table :表的名称,由Null终结的字符串。忽略别名。
· char * db :字段源自的数据的名称,由Null终结的字符串。如果该字段是计算出的字段,db为空的字符串。
· char * catalog :catalog名称。该值总是"def"。
· char * def :该字段的默认值,由Null终结的字符串。仅当使用mysql_list_fields()时才设置它。
· unsigned long length :字段的宽度,如表定义中所指定的那样。
· unsigned long max_length :用于结果集的字段的最大宽度(对于实际位于结果集中的行,最长字段值的长度)。如果使用mysql_store_result()或mysql_list_fields(),它将包含字段的最大长度。如果使用mysql_use_result(),该变量的值为0。
· unsigned int name_length :名称的长度。
· unsigned int org_name_length :org_name的长度。
· unsigned int table_length :表的长度。
· unsigned int org_table_length :org_table的长度。
· unsigned int db_length :db的长度。
· unsigned int catalog_length :catalog的长度。
· unsigned int def_length :def的长度。
· unsigned int flags :用于字段的不同“位标志”。标志的值可以有0个或多个下述位集合
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属性 |
if (field->flags & NOT_NULL_FLAG)
printf("Field can't be null\n");
可以使用下述方面的宏来定义标志值的布尔状态:
IS_NOT_NULL(flags) | 如果该字段定义为NOT NULL,为“真”。 |
IS_PRI_KEY(flags) | 如果该字段是主键,为“真”。 |
IS_BLOB(flags) | 如果该字段是BLOB或TEXT,为“真”(不再重视,用测试field->type取而代之)。 |
· unsigned int decimals
用于数值字段的十进制数数目。
· unsigned int charset_nr
用于字段的字符集编号。
· enum enum_field_types type
字段的类型。类型值可以是下标所列的MYSQL_TYPE_符号之一:
类型值 | 类型描述 |
MYSQL_TYPE_TINY | TINYINT字段 |
MYSQL_TYPE_SHORT | SMALLINT字段 |
MYSQL_TYPE_LONG | INTEGER字段 |
MYSQL_TYPE_INT24 | MEDIUMINT字段 |
MYSQL_TYPE_LONGLONG | BIGINT字段 |
MYSQL_TYPE_DECIMAL | DECIMAL或NUMERIC字段 |
MYSQL_TYPE_NEWDECIMAL | 精度数学DECIMAL或NUMERIC |
MYSQL_TYPE_FLOAT | FLOAT字段 |
MYSQL_TYPE_DOUBLE | DOUBLE或REAL字段 |
MYSQL_TYPE_BIT | BIT字段 |
MYSQL_TYPE_TIMESTAMP | TIMESTAMP字段 |
MYSQL_TYPE_DATE | DATE字段 |
MYSQL_TYPE_TIME | TIME字段 |
MYSQL_TYPE_DATETIME | DATETIME字段 |
MYSQL_TYPE_YEAR | YEAR字段 |
MYSQL_TYPE_STRING | CHAR字段 |
MYSQL_TYPE_VAR_STRING | VARCHAR字段 |
MYSQL_TYPE_BLOB | BLOB或TEXT字段(使用max_length来确定最大长度) |
MYSQL_TYPE_SET | SET字段 |
MYSQL_TYPE_ENUM | ENUM字段 |
MYSQL_TYPE_GEOMETRY | Spatial字段 |
MYSQL_TYPE_NULL | NULL-type字段 |
MYSQL_TYPE_CHAR | 不再重视,用MYSQL_TYPE_TINY取代 |
可以使用IS_NUM()宏来测试字段是否具有数值类型。将类型值传递给IS_NUM(),如果字段为数值类型,会将其评估为“真”:
if (IS_NUM(field->type))
printf("Field is numeric\n");
C API函数概述:
函数 | 描述 |
mysql_affected_rows() | 返回上次UPDATE、DELETE或INSERT查询更改/删除/插入的行数。 |
mysql_autocommit() | 切换 autocommit模式,ON/OFF |
mysql_change_user() | 更改打开连接上的用户和数据库。 |
mysql_charset_name() | 返回用于连接的默认字符集的名称。 |
mysql_close() | 关闭服务器连接。 |
mysql_commit() | 提交事务。 |
mysql_connect() | 连接到MySQL服务器。该函数已不再被重视,使用mysql_real_connect()取代。 |
mysql_create_db() | 创建数据库。该函数已不再被重视,使用SQL语句CREATE DATABASE取而代之。 |
mysql_data_seek() | 在查询结果集中查找属性行编号。 |
mysql_debug() | 用给定的字符串执行DBUG_PUSH。 |
mysql_drop_db() | 撤销数据库。该函数已不再被重视,使用SQL语句DROP DATABASE取而代之。 |
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() | 给定字段编号,返回表字段的类型。 |
mysql_fetch_fields() | 返回所有字段结构的数组。 |
mysql_fetch_lengths() | 返回当前行中所有列的长度。 |
mysql_fetch_row() | 从结果集中获取下一行 |
mysql_field_seek() | 将列光标置于指定的列。 |
mysql_field_count() | 返回上次执行语句的结果列的数目。 |
mysql_field_tell() | 返回上次mysql_fetch_field()所使用字段光标的位置。 |
mysql_free_result() | 释放结果集使用的内存。 |
mysql_get_client_info() | 以字符串形式返回客户端版本信息。 |
mysql_get_client_version() | 以整数形式返回客户端版本信息。 |
mysql_get_host_info() | 返回描述连接的字符串。 |
mysql_get_server_version() | 以整数形式返回服务器的版本号。 |
mysql_get_proto_info() | 返回连接所使用的协议版本。 |
mysql_get_server_info() | 返回服务器的版本号。 |
mysql_info() | 返回关于最近所执行查询的信息。 |
mysql_init() | 获取或初始化MYSQL结构。 |
mysql_insert_id() | 返回上一个查询为AUTO_INCREMENT列生成的ID。 |
mysql_kill() | 杀死给定的线程。 |
mysql_library_end() | 最终确定MySQL C API库。 |
mysql_library_init() | 初始化MySQL C API库。 |
mysql_list_dbs() | 返回与简单正则表达式匹配的数据库名称。 |
mysql_list_fields() | 返回与简单正则表达式匹配的字段名称。 |
mysql_list_processes() | 返回当前服务器线程的列表。 |
mysql_list_tables() | 返回与简单正则表达式匹配的表名。 |
mysql_more_results() | 检查是否还存在其他结果。 |
mysql_next_result() | 在多语句执行过程中返回/初始化下一个结果。 |
mysql_num_fields() | 返回结果集中的列数。 |
mysql_num_rows() | 返回结果集中的行数。 |
mysql_options() | 为mysql_connect()设置连接选项。 |
mysql_ping() | 检查与服务器的连接是否工作,如有必要重新连接。 |
mysql_query() | 执行指定为“以Null终结的字符串”的SQL查询。 |
mysql_real_connect() | 连接到MySQL服务器。 |
mysql_real_escape_string() | 考虑到连接的当前字符集,为了在SQL语句中使用,对字符串中的特殊字符进行转义处理。 |
mysql_real_query() | 执行指定为计数字符串的SQL查询。 |
mysql_refresh() | 刷新或复位表和高速缓冲。 |
mysql_reload() | 通知服务器再次加载授权表。 |
mysql_rollback() | 回滚事务。 |
mysql_row_seek() | 使用从mysql_row_tell()返回的值,查找结果集中的行偏移。 |
mysql_row_tell() | 返回行光标位置。 |
mysql_select_db() | 选择数据库。 |
mysql_server_end() | 最终确定嵌入式服务器库。 |
mysql_server_init() | 初始化嵌入式服务器库。 |
mysql_set_server_option() | 为连接设置选项(如多语句)。 |
mysql_sqlstate() | 返回关于上一个错误的SQLSTATE错误代码。 |
mysql_shutdown() | 关闭数据库服务器。 |
mysql_stat() | 以字符串形式返回服务器状态。 |
mysql_store_result() | 检索完整的结果集至客户端。 |
mysql_thread_id() | 返回当前线程ID。 |
mysql_thread_safe() | 如果客户端已编译为线程安全的,返回1。 |
mysql_use_result() | 初始化逐行的结果集检索。 |
mysql_warning_count() | 返回上一个SQL语句的告警数。 |