MYSQL 基础知识之API解析

c++使用Mysql的详解及常用操作示例

1 Mysql数据类型

MYSQL

该结构代表1个数据库连接的句柄。几乎所有的MySQL函数均使用它。不应尝试拷贝MYSQL结构。不保证这类拷贝结果会有用。

MYSQL_RES

  • 原型:
typedef struct st_mysql_res {
  my_ulonglong  row_count;
  MYSQL_FIELD	*fields;
  MYSQL_DATA	*data;
  MYSQL_ROWS	*data_cursor;
  unsigned long *lengths;		/* column lengths of current row */
  MYSQL		*handle;		/* for unbuffered reads */
  const struct st_mysql_methods *methods;
  MYSQL_ROW	row;			/* If unbuffered read */
  MYSQL_ROW	current_row;		/* buffer to current row */
  MEM_ROOT	field_alloc;
  unsigned int	field_count, current_field;
  my_bool	eof;			/* Used by mysql_fetch_row */
  /* mysql_stmt_close() had to cancel this result */
  my_bool       unbuffered_fetch_cancelled;  
  void *extension;
} MYSQL_RES;
  • 描述:该结构代表返回行的查询结果(SELECT, SHOW, DESCRIBE, EXPLAIN)。

MYSQL_ROW

  • 原型:typedef char **MYSQL_ROW;
  • 描述:一个字符串数组,所有得数据类型都被转换成字符串送到客户端。
  • 相关API:MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);

MYSQL_FIELD

  • 原型:
typedef struct st_mysql_field {
  char *name;                 /* Name of column */
  char *org_name;             /* Original column name, if an alias */
  char *table;                /* Table of column if column was a field */
  char *org_table;            /* Org table name, if table was an alias */
  char *db;                   /* Database for table */
  char *catalog;	      /* Catalog for table */
  char *def;                  /* Default value (set by mysql_list_fields) */
  unsigned long length;       /* Width of column (create length) */
  unsigned long max_length;   /* Max width for selected set */
  unsigned int name_length;
  unsigned int org_name_length;
  unsigned int table_length;
  unsigned int org_table_length;
  unsigned int db_length;
  unsigned int catalog_length;
  unsigned int def_length;
  unsigned int flags;         /* Div flags */
  unsigned int decimals;      /* Number of decimals in field */
  unsigned int charsetnr;     /* Character set */
  enum enum_field_types type; /* Type of field. See mysql_com.h for types */
  void *extension;
} MYSQL_FIELD;
  • 描述:该结构包含关于字段的信息,如字段名、类型和大小。(不包含字段值, 字段值在MYSQL_ROW中)
  • 相关API:MYSQL_FIELD * STDCALL mysql_fetch_field(MYSQL_RES *result);

MYSQL_FIELD_OFFSET

  • 原型:typedef unsigned int MYSQL_FIELD_OFFSET;
  • 描述:这是MySQL字段列表偏移量的“类型安全”表示(由mysql_field_seek()使用)。偏移量是行内的字段编号,从0开始。
  • 相关API:MYSQL_FIELD_OFFSET STDCALL mysql_field_seek(MYSQL_RES *result, MYSQL_FIELD_OFFSET offset);

2 字段标志

标志值标志描述
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(不再重视)
SET_FLAG字段是SET(不再重视)
BLOB_FLAG字段是BLOB或TEXT(不再重视)
TIMESTAMP_FLAG字段是TIMESTAMP(不再重视)

3 API概述

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语句的告警数

4 API详解

mysql_fetch_field

  • 原型:MYSQL_FIELD *mysql_fetch_field(MYSQL_RES *result)
  • 描述:返回采用MYSQL_FIELD结构的结果集的列信息。
  • 参数:
    result:返回的结果集。
  • 返回值:当前列的MYSQL_FIELD结构。如果未剩余任何列,返回NULL。

