MySQL 入门

1 概念

数据库

程序员通常把数据库管理系统 DBMS 叫做「数据库」,而人们通常把存放数据的地方叫做「数据库」,这一概念在不同人的表述中可能不是同样的东西。

我觉得应该把数据库理解为:以某种有组织的方式存储的数据集合。程序员应该把数据库本身和用于访问数据库的管理系统区分开,普通人应该把不知道是否有组织的数据和数据库区分开。

「表」table 是一种结构化文件,可以存储一个或者一组特定的数据,常见的形式为二维表格。我们可以通过表名访问到表,因此在同一个数据库中,表名具有唯一性。

模式

「模式」schema 是关于数据库和表的布局以及特性的信息。

数据类型

「数据类型」data type 即数据的类型,比如 char、float、int 等,用于限制数据的类型或者优化存储。

「列」column 是表中的一个字段,是表的基本组成元素。每列中的数据都是相同的数据类型,否则不允许数据进入。

「行」row 是表中的一个记录,通常情况下和记录可做同义替换。

主键

「主键」primary key 是表中的唯一标识。

SQL

「SQL」Structured Query Language 是结构化查询语言的缩写,是一种专门与数据库通信的语言。

2 安装

在 Mac 下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 使用 homebrew 安装
brew install mysql

# 初始化,根据提示填写
mysql_secure_installation

# 启动
brew services start mysql

# 关闭
brew services stop mysql

# 登录
mysql -u root -p

# 退出
quit

在 Ubuntu 下

1
2
3
4
5
6
# 安装服务端
sudo apt install mysql-server
# 过程中需要输入密码

# 安装客户端
sudo apt install mysql-client

使用 Docker 安装

使用 docker 直接启动,但这样做并不安全,因为密码会出现在 history 中。

1
2
3
4
docker run -d --name mysql --restart=always \
-p 3306:3306 -v /var/lib/mysql:/var/lib/mysql \
-e MYSQL_ROOT_HOST="%" -e MYSQL_ROOT_PASSWORD="123456" \
mysql/mysql-server:8.0.30 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

3 使用

常用命令

1
2
show databases; # 查看所有数据库
show tables; # 查看当前数据库中的所有表

4 常见问题

问题1: Authentication plugin ‘caching_sha2_password’ cannot be loaded

1
2
3
4
5
mysql -u root -p
# 输入密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; # 修改加密规则(password需要替换成你的密码,下同)
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; # 更新一下用户的密码
mysql>FLUSH PRIVILEGES; # 刷新权限

如果一直提示 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements,输入:

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | MEDIUM |
| validate_password.special_char_count | 1 |
+--------------------------------------+--------+
7 rows in set (0.02 sec)

密码中必须含有数字、字母、特殊字符(比如#@等),且不小于 8 位。

问题2: 忘记密码

1
2
3
4
5
6
7
8
9
10
11
12
13
# 先关闭 mysql
brew services stop mysql

# 在一个终端开启禁止验证功能的 mysqld
/opt/homebrew/bin/mysqld_safe --skip-grant-tables

# 在另一个终端重新进入mysql,设置新密码
/opt/homebrew/bin/mysql
FLUSH PRIVILEGES;
SET PASSWORD FOR 'root'@'localhost' = $PASSWORD; # $PASSWORD 改成你的新密码

# 关闭上述两个终端,重启正常的mysql
brew services start mysql

5 参考

作者

Ailln

发布于

2019-10-31

更新于

2024-03-02

许可协议

评论