我这里采用的是采用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行。
希望这个例子更清晰地展示了不同连接类型的区别。