mysql_init

  • 原型:MYSQL *mysql_init(MYSQL *mysql)
  • 描述:分配或初始化与mysql_real_connect()相适应的MYSQL对象。如果mysql是NULL指针,该函数将分配、初始化、并返回新对象。否则,将初始化对象,并返回对象的地址。如果mysql_init()分配了新的对象,当调用mysql_close()来关闭连接时。将释放该对象。
  • 返回值:初始化的MYSQL*句柄。如果无足够内存以分配新的对象,返回NULL。

mysql_num_fields

  • 原型:unsigned int mysql_num_fields(MYSQL_RES *result)
  • 描述:获取返回的结果集中有几列数据,
  • 参数:
    result:返回的结果集。
  • 返回值:结果集中的列数。

mysql_num_rows

  • 原型:my_ulonglong mysql_num_rows(MYSQL_RES *result)
  • 描述:获取返回的结果集中有几行数据。
  • 参数:
    result:返回的结果集。
  • 返回值:结果集中的行数。

mysql_options

  • 原型:int mysql_options(MYSQL *mysql, enum mysql_option option, const char *arg)
  • 描述:用于设置额外的连接选项,并影响连接的行为。可多次调用该函数来设置数个选项。
  • 参数:
    mysql:初始化过的MYSQL结构。
    arg:选项参数的值。
    option:选项参数,说明如下表。
  • 返回值:成功返回0,否则返回非0值。
选项参量类型功能
MYSQL_INIT_COMMANDchar *连接到MySQL服务器时将执行的命令。再次连接时将自动地再次执行。
MYSQL_OPT_COMPRESS未使用使用压缩客户端/服务器协议
MYSQL_OPT_CONNECT_TIMEOUTunsigned int *以秒为单位的连接超时。
MYSQL_OPT_GUESS_CONNECTION未使用对于与libmysqld链接的应用程序,允许库“猜测”是否使用嵌入式服务器或远程服务器。“猜测”表示,如果设置了主机名但不是本地主机,将使用远程服务器。该行为是默认行为。 可使用MYSQL_OPT_USE_EMBEDDED_CONNECTION 和MYSQL_OPT_USE_REMOTE_CONNECTION覆盖它。对于与libmysqlclient链接的应用程序,该选项将被忽略。
MYSQL_OPT_LOCAL_INFILE指向单元的可选指针如果未给定指针,或指针指向“unsigned int != 0”,将允许命令LOAD LOCAL INFILE。
MYSQL_OPT_NAMED_PIPE未使用使用命名管道连接到NT平台上的MySQL服务器。
MYSQL_OPT_PROTOCOLunsigned int *要使用的协议类型。应是mysql.h中定义的mysql_protocol_type的枚举值之一。
MYSQL_OPT_READ_TIMEOUTunsigned int *从服务器读取信息的超时(目前仅在Windows平台的TCP/IP连接上有效)。
MYSQL_OPT_RECONNECTmy_bool *如果发现连接丢失,启动或禁止与服务器的自动再连接。从MySQL 5.0.3开始,默认情况下禁止再连接,这是5.0.13中的新选项,提供了一种以显式方式设置再连接行为的方法。
MYSQL_OPT_SET_CLIENT_IPchar *对于与libmysqld链接的应用程序(具备鉴定支持特性的已编译libmysqld),它意味着,出于鉴定目的,用户将被视为从指定的IP地址(指定为字符串)进行连接。对于与libmysqlclient链接的应用程序,,该选项将被忽略。
MYSQL_OPT_USE_EMBEDDED_CONNECTION未使用对于与libmysqld链接的应用程序,对于连接来说,它将强制使用嵌入式服务器。对于与libmysqlclient链接的应用程序,,该选项将被忽略。
MYSQL_OPT_USE_REMOTE_CONNECTION未使用对于与libmysqld链接的应用程序,对于连接来说,它将强制使用远程服务器。对于与libmysqlclient链接的应用程序,,该选项将被忽略。
MYSQL_OPT_USE_RESULT未使用不使用该选项。
MYSQL_OPT_WRITE_TIMEOUTunsigned int *写入服务器的超时(目前仅在Windows平台的TCP/IP连接上有效)。
MYSQL_READ_DEFAULT_FILEchar *从命名选项文件而不是从my.cnf读取选项。
MYSQL_READ_DEFAULT_GROUPchar *从my.cnf或用MYSQL_READ_DEFAULT_FILE指定的文件中的命名组读取选项。
MYSQL_REPORT_DATA_TRUNCATIONmy_bool *通过MYSQL_BIND.error,对于预处理语句,允许或禁止通报数据截断错误(默认为禁止)。
MYSQL_SECURE_AUTHmy_bool*是否连接到不支持密码混编功能的服务器,在MySQL 4.1.1和更高版本中,使用了密码混编功能。
MYSQL_SET_CHARSET_DIRchar*指向包含字符集定义文件的目录的路径名。
MYSQL_SET_CHARSET_NAMEchar*用作默认字符集的字符集的名称。
MYSQL_SHARED_MEMORY_BASE_NAMEchar*命名为与服务器进行通信的共享内存对象。应与你打算连接的mysqld服务器使用的选项“-shared-memory-base-name”相同。

