# 数据库连接池
# 数据库连接池概述
提高数据库的访问瓶颈(关系型数据库):
- 缓存服务器
Redis
- 数据库连接池
一般而言,对于数据库操作都是在访问的时候创建连接,访问完毕之后断开连接。在高并发的情况下,频繁的连接创建和释放会有很大的开销。需要进行如下过程:
- 建立通信的连接 TCP 三次握手
- 数据库服务器的连接认证
- 关闭数据库连接时资源是释放
- 断开通信连接 TCP 四次挥手
# MySQL API
# mysql_init
| MYSQL *mysql_init(MYSQL *mysql); |
# mysql_real_connect
| MYSQL *mysql_real_connect( |
| MYSQL *mysql, |
| const char *host, |
| const char *user, |
| const char *password, |
| const char *db, |
| unsigned int port, |
| const char *unix_socket, |
| unsigned long client_flag |
| ); |
| |
| 返回值: |
| 成功:返回有效的 MYSQL 连接句柄 |
| 失败:NULL |
| 句柄:一个实例 / 对象 |
| */ |
# mysql_query
| int mysql_query(MYSQL *mysql, const char*query); |
| |
| 返回值: |
| 成功:返回 0,同时查询结果(结构集)存储在 mysql 句柄中 |
| 失败:返回非 0 |
| */ |
# mysql store_result
| MYSQL_RES *mysql_store_result(MYSQL *mysql); |
| |
| 返回值: |
| 成功:返回结果集 |
| 失败:返回 NULL |
| */ |
# mysql_num_fields
| |
| unsigned int mysql_num_fields(MYSQL_RES *result); |
# mysql_fetch_fields
| |
| MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *result); |
MYSQL_FIELD
对应的结构体定义在 mysql.h
文件中,定义如下:
| |
| typedef struct st_mysql_field{ |
| char *name; |
| ... |
| }MYSQL_FIELD; |
# mysql_fetch_lengths
| |
| unsigned long *mysql_fetch_lengths(MYSQL_RES *result); |
# mysql_fetch_row
| typedef char **MYSQL_ROW; |
| |
| MYSQL_ROW mysql_fetch_row(MYSQL_RES *result); |
| |
| 返回值: |
| 成功:得到 |
| 失败:返回 NULL |
| */ |
# 遍历结果集
| MYSQL_FIELD *fields = mysql_fetch_fields(res); |
| int length = mysql_num_fields(res); |
# mysql_free_result
| |
| void mysql_free_result(MYSQL_RES *result); |
# mysql_close
| |
| void mysql_close(MYSQL* mysql); |
# 字符编码设置
| |
| const char *mysql_character_set_name(MYSQL* mysql); |
| |
| int mysql_set_charater_set(MYSQL* mysql, char *character_name); |
# 事务操作
| |
| my_bool mysql_autocommit(MYSQL* mysql, my_bool mode); |
| |
| 返回值: |
| 成功:true |
| 失败:false |
| */ |
| |
| my_bool mysql_commit(MYSQL *mysql); |
| |
| 返回值: |
| 成功:true |
| 失败:false |
| */ |
| |
| my_bool mysql_rollback(MYSQL *mysql); |
| |
| 返回值: |
| 成功:true |
| 失败:false |
| */ |
# 获取错误信息
| const char *mysql_error(MYSQL* mysql); |
| unsigned int mysql_errno(MYSQL* mysql); |
# 数据库连接池实现