LOADING

加载过慢请开启缓存 浏览器默认开启

MySqlInOneHour

2023/9/18 MySQL

我这里采用的是采用docker来启动mysql

为了解决这个问题,你可以选择以下方法之一:

  1. 设置一个 root 密码:

    docker run -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql
    
  2. 允许空密码(不推荐在生产环境中使用):

    docker run -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql
    
  3. 使用随机密码:

    docker run -e MYSQL_RANDOM_ROOT_PASSWORD=yes mysql
    

image-20230918213252741

image-20230918213300244

切换mysql

image-20230918213330283

image-20230918213413786

关系型数据库/非关系型数据库

  • 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;

image-20230919140254679

  • 修改表

  • 添加新列

    使用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. 表连接

表连接是关系型数据库中的一个核心概念,它允许您从两个或多个表中基于某些相关列组合数据。以下是一些常见的连接类型:

  1. 内连接 (INNER JOIN): 返回两个表中都有匹配的行。
  2. 左连接 (LEFT JOIN 或 LEFT OUTER JOIN): 返回左表中的所有行,即使右表中没有匹配的行。
  3. 右连接 (RIGHT JOIN 或 RIGHT OUTER JOIN): 返回右表中的所有行,即使左表中没有匹配的行。
  4. 全连接 (FULL JOIN 或 FULL OUTER JOIN): 返回左表和右表中的所有行。
  5. 交叉连接 (CROSS JOIN): 返回左表和右表中所有可能的行组合。

举例说明

假设我们有两个表:employeesdepartments

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行。

希望这个例子更清晰地展示了不同连接类型的区别。