mysql_query

  • 原型:int mysql_query(MYSQL *mysql, const char *query)
  • 描述:查询指向的SQL查询,mysql_query()不能用于包含二进制数据的查询,应使用mysql_real_query()取而代之(二进制数据可能包含字符‘\0’,mysql_query()会将该字符解释为查询字符串结束)。
  • 参数:
    mysql:由mysql_real_connect()连接成功的数据库
    query:SQL查询语句,正常情况下,字符串必须包含1条SQL语句,而且不应为语句添加终结分号 ; 或 \g 。如果允许多语句执行,字符串可包含多条由 ; 隔开的语句。
  • 返回值:成功,返回0。错误,返回非0值。

mysql_real_connect

  • 原型:MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag)
  • 描述:尝试与运行在主机上的MySQL数据库引擎建立连接,在你能够执行需要有效MySQL连接句柄结构的任何其他API函数之前,连接必须成功完成。
  • 参数:
    mysql:由mysql_init()初始化成功的MYSQL结构的地址
    host:主机名或IP地址
    user:用户的MySQL登录ID
    passwd:用户的密码
    db:数据库名称,如果db为NULL,连接会将默认的数据库设为该值
    port:TCP/IP连接的端口号
    unix_socket:如果不是NULL,则该字符串描述了应使用的套接字或命名管道
    client_flag:值通常为0,也能将其设置为下述标志的组合,以允许特定功能:
标志名称标志描述
CLIENT_COMPRESS使用压缩协议。
CLIENT_FOUND_ROWS返回发现的行数(匹配的),而不是受影响的行数。
CLIENT_IGNORE_SPACE允许在函数名后使用空格。使所有的函数名成为保留字。
CLIENT_INTERACTIVE关闭连接之前,允许interactive_timeout(取代了wait_timeout)秒的不活动时间。客户端的会话wait_timeout变量被设为会话interactive_timeout变量的值。
CLIENT_LOCAL_FILES允许LOAD DATA LOCAL处理功能。
CLIENT_MULTI_STATEMENTS通知服务器,客户端可能在单个字符串内发送多条语句(由‘;’隔开)。如果未设置该标志,将禁止多语句执行。
CLIENT_MULTI_RESULTS通知服务器,客户端能够处理来自多语句执行或存储程序的多个结果集。如果设置了CLIENT_MULTI_STATEMENTS,将自动设置它。
CLIENT_NO_SCHEMA禁止db_name.tbl_name.col_name语法。它用于ODBC。如果使用了该语法,它会使分析程序生成错误,在捕获某些ODBC程序中的缺陷时,它很有用。
CLIENT_ODBC客户端是ODBC客户端。它将mysqld变得更为ODBC友好。
CLIENT_SSL使用SSL(加密协议)。该选项不应由应用程序设置,它是在客户端库内部设置的。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值