前言
这篇文章记录一些 MySQL 相关的内容。虽然大学期间开过 MySQL 相关的课程,但是没怎么认真听 (┭┮﹏┭┮)
下载 MySQL 数据库
点击这里下载 MySQL 数据库
- 进入下载程序第一步时先选择 Full 选项,然后点击 next 进行下一步。
- 点击 Back 回到上一步重新选择 Custon 选项,然后再次点击 next 进行下一步,这时所有组件就都选择上了。
- (可选) 更改下载位置。先点击其中一个组件,然后点击 Advanced Options, 将 MySQL 前的都删掉,改成 D:\ (安装到D盘)
- 将所有组件安装位置更改好后无脑下一步就行了。
- 安装好后配置环境变量,将 MySQL server x.x 文件夹内的 bin 文件夹路径加入环境变量就行了。
MySQL 相关命令行
启动与停止 MySQL 服务
注: 需要管理员运行 cmd 终端控制台
运行以下命令启动 MySQL 服务
运行以下命令停止 MySQL 服务
登录 MySQL 数据库
将环境变量配置好后,运行以下命令可以登录 MySQL 数据库
查看 MySQL 服务运行的端口
登录到 MySQL 后输入以下命令查看 MySQL 服务运行的端口
1
| SHOW GLOBAL VARIABLES LIKE 'PORT';
|
连接到 VSCode 编辑器
- 在扩展中输入 MySQL 进行搜索,选择需要的扩展 (官方或者第三方的扩展都可以)
- 安装好后左侧会出现新的菜单栏目,选择后点击连接数据库
- 输入密码然后点击链接即可完成连接
MySQL 中基础语法
创建数据库
1
| CREATE DATABASE <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) *
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
| SELECT city, COUNT(*) as count FROM users GROUP BY city HAVING count > 2;
|
连接 (JOIN)
表A
表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, ... 代表授予指定操作权限。
结语
为图书馆项目打下了数据库基础 (;′⌒`)