mysql c语言 函数接口

想看看数据库方面的c接口,但是找来找去,居然没有找到, 感觉这个资料应该得备一份,于是折腾了一上午。如果说文档侵权了啥的,我就删了,也是方便大家。


应用程序可以使用下面的步骤与mysql数据库进行交互:

  • 使用 mysql_library_init 初始化客户端函数库,这个函数在 libmysqlclient c 语言链接库 和 libmysqld 嵌入式服务链接库,所以我们使用的时候,需要使用-libmysqlclient 或者 -libmysqld进行编译。
  • 使用 mysql_init 函数初始化链接句柄,然后使用 mysql_real_connect 来连接服务器。
  • 检测数据库状态和运行查询语句。
  • 使用 mysql_close 关闭数据库服务器的远程链接。
  • 使用 mysql_library_end 关闭客服函数库调用。

注意: 如果不调用 mysql_library_end, 会有部分内存得不到释放,虽然重复链接不会增加内存,但是在内存比较少的情况下,可能会造成内存泄漏。

由于 mysql_init 在必要时候会教用 mysql_library_init函数, 所以不是多线程的情况 mysql_library_init 调用可以省略。 然而, mysql_library_init 不是线程安全函数, 所以 mysql_init 调用了 mysql_library_init 函数,也就不是线程安全函数了。所以不管是使用这两个函数哪一个函数,都需要在起新线程之前或者在临界区之间调用,这应该在任何其他客户端库调用之前完成。

链接服务器需要使用 mysql_init 初始化一个链接句柄, 然后就可以使用这个句柄加上主机地址、用户名及其密码、和数据库名称 来调用 mysql_real_connect 链接数据库了。连接后,mysql_real_connect 会在5.0.3之前的API版本中将重新连接标志(MYSQL结构的一部分)设置为1,在较新的版本中设置为0。我们也可以使用 mysql_option 函数来设置 MYSQL_OPT_RECONNECT 来控制是否重连。 再不用这个数据库的时候,需要调用 mysql_close 来关闭远程数据库链接。

当链接成功后, 客户端就可以通过 mysql_qurey 和 mysql_real_query 来发送sql语句到服务器进行查询, 两个函数不同的地方是前者的查询字符串使用’\0’结尾, 后者是指定查询字符串的字符个数。 如果查询字符串中不一定有 ‘\0’, 那么就推荐使用 mysql_real_query。

如果不是使用的 select 语句, 如 insert, update, delete 等语句, 我们可以调用 mysql_affected_rows 来查看执行结果中改变的行数。

对于 select 查询语句, 我们可以通过下面的方式来查询结果来得到想要的数据, 其他的 show, describe, explain等语句也是通过这种方式来得到查询结果。

其实是有提供了两种方式查询结果, 一种是一次性调用 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_use_result 的好处是避免了在客户端上大量使用内存,如果一次查询只使用少量的结果,那这种方式可能会更快. 不好的地方是我们需要频繁的访问服务器,也没有随机访问数据集的功能. 而且结果长度也只有在我们访问了所有的结果后才知道.此外,即使在检索中确定您已找到所需的信息,也必须检索所有行。

该 API 并不知道发送的语句是否是 select 查询语句, 只有在 mysql_store_result 的时候才会执行. 如果运行正常, 我们就可以访问到查询结果了. 可以调用 mysql_field_count 查看是否符合预期. 如果 mysql_field_count 返回0, 说明没有结果返回, 这样的指令包括 insert, update, delete 等, 表示没有返回结果. 如果 mysql_field_count 不等于0, 那就表明本身有结果返回,但是实际上没有接收到结果. 这就说明执行 select 失败了. 查看 mysql_field_count 可以得到怎么样完才的指导.

mysql_store_result 和 mysql_use_result 两个函数都可以让我们得到查询的结果, 我们可以在每行中, 重复的使用 mysql_fetch_filed 来获取一行中的信息, 也可以使用 mysql_fetch_field_direct 来获取指定列的数据, 当然也有类是的改变列指针位置的 mysql_filed_seek 函数. 可以通过调用 mysql_fetch_fields 来一次性获取全部结果.

为了检测和报告错误, mysql 提供了 mysql_errno 和 mysql_error 两个函数, 需要注意的是这两个函数只能返回最近调用的函数的状态,查看是否执行成功。


附表:

