mysql -u root -p
CREATE DATABASE example;
CREATE USER'user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON example.* TO 'user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
现在,你可以用新的用户登录并使用数据库了:
mysql -u user -p
USE example;
2.数据库函数的介绍
#include<mysql/mysql.h>
MYSQL *mysql_init(MYSQL *mysql);
功能:为 MYSQL 结构体分配内存
参数:
- mysql:一个 MYSQL 结构体,中间有很多字段
返回值:m
- 成功:返回一个指向 MYSQL 的指针
- 失败:NULL
MYSQL *mysql_real_connect(MYSQL *mysql,constchar*host,constchar*user,constchar*passwd,constchar*db,unsignedint port,constchar*unix_socket,unsignedlong client_flag);
功能:建立与 MySQL 数据库服务器连接的函数
参数:
- mysql:MYSQL结构体的指针,调用函数前必须先调用 mysql_init() 函数进行初始化
- host:主机名或者 ip 地址,NULL 表示本地连接
- uesr:连接 MySQL 数据库的用户名
- passwd:连接 MySQL 数据库的密码
- db:要连接的数据库名。NULL 表示不指定默认数据库
- port:MySQL 数据库服务器的端口号
- unix_socket:用于本地连接的 Unix 套接字文件路径, 一般设置为 NULL- client_flag:客户端连接选项,例如设置字符集、启用压缩,可以设置 0
返回值:
- 成功:返回一个MYSQL结构体的指针
- 失败:返回NULLintmysql_query(MYSQL *mysql,constchar*query);
功能:该函数用于执行一条 MySQL 查询语句
参数:
- mysql:通过 mysql_init() 函数初始化好的 MySQL 连接对象
- query:即待执行的SQL查询语句
返回值:
- 成功:返回 0- 失败:返回非 0
MYSQL_RES *mysql_store_result(MYSQL *mysql);
功能:从 MySQL 服务器上检索结果集并将其存储在客户端内存中
参数:
- mysql:过 mysql_init() 函数初始化好的 MySQL 连接对象
返回值:
- 成功:函数将返回一个MYSQL_RES类型的结构体指针,指向存储结果集的内存块
- 失败:返回 NULLunsignedintmysql_num_fields(MYSQL_RES *result);
功能:用于获取结果集中的字段数(列数)
参数:
- result:一个 MYSQL_RES 类型的结构体指针,指向存储结果集
返回值:
- 成功:返回结果集中的字段数(列数)
- 失败:-1
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
功能:用于逐行获取结果集中的数据
参数:
- result:一个MYSQL_RES类型的结构体指针,指向存储结果集
返回值:
- 成功:如果还有更多的行可供获取,该函数将返回一个 MYSQL_ROW 类型的结构体指针,
指向下一行数据, 多使用 while 获取实现
- 失败:返回 NULLvoidmysql_free_result(MYSQL_RES *result);
功能:用于释放结果集的内存块
参数:
- result:一个 MYSQL_RES 类型的结构体指针,指向存储结果集的内存块
voidmysql_close(MYSQL *mysql);
功能:用于关闭与MySQL服务器的连接
参数:
- mysql:一个 MYSQL 类型的结构体指针
3.代码实现
/*
#include <mysql/mysql.h>
MYSQL *mysql_init(MYSQL *mysql);
功能:为 MYSQL 结构体分配内存
参数:
- mysql:一个 MYSQL 结构体,中间有很多字段
返回值:m
- 成功:返回一个指向 MYSQL 的指针
- 失败:NULL
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:MYSQL结构体的指针,调用函数前必须先调用 mysql_init() 函数进行初始化
- host:主机名或者 ip 地址,NULL 表示本地连接
- uesr:连接 MySQL 数据库的用户名
- passwd:连接 MySQL 数据库的密码
- db:要连接的数据库名。NULL 表示不指定默认数据库
- port:MySQL 数据库服务器的端口号
- unix_socket:用于本地连接的 Unix 套接字文件路径, 一般设置为 NULL
- client_flag:客户端连接选项,例如设置字符集、启用压缩,可以设置 0
返回值:
- 成功:返回一个MYSQL结构体的指针
- 失败:返回NULL
int mysql_query(MYSQL *mysql, const char *query);
功能:该函数用于执行一条 MySQL 查询语句
参数:
- mysql:通过 mysql_init() 函数初始化好的 MySQL 连接对象
- query:即待执行的SQL查询语句
返回值:
- 成功:返回 0
- 失败:返回非 0
MYSQL_RES *mysql_store_result(MYSQL *mysql);
功能:从 MySQL 服务器上检索结果集并将其存储在客户端内存中
参数:
- mysql:过 mysql_init() 函数初始化好的 MySQL 连接对象
返回值:
- 成功:函数将返回一个MYSQL_RES类型的结构体指针,指向存储结果集的内存块
- 失败:返回 NULL
unsigned int mysql_num_fields(MYSQL_RES *result);
功能:用于获取结果集中的字段数(列数)
参数:
- result:一个 MYSQL_RES 类型的结构体指针,指向存储结果集
返回值:
- 成功:返回结果集中的字段数(列数)
- 失败:-1
MYSQL_ROW mysql_fetch_row(MYSQL_RES *result);
功能:用于逐行获取结果集中的数据
参数:
- result:一个MYSQL_RES类型的结构体指针,指向存储结果集
返回值:
- 成功:如果还有更多的行可供获取,该函数将返回一个 MYSQL_ROW 类型的结构体指针,
指向下一行数据, 多使用 while 获取实现
- 失败:返回 NULL
void mysql_free_result(MYSQL_RES *result);
功能:用于释放结果集的内存块
参数:
- result:一个 MYSQL_RES 类型的结构体指针,指向存储结果集的内存块
void mysql_close(MYSQL *mysql);
功能:用于关闭与MySQL服务器的连接
参数:
- mysql:一个 MYSQL 类型的结构体指针
*/#include<mysql/mysql.h>#include<iostream>usingnamespace std;intmain(){
MYSQL * mysql =nullptr;// 初始化数据库
mysql =mysql_init(mysql);if(mysql ==nullptr){
cout <<"mysql_init : "<<mysql_error(mysql)<< endl;return1;}// 连接数据库//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);constchar* host ="localhost";constchar* uesr ="user";constchar* passwd ="passwd";constchar* dataBaseName ="mydatabase";if(mysql_real_connect(mysql, host, uesr, passwd, dataBaseName,3306,nullptr,0)==nullptr){
cout <<"mysql_real_connect : "<<mysql_error(mysql)<< endl;return1;}for(int i =0; i <=10; i ++){
string s ="insert into users (id, username) values(";
s +=to_string(i);
s +=", 'name";
s +=to_string(i);
s.push_back('\'');
s.push_back(')');
cout << s << endl;mysql_query(mysql, s.c_str());}// 查询表内容if(mysql_query(mysql,"select * from users")!=0){
cout <<"mysql_query : "<<mysql_error(mysql)<< endl;return1;}// MYSQL_RES *mysql_store_result(MYSQL *mysql);// 获取查询结果
MYSQL_RES * result =mysql_store_result(mysql);if(result ==nullptr){
cout <<"mysql_store_result : "<<mysql_error(mysql)<< endl;return1;}int rowNum =mysql_num_fields(result);
cout <<"列数: "<< rowNum << endl;// 读取每一行数据
MYSQL_ROW row;while((row =mysql_fetch_row(result))!=nullptr){for(int i =0; i < rowNum; i ++){
cout <<(row[i]==nullptr?"NULL": row[i])<<" ";}
cout << endl;}mysql_free_result(result);mysql_close(mysql);return0;}
结果
insert into users(id, username)values(0,'name0')
insert into users(id, username)values(1,'name1')
insert into users(id, username)values(2,'name2')
insert into users(id, username)values(3,'name3')
insert into users(id, username)values(4,'name4')
insert into users(id, username)values(5,'name5')
insert into users(id, username)values(6,'name6')
insert into users(id, username)values(7,'name7')
insert into users(id, username)values(8,'name8')
insert into users(id, username)values(9,'name9')
insert into users(id, username)values(10,'name10')
列数: 40 name0 NULLNULL1 name1 NULLNULL2 name2 NULLNULL3 name3 NULLNULL4 name4 NULLNULL5 name5 NULLNULL6 name6 NULLNULL7 name7 NULLNULL8 name8 NULLNULL9 name9 NULLNULL10 name10 NULLNULL