前言

这篇文章记录一些 MySQL 相关的内容。虽然大学期间开过 MySQL 相关的课程,但是没怎么认真听 (┭┮﹏┭┮)

下载 MySQL 数据库

点击这里下载 MySQL 数据库

  1. 进入下载程序第一步时先选择 Full 选项,然后点击 next 进行下一步。
  2. 点击 Back 回到上一步重新选择 Custon 选项,然后再次点击 next 进行下一步,这时所有组件就都选择上了。
  3. (可选) 更改下载位置。先点击其中一个组件,然后点击 Advanced Options, 将 MySQL 前的都删掉,改成 D:\ (安装到D盘)
  4. 将所有组件安装位置更改好后无脑下一步就行了。
  5. 安装好后配置环境变量,将 MySQL server x.x 文件夹内的 bin 文件夹路径加入环境变量就行了。

MySQL 相关命令行

启动与停止 MySQL 服务

注: 需要管理员运行 cmd 终端控制台

运行以下命令启动 MySQL 服务

1
net start mysql80

运行以下命令停止 MySQL 服务

1
net start mysql80

登录 MySQL 数据库

将环境变量配置好后,运行以下命令可以登录 MySQL 数据库

1
mysql -u root -p

查看 MySQL 服务运行的端口

登录到 MySQL 后输入以下命令查看 MySQL 服务运行的端口

1
SHOW GLOBAL VARIABLES LIKE 'PORT';

连接到 VSCode 编辑器

  1. 在扩展中输入 MySQL 进行搜索,选择需要的扩展 (官方或者第三方的扩展都可以)
  2. 安装好后左侧会出现新的菜单栏目,选择后点击连接数据库
  3. 输入密码然后点击链接即可完成连接

MySQL 中基础语法

创建数据库

1
CREATE DATABASE <DATABASE_NAME>;

使用数据库

1
USE <DATABASE_NAME>;

创建表格

1
2
3
4
5
6
7
CREATE TABLE `admin`  (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
`username` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名',
`password` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密码',
`adminType` int(11) NULL DEFAULT NULL COMMENT '管理员类型',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '管理员' ROW_FORMAT = Dynamic;

注:

  • AUTO_INCREMENT 代表此字段自动递增。
  • COMMENT 为注解。
  • CHARACTER SET utf8 指定字符集。
  • COLLATE utf8_general_ci 指定字段排序规则。
  • NULL DEFAULT NULL 允许字段为空,若是没有传入数据则自动为空。
  • ENGINE = InnoDB 指定引擎为 InnoDB。
  • AUTO_INCREMENT = 5 设置自增计数器从 5 开始,即下一行插入的 id 自动为 5。
  • ROW_FORMAT = Dynamic 动态行格式,变长字段按实际长度存储,是 InnoDB 默认格式,能节省空间。

插入数据

1
2
3
INSERT INTO <DB_NAME>.<TABLE_NAME> (id, user_name, user_passworld) VALUES 
(..., ..., ...),
(..., ..., ...);

新增表格列

1
2
ALTER TABLE test_db.test_table
ADD bir_day VARCHAR(255) NOT NULL

更新数值

1
2
3
UPDATE test_db.test_table
SET bir_day = '2026-06-09'
WHERE id = 1;

删除表中的任意数值

1
2
DELETE FROM test_db.test_table
WHERE id = 2;

删除表

1
DROP TABLE IF EXISTS <DB_NAME>.<TABLE_NAME>;

删除数据库

1
DROP DATABASE <DB_NAME>; 

排序

1
2
3
4
5
6
7
8
-- 按年龄升序排序 (默认)
SELECT * FROM users ORDER BY age;

-- 按年龄降序排序
SELECT * FROM users ORDER BY age DESC;

-- 先按城市升序,再按年龄降序
SELECT * FROM users ORDER BY city ASC, age DESC;

查找

条件查询

1
2
3
4
5
SELECT (DISTINCT) *
--DISTINCT表示不重复,而*表示所有,可以改为列表名,用逗号分隔
FROM <DB_NAME>.<TABLE_NAME>
WHERE id <= 20 AND user_name != 'TOM' --判断条件
ORDER BY id ASC/DESC; --排序

模糊查询

1
2
3
4
5
-- 查询名字以 '张' 开头的用户 (% 表示任意字符)
SELECT * FROM users WHERE name LIKE '张%';

-- 查询名字中包含 '小' 的用户
SELECT * FROM users WHERE name LIKE '%小%';

分组查询

基础语法

1
2
3
4
5
-- 统计每个城市有多少用户
SELECT city, COUNT(*) FROM users GROUP BY city;

-- 计算每个城市的平均年龄
SELECT city, AVG(age) FROM users GROUP BY city;

分组后的筛选,WHERE 是在分组前过滤行,HAVING 是在分组后过滤组。

1
2
3
4
5
-- 查询用户数量大于 2 的城市
SELECT city, COUNT(*) as count
FROM users
GROUP BY city
HAVING count > 2;

连接 (JOIN)

表A

id name
1 张三
2 李四
3 王五

表B

studemt_id student_name
1 90
2 80

内连接

只保留两个表中能匹配上的数据(“双选”),都能匹配才显示

1
2
3
SELECT students.name, scores.score
FROM students
INNER JOIN scores ON students.id = scores.student_id;

结果:

name score
张三 90
李四 80
王五不存在所以这行没有 —

左/右连接

保留左表所有数据,右表能匹配就匹配,匹配不上就填 NULL(“一方情愿”),FROM 后的表更大,不相匹配也显示 NULL。

1
2
3
SELECT students.name, scores.score
FROM students
LEFT JOIN scores ON students.id = scores.student_id;

结果:

name score
张三 90
李四 80
王五 NULL

右连接与此原理相同,侧重表相反

分株查询

判断条件表格

符号 意义
= 等于
!= 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 两值之间
IN 一组值里
LIKE 相似匹配
AND 与
OR 或
NOT 或 ! 非

聚合函数

常用聚合函数

1
2
3
4
5
6
7
8
-- 计算用户总数
SELECT COUNT(*) FROM users;

-- 计算平均年龄
SELECT AVG(age) FROM users;

-- 计算最大年龄和最小年龄
SELECT MAX(age), MIN(age) FROM users;

添加用户

1
2
3
4
5
6
7
8
-- 旧版添加语句
CREATE USER db_train@'%' IDENTIFIED WITH mysql_native_password BY 'db_train';

-- 新版添加语句
CREATE USER db_train@'%' IDENTIFIED BY 'db_train';

-- 授权语句
GRANT ALL ON db_train.* TO db_train@'%';

注:

  • 创建用户中的@'%'指定该用户允许登录的来源主机。% 是通配符,表示任意 IP/主机都可以远程连接。可以使用@'192.168.1.%'限定来源。如果是 @’localhost’ 则只允许本机连接。
  • IDENTIFIED WITH mysql_native_password BY 'db_train' 或者 IDENTIFIED BY 'db_train' 代表创建用户密码为 db-train
  • 授权语句中 GRANT ALL 授予全部权限。ON db_train.*作用范围是 db_train 这个库下的所有表。TO db_train@'%' 授予给刚才创建的用户 db_train。
  • 也可以不使用 GRANT ALL 可以将其换成 GRANT SELECT, INSERT, UPDATE, DELETE, ... 代表授予指定操作权限。

结语

为图书馆项目打下了数据库基础 (;′⌒`)