编号 函数 说明
1 my_init 初始化一个线程安全的句柄
2 mysql_affected_rows 返回UPDATE,DELETE,INSERT操作的行数
3 mysql_autocommit 打开或者关闭自动提交功能
4 mysql_change_user 再打开的数据库链接上修改用户
5 mysql_character_set_name 返回当前连接的默认字符集名称
6 mysql_client_find_plugin 返回指向插件的指针
7 mysql_client_register_plugin 注册一个插件
8 mysql_close 关闭服务器链接
9 mysql_commit 提交事务
10 mysql_connect 链接mysql服务器,但是推荐使用 mysql_real_connect
11 mysql_create_db 创建一个数据库,推荐使用CREATE_DATABASE
12 mysql_data_seek 在查询结果集中寻找任意行号
13 mysql_debug 使用DBUG_PUSH处理给定的字符串
14 mysql_drop_db 删除数据库,推荐使用DROP_DATABASE
15 mysql_dump_debug_info 将数据库调试信息写入日志
16 mysql_eof 判断是否读取到结果的最后一行,推荐使用mysql_errno或者mysql_error代替
17 mysql_errno 返回最近调用的MySQL函数的错误号
18 mysql_error 返回最近调用的MySQL函数的错误消息
19 mysql_escape_string 转义SQL语句字符串中的特殊字符
20 mysql_fetch_field 返回下一个表格字段的类型
21 mysql_fetch_field_direct 返回给定字段编号的对应字段的类型
22 mysql_fetch_fields 返回所有字段结构的数组
23 mysql_fetch_lengths 返回当前行中的列数
24 mysql_fetch_row 从结果集中获取下一行
25 mysql_field_count 返回最新语句的结果列数
26 mysql_field_seek 将列光标放在指定列上
27 mysql_field_tell 最后使用 mysql_fetch_field的光标位置
28 mysql_free_result 释放结果数据集所使用的内存
29 mysql_get_character_set_info 返回有关默认字符集的信息
30 mysql_get_client_info 以字符串形式返回客户端版本信息
31 mysql_get_client_version 以整数形式返回客户端版本信息
32 mysql_get_host_info 返回描述连接的字符串
33 mysql_get_proto_info 返回连接使用的协议版本
34 mysql_get_server_info 返回服务器版本号
35 mysql_get_server_version 以整数形式返回服务器版本号
36 mysql_get_ssl_cipher 返回当前的SSL密码
37 mysql_hex_string 以十六进制格式编码字符串
38 mysql_info 返回有关最近执行的查询的信息
39 mysql_init 获取或初始化MYSQL结构
40 mysql_insert_id 返回上一个查询为AUTO_INCREMENT列生成的ID
41 mysql_kill 杀死给定线程
42 mysql_library_end 结束MySQL C API库
43 mysql_library_init 初始化MySQL C API库
44 mysql_list_dbs 返回与简单正则表达式匹配的数据库名称
45 mysql_list_fields 返回与简单正则表达式匹配的字段名称
46 mysql_list_processes 返回当前服务器线程的列表
47 mysql_list_tables 返回与简单正则表达式匹配的表名
48 mysql_load_plugin 加载插件
49 mysql_load_plugin_v 加载插件
50 mysql_more_results 检查是否还有其他结果
51 mysql_next_result 返回/启动多结果执行中的下一个结果
52 mysql_num_fields 返回结果集中的列数
53 mysql_num_rows 返回结果集中的行数
54 mysql_options 设置mysql_real_connect的连接选项
55 mysql_ping 检查与服务器的连接是否正常,必要时重新连接
56 mysql_plugin_options 设置插件选项
57 mysql_query 执行指定为以空值终止的字符串的SQL查询
58 mysql_real_connect 连接到MySQL服务器
59 mysql_real_escape_string 使用连接的当前字符集,转义字符串中的特殊字符以用于SQL语句
60 mysql_real_query 执行指定为计数字符串的SQL查询
61 mysql_refresh 刷新或重置表和缓存
62 mysql_reload 告诉服务器重新加载授权表
63 mysql_rollback 事务回滚
64 mysql_row_seek 使用mysql_row_tell返回的值在结果集中寻找行偏移量
65 mysql_row_tell 返回行光标
66 mysql_select_db 选择一个数据库
67 mysql_server_end 结束MySQL C API库
68 mysql_server_init 初始化MySQL C API库
69 mysql_set_character_set 设置当前连接的默认字符集
70 mysql_set_local_infile_default 将LOAD DATA LOCAL处理程序回调设置为其默认值
71 mysql_set_local_infile_handler 安装特定于应用程序的LOAD DATA LOCAL处理回调
72 mysql_set_server_option 设置连接选项(如 multi-statements)
73 mysql_sqlstate 返回最后一个错误的SQLSTATE错误代码
74 mysql_shutdown 关闭数据库服务器
75 mysql_ssl_set 准备与服务器建立SSL连接
76 mysql_stat 以字符串形式返回服务器状态
77 mysql_store_result 检索完整的结果集给客户端
78 mysql_thread_end 完成线程处理程序
79 mysql_thread_id 返回当前线程ID
80 mysql_thread_init 初始化线程处理程序
81 mysql_thread_safe 如果客户端被编译为线程安全的,则返回1
82 mysql_use_result 启动逐行结果集检索
83 mysql_warning_count 返回前一条SQL语句的警告计数

翻译:

  • 23.7.5 C API Function Overview
  • Ubuntu16—安装mysql5.7未提示输入密码,安装后修改mysql密码默认密码

你可能感兴趣的:(基础编程,工具使用)