欢迎大家来到别爱的CSDN
前言
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。 所以我们应该熟悉Linux下mysql的增删改查
一、前提条件(Ubuntu)
1.在Linux环境下安装MySQL
sudo apt-get update
sudo apt-get install mysql-server
2.在Linux环境下安装libmysqlclient-dev
sudo apt-get install libmysqlclient-dev
3.编译c文件时加上-I /usr/include/mysql/ -lmysqlclient
gcc -o mysql Mysql.c -I /usr/include/mysql/ -lmysqlclient
4.创建表id,姓名,性别
二、实现部分
1.连接mysql
代码如下(示例):
MYSQL mysql;
if (NULL == mysql_init(&mysql)) {
printf("mysql_init :%s\n", mysql_error(&mysql));
return -1;
}
if (!mysql_real_connect(&mysql, BIEAI_DB_SERVER_IP, BIEAI_DB_USERNAME, BIEAI_DB_PASSWORD, BIEAI_DB_DEFAULTDB, BIEAI_DB_SERVER_PORT, NULL, 0)) {
printf("mysql_real_connect :%s\n", mysql_error(&mysql));
return -2;
}
2.添加部分
代码如下(示例):
printf("case: mysql --> insert");
if (mysql_real_query(&mysql, SQL_INSERT_TBL_USER, strlen(SQL_INSERT_TBL_USER))) {
printf("mysql_real_query: %s\n", mysql_error(&mysql));
}
3.查询部分
代码如下(示例):
int bieai_mysql_select(MYSQL* handle) {
if (mysql_real_query(handle, SQL_SELECT_TBL_USER, strlen(SQL_SELECT_TBL_USER))) {
printf("mysql_real_query: %s\n", mysql_error(handle));
return -1;
}
MYSQL_RES* res = mysql_store_result(handle);
if (res == NULL) {
printf("mysql_store_result: %s\n", mysql_error(handle));
return -2;
}
int rows = mysql_num_rows(res);
printf("rows: %d\n", rows);
int fields = mysql_num_fields(res);
printf("fields: %d\n", fields);
MYSQL_ROW row;
while ((row = mysql_fetch_row(res))) {
for (int i = 0; i < fields; ++i) {
printf("%s\t", row[i]);
}
printf("\n");
}
mysql_free_result(res);
return 0;
}
4.删除部分(使用存储过程了)
因为我选择了不安全操作,需要三条SQL语句,所以用存储过程打包。 存储过程的代码如下(示例):
DELIMITER **
CREATE PROCEDURE PROC_DELETE_USER(IN UNAME VARCHAR(32))
BEGIN
SET SQL_SAFE_UPDATES=0;
DELETE from TBL_USER WHERE U_NAME=UNAME;
SET SQL_SAFE_UPDATES=1;
END**
代码如下(示例):
printf("case: mysql --> delete");
if (mysql_real_query(&mysql, SQL_DELETE_TBL_USER, strlen(SQL_DELETE_TBL_USER))) {
printf("mysql_real_query: %s\n", mysql_error(&mysql));
}
5.完整代码
代码如下(示例):
#include<stdio.h>
#include<string.h>
#include<mysql.h>
#define BIEAI_DB_SERVER_IP "192.168.230.128"
#define BIEAI_DB_SERVER_PORT 3306
#define BIEAI_DB_USERNAME "admin"
#define BIEAI_DB_PASSWORD "131420"
#define BIEAI_DB_DEFAULTDB "BIEAI_DB"
#define SQL_INSERT_TBL_USER "INSERT TBL_USER(U_NAME,U_GENGDER) VALUES('lisi','boy');"
#define SQL_SELECT_TBL_USER "SELECT * FROM TBL_USER;"
#define SQL_DELETE_TBL_USER "CALL PROC_DELETE_USER('lisi')"
int bieai_mysql_select(MYSQL* handle) {
if (mysql_real_query(handle, SQL_SELECT_TBL_USER, strlen(SQL_SELECT_TBL_USER))) {
printf("mysql_real_query: %s\n", mysql_error(handle));
return -1;
}
MYSQL_RES* res = mysql_store_result(handle);
if (res == NULL) {
printf("mysql_store_result: %s\n", mysql_error(handle));
return -2;
}
int rows = mysql_num_rows(res);
printf("rows: %d\n", rows);
int fields = mysql_num_fields(res);
printf("fields: %d\n", fields);
MYSQL_ROW row;
while ((row = mysql_fetch_row(res))) {
for (int i = 0; i < fields; ++i) {
printf("%s\t", row[i]);
}
printf("\n");
}
mysql_free_result(res);
return 0;
}
int main() {
MYSQL mysql;
if (NULL == mysql_init(&mysql)) {
printf("mysql_init :%s\n", mysql_error(&mysql));
return -1;
}
if (!mysql_real_connect(&mysql, BIEAI_DB_SERVER_IP, BIEAI_DB_USERNAME, BIEAI_DB_PASSWORD, BIEAI_DB_DEFAULTDB, BIEAI_DB_SERVER_PORT, NULL, 0)) {
printf("mysql_real_connect :%s\n", mysql_error(&mysql));
return -2;
}
#if 1
printf("case: mysql --> insert");
if (mysql_real_query(&mysql, SQL_INSERT_TBL_USER, strlen(SQL_INSERT_TBL_USER))) {
printf("mysql_real_query: %s\n", mysql_error(&mysql));
}
#endif
bieai_mysql_select(&mysql);
#if 1
printf("case: mysql --> delete");
if (mysql_real_query(&mysql, SQL_DELETE_TBL_USER, strlen(SQL_DELETE_TBL_USER))) {
printf("mysql_real_query: %s\n", mysql_error(&mysql));
}
#endif
bieai_mysql_select(&mysql);
mysql_close(&mysql);
return 0;
}
总结
今天我给大家展示了Linux下mysql的安装,以及CRUD(增删改查),主要使用了c语言调用mysql的api实现。
参考资料
C/C++ Linux高级开发课程
|