MySQL安装和使用

安装

MySQL Community Server

MySQL Community Server 是数据库服务器,它负责实际存储和管理数据。

下载地址:https://dev.mysql.com/downloads/mysql/

选择版本和操作系统,点击 Download 按钮下载。我是 macOS 14 系统,M1 芯片,这里就选择了 macOS 14 (ARM, 64-bit), DMG Archive 下载。

安装完成后,打开系统设置,拉到最下方就能看到 MySQL,点击按钮运行 MySQL 服务。

MySQL Workbench

MySQL Workbench 是一个客户端应用程序,你可以用它来连接到 MySQL Community Server,进行数据库设计、开发和管理等操作。

要注意版本保持一致,下载地址:https://dev.mysql.com/downloads/workbench/

安装后打开,点击 Connection 或者新建一个,输入密码就OK了。

环境变量

查看当前 shell

echo $SHELL

如果是 /bin/bash,说明用的是 bash,如果是 /bin/zsh,说明用的是 zsh。

如果是 bash:

# 1. 更改
vim ~/.bash_profile

# 2. 添加
export PATH=${PATH}:/usr/local/mysql/bin

# 3. 更新
source ~/.bash_profile

如果是 zsh:

# 1. 更改
vim ~/.zshrc

# 2. 添加
export PATH=${PATH}:/usr/local/mysql/bin

# 3. 更新
source ~/.zshrc

进入 MySQL CLI

mysql -u root -p

输入安装时密码,即可成功进入 MySQL CLI。

命令行工具

全部命令行请查看官方文档:mysql Client Commands

下面列举几种常用的:

\g\G 都是命令的结束符,除此之外,也可以直接使用 ; 来结束命令。

\g # 将命令发送到 MySQL 服务器
\G # 将命令发送到 MySQL 服务器,并且格式化输出
\c # 清除当前输入
\q # 退出 MySQL

基础使用

连接 MySQL

mysql -u root -p
Enter password:******

基本命令

查看数据库列表

SHOW DATABASES;

创建数据库

CREATE DATABASE testdb;

使用数据库

USE testdb;

创建表

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
);

查看表结构

DESCRIBE users;

数据操作

插入数据

INSERT INTO users (name, email) VALUES ('John Doe', '[email protected]');

查询数据

SELECT * FROM users;

更新数据

UPDATE users SET email = '[email protected]' WHERE name = 'John Doe';

删除数据

DELETE FROM users WHERE name = 'John Doe';

常用功能

条件查询

SELECT * FROM users WHERE email LIKE '%@example.com';

排序查询

SELECT * FROM users ORDER BY name ASC;

聚合函数

SELECT COUNT(*) FROM users;
SELECT AVG(id) FROM users;

多表操作

创建第二个表

CREATE TABLE orders (
    order_id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT,
    product_name VARCHAR(100),
    FOREIGN KEY (user_id) REFERENCES users(id)
);

连接查询

SELECT users.name, orders.product_name
FROM users
JOIN orders ON users.id = orders.user_id;

SELECT users.name, orders.product_name 子句指定我们希望从数据库中提取的列,这里会提取到两个列:

  • users 表中的 name 列(users.name)
  • orders 表中的 product_name 列(orders.product.name) FROM users 子句指定我们查询的第一个表,即 users 表。 JOIN orders ON users.id = orders.user_id 子句用于将两个表连接起来。即使用内连接(INNER JOIN)将 users 表和 orders 表关联起来。连接条件是 users.id = orders.user_id。

内连接(INNER JOIN)会返回两个表中满足条件的所有记录。如果一条记录在 users 表和 orders 表中都有对应的匹配记录,那么这条记录会被包括在结果集中。简单来说,这个查询会返回所有有订单的用户及其订单的产品名称。

举个例子,假如有以下两个表:

users 表:

id name
1 Alice
2 Bob
3 Charlie

orders 表:

order_id user_id product_name
101 1 Laptop
102 1 SmartPhone
103 2 Tablet

执行上述 SQL 语句后,查询结果是:

name product_name
Alice Laptop
Alice Smartphone
Bob Tablet

常见问题

用 mysql workbench 新建 table 时没有 apply 按钮

8.0.36 版本有问题,替换成 8.0.34 就正常使用了。

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

运行下方代码会报错

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin'

错误信息:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements。密码不符合安全要求,改下密码的安全要求就可以了。解决步骤:

登录 MySQL

mysql -u root -p

检查当前密码策略

SHOW VARIABLES LIKE 'validate_password%';
+-------------------------------------------------+--------+
| Variable_name                                   | Value  |
+-------------------------------------------------+--------+
| validate_password.changed_characters_percentage | 0      |
| 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      |
+-------------------------------------------------+--------+

修改当前密码策略

SET GLOBAL validate_password.length=4;
SET GLOBAL validate_password.policy=LOW;

现在密码策略已经修改了

+-------------------------------------------------+-------+
| Variable_name                                   | Value |
+-------------------------------------------------+-------+
| validate_password.changed_characters_percentage | 0     |
| validate_password.check_user_name               | ON    |
| validate_password.dictionary_file               |       |
| validate_password.length                        | 4     |
| validate_password.mixed_case_count              | 1     |
| validate_password.number_count                  | 1     |
| validate_password.policy                        | LOW   |
| validate_password.special_char_count            | 1     |
+-------------------------------------------------+-------+

刷新权限并再次尝试修改密码

FLUSH PRIVILEGES
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';