我这里采用的是采用docker来启动mysql。
为了解决这个问题,你可以选择以下方法之一:
设置一个 root 密码:
docker run -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql允许空密码(不推荐在生产环境中使用):
docker run -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql使用随机密码:
docker run -e MYSQL_RANDOM_ROOT_PASSWORD=yes mysql


切换mysql


关系型数据库/非关系型数据库
- mysql清屏:你可以使用
Ctrl + L来清屏
MySQL常用命令
- 展示数据库
show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
- 创建数据库
比如说要创建一个名叫game的数据库:
create database game;
- 删除数据库
DROP DATABASE game;
这个数据库名是大小写敏感·的。
- 创建表
创建表之前需要先use该database
USE game;
CREATE TABLE player (
id INT,
name VARCHAR(100),
level INT,
exp INT,
gold DECIMAL(10,2)
);
创建表结构。
- 展示表
DESC player;

修改表
添加新列
使用
ALTER TABLE命令可以添加新列。例如,我们可以添加一个新列birth_date来存储玩家的生日:ALTER TABLE player ADD COLUMN birth_date DATE;删除列
如果你想删除某个列,可以使用
DROP COLUMN命令。例如,我们可以删除刚刚添加的birth_date列:ALTER TABLE player DROP COLUMN birth_date;修改列
你可以使用
MODIFY COLUMN命令来修改一个现有列的数据类型或其他属性。例如,我们可以将name列的长度从100修改为150:ALTER TABLE player MODIFY COLUMN name VARCHAR(150);重命名列
如果你想重命名一个列,可以使用
CHANGE COLUMN命令。例如,我们可以将exp列重命名为experience:ALTER TABLE player CHANGE COLUMN exp experience INT;添加主键
为了确保
id列中的每个值都是唯一的,我们可以将其设置为主键:ALTER TABLE player ADD PRIMARY KEY (id);添加索引
为了提高查询速度,我们可以为某些列添加索引:
ALTER TABLE player ADD INDEX idx_name (name);
插入数据
INSERT INTO player (id, name, level, exp, gold) VALUES (1, "你好", 1, 1, 1);
SELECT * FROM player;
更新表的数据
UPDATE player set level = 2 where name="你好";
SELECT * FROM player;
数据库的导入导出
1. 数据库的导出
要导出MySQL数据库,您可以使用mysqldump工具。以下是一个基本的命令示例,用于导出整个数据库到一个.sql文件:
mysqldump -u [username] -p[password] [database_name] > [filename].sql
[username]:MySQL的用户名。[password]:该用户名的密码。注意,-p和密码之间没有空格。[database_name]:您想要导出的数据库名称。[filename].sql:您想要保存的文件名。
2. 数据库的导入
要导入一个.sql文件到MySQL数据库,您可以使用以下命令:
mysql -u [username] -p[password] [database_name] < [filename].sql
参数的意义与上面的导出命令相同。
3. 表连接
表连接是关系型数据库中的一个核心概念,它允许您从两个或多个表中基于某些相关列组合数据。以下是一些常见的连接类型:
- 内连接 (INNER JOIN): 返回两个表中都有匹配的行。
- 左连接 (LEFT JOIN 或 LEFT OUTER JOIN): 返回左表中的所有行,即使右表中没有匹配的行。
- 右连接 (RIGHT JOIN 或 RIGHT OUTER JOIN): 返回右表中的所有行,即使左表中没有匹配的行。
- 全连接 (FULL JOIN 或 FULL OUTER JOIN): 返回左表和右表中的所有行。
- 交叉连接 (CROSS JOIN): 返回左表和右表中所有可能的行组合。
举例说明
假设我们有两个表:employees 和 departments。
employees 表:
| emp_id | emp_name | dept_id |
|---|---|---|
| 1 | Alice | 10 |
| 2 | Bob | 20 |
| 3 | Charlie | NULL |
departments 表:
| dept_id | dept_name |
|---|---|
| 10 | HR |
| 20 | Finance |
| 30 | Marketing |
1. 内连接
SELECT emp_name, dept_name
FROM employees
INNER JOIN departments ON employees.dept_id = departments.dept_id;
结果:
| emp_name | dept_name |
|---|---|
| Alice | HR |
| Bob | Finance |
2. 左连接
SELECT emp_name, dept_name
FROM employees
LEFT JOIN departments ON employees.dept_id = departments.dept_id;
结果:
| emp_name | dept_name |
|---|---|
| Alice | HR |
| Bob | Finance |
| Charlie | NULL |
3. 右连接
SELECT emp_name, dept_name
FROM employees
RIGHT JOIN departments ON employees.dept_id = departments.dept_id;
结果:
| emp_name | dept_name |
|---|---|
| Alice | HR |
| Bob | Finance |
| NULL | Marketing |
4. 全连接
由于MySQL不直接支持FULL JOIN,但如果它支持,结果将是:
| emp_name | dept_name |
|---|---|
| Alice | HR |
| Bob | Finance |
| Charlie | NULL |
| NULL | Marketing |
5. 交叉连接
SELECT emp_name, dept_name
FROM employees
CROSS JOIN departments;
这会返回每个员工与每个部门的所有可能组合,总共9行。
希望这个例子更清晰地展示了不同连接类型的区别。