《Linux高并发服务器笔记——第六章、自我补充》
- 一、数据库
-
- 1.数据库的下载,配置和命令
-
- ①安装MySQL
- ②配置MySQL
- ③创建数据库和用户
- 2.数据库函数的介绍
- 3.代码实现
一、数据库
1.数据库的下载,配置和命令
①安装MySQL
- 在Ubuntu和Debian系统上,可以使用以下命令来安装MySQL:
sudo apt-get update
sudo apt-get install mysql-server
- 在CentOS和Fedora系统上,可以使用以下命令来安装MySQL:
sudo yum install mysql-server
sudo systemctl start mysqld
②配置MySQL
- 安装完成后,你需要进行一些配置。首先,你需要设置MySQL的root用户的密码:
sudo mysql_secure_installation
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
- 在mysqld选项的末尾添加以下行,以便MySQL可以使用UTF-8编码:
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
sudo service mysql start
sudo service mysql restart
sudo service mysql status
sudo service mysql stop
③创建数据库和用户
- 现在,你可以使用MySQL命令行客户端来创建数据库和用户。假设你的数据库名为example,用户名为user,密码为password:
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_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 类型的结构体指针
3.代码实现
#include
#include
using namespace std;
int main()
{
MYSQL * mysql = nullptr;
mysql = mysql_init(mysql);
if (mysql == nullptr)
{
cout << "mysql_init : " << mysql_error(mysql) << endl;
return 1;
}
const char * host = "localhost";
const char * uesr = "user";
const char * passwd = "passwd";
const char * dataBaseName = "mydatabase";
if (mysql_real_connect(mysql, host, uesr, passwd, dataBaseName, 3306, nullptr, 0) == nullptr)
{
cout << "mysql_real_connect : " << mysql_error(mysql) << endl;
return 1;
}
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;
return 1;
}
MYSQL_RES * result = mysql_store_result(mysql);
if (result == nullptr)
{
cout << "mysql_store_result : " << mysql_error(mysql) << endl;
return 1;
}
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);
return 0;
}
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')
列数: 4
0 name0 NULL NULL
1 name1 NULL NULL
2 name2 NULL NULL
3 name3 NULL NULL
4 name4 NULL NULL
5 name5 NULL NULL
6 name6 NULL NULL
7 name7 NULL NULL
8 name8 NULL NULL
9 name9 NULL NULL
10 name10 NULL NULL