在Linux系统中,使用C语言操作MySQL数据库需要先完成环境配置,再调用MySQL提供的C API接口实现连接与数据操作,下面逐步讲解完整实现过程。

环境准备
首先需要安装MySQL服务端和C语言开发依赖,在Debian/Ubuntu系统中执行以下命令:
# 安装MySQL服务端 sudo apt-get install mysql-server # 安装C语言MySQL开发库 sudo apt-get install libmysqlclient-dev
如果是CentOS/RHEL系统,使用yum命令安装:
sudo yum install mysql-server mysql-devel
核心API函数说明
C语言连接MySQL主要用到以下几个核心函数:
mysql_init:初始化MySQL连接句柄mysql_real_connect:建立到MySQL服务器的实际连接mysql_query:执行SQL语句mysql_store_result:获取查询结果集mysql_fetch_row:遍历结果集中的每一行数据mysql_close:关闭连接并释放资源
完整连接与操作示例
下面的代码演示了连接MySQL、创建表、插入数据、查询数据的完整流程:
#include <stdio.h>
#include <stdlib.h>
#include <mysql/mysql.h>
int main() {
MYSQL *conn;
MYSQL_RES *res;
MYSQL_ROW row;
// 1. 初始化连接句柄
conn = mysql_init(NULL);
if (conn == NULL) {
fprintf(stderr, "mysql_init failed\n");
return 1;
}
// 2. 建立数据库连接,参数依次是句柄、主机地址、用户名、密码、数据库名、端口、unix套接字、客户端标志
if (mysql_real_connect(conn, "localhost", "root", "your_password", "test_db", 0, NULL, 0) == NULL) {
fprintf(stderr, "连接失败: %s\n", mysql_error(conn));
mysql_close(conn);
return 1;
}
printf("数据库连接成功\n");
// 3. 执行创建表语句
if (mysql_query(conn, "CREATE TABLE IF NOT EXISTS user(id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50), age INT)")) {
fprintf(stderr, "创建表失败: %s\n", mysql_error(conn));
mysql_close(conn);
return 1;
}
// 4. 插入数据
if (mysql_query(conn, "INSERT INTO user(name, age) VALUES('张三', 25), ('李四', 30)")) {
fprintf(stderr, "插入数据失败: %s\n", mysql_error(conn));
mysql_close(conn);
return 1;
}
printf("插入数据成功,影响行数: %lld\n", mysql_affected_rows(conn));
// 5. 查询数据
if (mysql_query(conn, "SELECT id, name, age FROM user")) {
fprintf(stderr, "查询失败: %s\n", mysql_error(conn));
mysql_close(conn);
return 1;
}
res = mysql_store_result(conn);
if (res == NULL) {
fprintf(stderr, "获取结果集失败: %s\n", mysql_error(conn));
mysql_close(conn);
return 1;
}
// 6. 遍历结果集
printf("查询结果:\n");
while ((row = mysql_fetch_row(res)) != NULL) {
printf("id: %s, name: %s, age: %s\n", row[0], row[1], row[2]);
}
// 7. 释放结果集并关闭连接
mysql_free_result(res);
mysql_close(conn);
return 0;
}编译与运行
编译时需要链接MySQL客户端库,执行以下命令:
gcc mysql_demo.c -o mysql_demo -lmysqlclient
运行生成的可执行文件即可看到对应的操作结果。
常见问题排查
- 编译时提示找不到mysql.h:检查是否安装了libmysqlclient-dev,或者编译时指定头文件路径 -I/usr/include/mysql
- 连接失败提示Access denied:检查用户名密码是否正确,以及该用户是否有对应数据库的操作权限
- 执行SQL失败:通过
mysql_error(conn)获取具体错误信息,排查SQL语句语法问题
注意替换代码中的数据库密码和数据库名为你实际的环境配置,测试前确保test_db数据库已经存在,或者修改代码先创建数据库。