MySQL 基础
2025-04-01 17:41:40

Linux系统安装MySQL(以Ubuntu为例)

1
2
3
4
5
6
7
8
9
# 更新apt
apt update
# 安装mysql
sudo apt install -y mysql-server
# 一般安装结束自动启动mysql服务,可以使用如下命令查看服务的状态 → active表示服务已启动
systemctl status mysql
# 若未启动,执行以下命令启动
systemctl start mysql
# 若是docker的ubuntu镜像,以上两条命令替换为 → service mysql status 和 service mysql start

Docker安装MySQL镜像

1
2
3
4
5
6
7
8
9
10
# 拉取mysql镜像
sudo docker pull mysql:8.0.26
# 启动mysql容器
# -p 3306:3306:映射容器服务的3306端口到宿主机的3306端口,外部主机可以直接通过宿主机ip:3306访问到MySQL的服务
# MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.26
# 进入容器后访问MySQL命令 → 输入密码123456
mysql -h localhost -u root -p
# navicat连接Docker的mysql镜像容器 → [参考](https://blog.csdn.net/qq_28041113/article/details/120762737?spm=1001.2014.3001.5506)
# 连接本地Docker镜像下的mysql时,主机填localhost即可,若是服务器中的mysql,需填ip

数据库基本操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# 创建/删除/选择/显示数据库 → 以game为例
create database game;
drop database game;
use game;
show databases;

# 创建/删除/查看数据表 → 以player为例
create table player(
id INT,
name VARCHAR(100),
level INT,
exp INT,
gold DECIMAL(10, 2)
);

desc player;

drop table player;

# 修改/添加/删除表的结构
alter table player modify column name VARCHAR(200);
alter table player add column last_login DATETIME;
alter table player drop column last_login;

# 向表中添加数据 & 查询/删除表中的数据
insert into player (id, name, level, exp, gold) values (1, "a", 1, 1, 1);
select * from player;
delete from player where gold = 0;

# 导出/导入数据库示例
mysqldump -u root -p demo > demo.sql;
mysql -u root -p demo < demo.sql;

# 常用语句
-- where限制查询条件实例
select * from player where gold = 0;
select * from player where level > 1 and level < 10;
select * from player where level in (1, 3);
-- 查找名字中第一个字是王,后面任意多字符的玩家
select * from player where name LIKE '王%';
-- 查找名字中包含王字的玩家
select * from player where name LIKE '%王%';
-- 查找姓王,后面一个字的玩家
select * from player where name LIKE '王_';
-- 查找邮箱为null值玩家
select * from player where email i null;

-- 子查询
select * from player where level > (select AVG(level) from player);
-- 利用查询创建添加一定限制的新表
create table player_cons select * from player where level < 4;

C++连接MySQL常用API

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <iostream>
#include <mysql.h>

using namespace std;

int main()
{
// 连接准备 → 前提是MySQL处于运行状态
const char *db_host = "localhost"; // 主机 or ip
const char *db_user = "root"; // user
const char *db_pass = "root"; // password
const char *db_name = "game"; // connect name of database
const int db_port = 3306; // port

// 1.初始化连接环境
MYSQL *mysql = mysql_init(nullptr);
if (mysql == nullptr)
{
printf("mysql_init() failed...\n");
return -1;
}

// 2.连接数据库服务器
mysql = mysql_real_connect(mysql, db_host, db_user, db_pass, db_name, db_port, nullptr, 0);
if (mysql == nullptr)
{
printf("mysql_real_connect() failed...\n");
return -1;
}

printf("connect mysql succeed!\n");

// 3.执行sql语句 → 以查询数据库game中的player为例
const char *sql = "select * from player"; // sql语句

if (mysql_query(mysql, sql) != 0)
{
printf("mysql_query() failed, result: %s\n", mysql_error(mysql));
return -1;
}

// 4.获取查询到的数据信息
MYSQL_RES *res = mysql_store_result(mysql);
if(res == nullptr)
{
printf("mysql_store_result() failed, result: %s\n", mysql_error(mysql));
return -1;
}
// 5.打印查询到的数据信息
int col = mysql_num_fields(res); // 数据结果的列数
MYSQL_FIELD *fields = mysql_fetch_fields(res); // 数据结果的列名
for (int i = 0; i < col; i++)
{
printf("%s\t\t", fields[i].name);
}
printf("\n");
// 遍历数据结果中的所有行
MYSQL_ROW row;
while ((row = mysql_fetch_row(res)) != nullptr)
{
for (int i = 0; i < col; i++)
{
printf("%s\t\t", row[i]);
}
printf("\n");
}

// 6.释放资源
mysql_free_result(res);
mysql_close(mysql);

return 0;
}