MySQL 概述与 macOS 安装
本节内容
- 版本基线统一为 MySQL Community Server 9.6.0。
- 区分数据库、DBMS、SQL 的区别。
- 记录 MySQL 客户端/服务端架构。
- 记录 macOS 下安装、启动、停止、连接和排错命令。
- 梳理 MySQL 中数据库、表、行、列、字段、记录之间的关系。
核心概念
数据库
数据库(Database),通常简称 DB。它不是某一个具体软件,而是"有组织地存储数据的仓库"。
数据库强调的是数据组织能力,例如:
- 数据按表结构保存。
- 字段有明确的数据类型。
- 可以用条件快速查询。
- 可以保证一定的数据一致性。
- 多个用户或程序可以同时访问。
数据库还要考虑备份、恢复、权限、性能、并发和可靠性。
数据库管理系统
数据库管理系统(Database Management System),简称 DBMS。它是用于管理数据库的大型软件。
MySQL、Oracle、PostgreSQL、SQL Server、SQLite、MariaDB 都属于 DBMS。它们负责:
- 创建数据库和表。
- 插入、修改、删除、查询数据。
- 控制用户权限。
- 处理并发访问。
- 维护事务一致性。
- 管理磁盘上的数据文件、日志文件和内存缓存。
日常说「装了个数据库」,准确来说是装了一个 DBMS。
SQL
SQL(Structured Query Language),即结构化查询语言。它是操作关系型数据库的标准语言。
SQL 不是 MySQL 独有的语言。Oracle、PostgreSQL、SQL Server、SQLite 也都支持 SQL,只是不同数据库会有自己的扩展语法和细节差异。
在 MySQL 中,常见 SQL 可以分为:
| 分类 | 全称 | 作用 |
|---|---|---|
| DDL | Data Definition Language | 定义数据库对象,例如数据库、表、字段 |
| DML | Data Manipulation Language | 操作表中的数据,例如新增、修改、删除 |
| DQL | Data Query Language | 查询表中的数据 |
| DCL | Data Control Language | 管理用户和权限 |
后续 SQL 笔记会按这个分类继续整理。
关系型数据库
MySQL 是关系型数据库管理系统,英文常写作 RDBMS。
关系型数据库的基本组织方式是二维表:
| id | name | age |
|---|---|---|
| 1 | Tom | 19 |
| 2 | Jerry | 20 |
表中的每一行表示一条记录,每一列表示一个字段。字段有自己的名称和数据类型,例如 id 是整数,name 是字符串,age 是整数。
关系型数据库适合保存订单、账户、用户这类结构化数据。
MySQL 是什么
MySQL 是一个开源关系型数据库管理系统。早期由 MySQL AB 公司开发,后来 Sun 收购 MySQL AB,Oracle 又收购 Sun,所以现在 MySQL 属于 Oracle 旗下产品。
MySQL 常见版本线包括:
- MySQL Community Server:社区版,免费使用。
- MySQL Enterprise Edition:商业版,包含企业支持和额外企业特性。
本笔记固定使用:
MySQL Community Server 9.6.0
MySQL 的客户端/服务端架构
MySQL 由服务端和客户端两部分组成。
服务端通常是:
mysqld
mysqld 负责真正管理数据文件、内存、连接、事务、锁、日志和 SQL 执行。
客户端可以是:
mysql
也可以是 MySQL Workbench、DataGrip、Navicat、应用程序里的 JDBC/MySQL Connector 等。
连接关系可以理解为:
mysql 客户端 -> mysqld 服务端 -> 数据文件与日志文件
所以在终端执行:
mysql -u root -p
所以 mysql -u root -p 做的事情是让客户端连接到 mysqld 服务端,不是直接操作数据文件。
macOS 安装方式
我这里使用 Homebrew 安装。
安装:
brew install mysql
启动服务:
brew services start mysql
停止服务:
brew services stop mysql
重启服务:
brew services restart mysql
查看服务状态:
brew services list
查看安装版本:
mysql --version
检查端口
MySQL 默认监听端口是 3306。
检查本机是否有进程监听 3306:
lsof -nP -iTCP:3306 -sTCP:LISTEN
如果看到 mysqld,说明 MySQL 服务端正在监听 TCP 连接。
也可以检查进程:
ps aux | grep mysqld
连接 MySQL
最常见的命令:
mysql -u root -p
含义:
| 参数 | 含义 |
|---|---|
mysql |
MySQL 命令行客户端 |
-u root |
使用 root 用户连接 |
-p |
提示输入密码 |
输入 -p 后不要直接在命令行写密码。推荐让客户端提示输入,即输入-p后直接回车,等待提示再输入:
mysql -u root -p
不推荐:
mysql -u root -pYourPassword
把密码直接放在命令行里可能被 shell 历史或系统进程列表记录,安全性不好。
指定主机和端口
连接本机默认端口:
mysql -h 127.0.0.1 -P 3306 -u root -p
参数含义:
| 参数 | 含义 |
|---|---|
-h |
MySQL 服务端所在主机 |
-P |
MySQL 服务端端口,大写 P |
-u |
用户名 |
-p |
提示输入密码 |
localhost 和 127.0.0.1 在 macOS 上的区别:
localhost通常优先走 Unix socket。127.0.0.1走 TCP 连接。
遇到 socket 路径错误时,试试:
mysql -h 127.0.0.1 -P 3306 -u root -p
如果你明确要指定 socket:
mysql -u root -p --socket=/tmp/mysql.sock
实际 socket 路径取决于安装方式和配置文件。
连接成功后的基本检查
连接进入 MySQL 后,可以执行:
SELECT VERSION();
查看当前用户:
SELECT USER(), CURRENT_USER();
查看当前数据库:
SELECT DATABASE();
查看所有数据库:
SHOW DATABASES;
退出客户端:
EXIT;
或者:
QUIT;
初始化学习数据库
后续笔记统一使用 mysql_basic 作为学习数据库。
连接 MySQL 后执行:
CREATE DATABASE IF NOT EXISTS mysql_basic
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_0900_ai_ci;
USE mysql_basic;
确认当前数据库:
SELECT DATABASE();
如果返回 mysql_basic,说明当前数据库切换成功。
数据模型
关系型数据库中,数据通常按这样的层级组织:
数据库管理系统 MySQL
-> 数据库 database/schema
-> 表 table
-> 行 row/record
-> 列 column/field
