跳到主要内容

创建日期:2026-09-08 | 最近更新:2026-09-08 版本基线:MySQL 8.4 LTS。本系列用本机临时实例实测(mysqld 8.4.0,root 无密码、本机 socket),文中输出均为真实查询结果。

MySQL 入门:装好、连上、先认识「库表」

一句话:MySQL 是关系型数据库——数据存进「表」(行×列),表和表之间用「键」关联,你用 SQL(结构化查询语言)读写它。前端/后端项目几乎都绕不开它,所以值得系统学一遍。这个系列共 8 篇,带你从连上服务器到能设计、调优、上线。

主题
0认识与连接:库、表、引擎、字符集(本文)
1CRUD 与约束:增删改查 + 主键/唯一/外键
2查询进阶:JOIN、聚合 GROUP BY、子查询
3索引与 EXPLAIN:为什么慢、怎么读执行计划
4事务与隔离级别:ACID、锁与 MVCC 直觉
5表设计与范式:怎么把表设计得不后悔
6视图、存储过程、函数与触发器
7性能调优与生产要点

1. MySQL 是什么

  • 服务器mysqld):真正存数据、执行 SQL 的程序,监听端口(默认 3306);
  • 客户端mysql 命令行 / IDE(Navicat、DBeaver)/ 应用驱动(JDBC、mysql2…),连上服务器发 SQL;
  • 库(database):一组表的容器;表(table):数据本体,类似 Excel 工作表。
客户端(发 SQL) ──连接──▶ mysqld(服务器) ──▶ 磁盘上的数据文件

本机装好后的最小自检:

mysql --version # 客户端
mysqld --version # 服务器
mysql -u root -p # 连本机(无 -h 默认 localhost)

2. 连接 & 常用管理命令(实测输出)

本系列实例连法(socket 连接,root 空密码):mysql --socket=/tmp/mysql-lab.sock -u root。连上后先看家底:

SELECT VERSION() v, @@port AS port, @@transaction_isolation AS isolation, @@character_set_server AS cs;

真实输出:

+-------+------+-----------------+---------+
| v | port | isolation | cs |
+-------+------+-----------------+---------+
| 8.4.0 | 3307 | REPEATABLE-READ | utf8mb3 |
+-------+------+-----------------+---------+

注意两点:默认隔离级别 REPEATABLE-READ(篇 4 细讲);字符集显示 utf8mb3 是这台测试实例的服务器默认,建库请显式 utf8mb4(第 5 节)。

常用但容易忘的命令:

SHOW DATABASES; -- 看所有库
USE shop; -- 切换到 shop 库
SHOW TABLES; -- 看当前库所有表
DESC orders; -- 看表结构(列)
SHOW CREATE TABLE orders; -- 看建表语句(含索引/约束)
EXIT; -- 断开

3. 存储引擎:默认就是 InnoDB(先记住这一个)

SHOW VARIABLES LIKE 'default_storage_engine';

真实输出:

+------------------------+--------+
| Variable_name | Value |
+------------------------+--------+
| default_storage_engine | InnoDB |
+------------------------+--------+

为什么 InnoDB 是默认:它支持事务(ACID)+ 行级锁 + 外键 + 崩溃恢复——现代应用 99% 该用它。其它引擎(如 MyISAM)当历史知识知道即可,别主动选。

4. 建库建表:最小三步

CREATE DATABASE IF NOT EXISTS shop CHARACTER SET utf8mb4; -- ① 建库
USE shop;

CREATE TABLE customers ( -- ② 建表
id BIGINT AUTO_INCREMENT PRIMARY KEY, -- 主键,自增
name VARCHAR(50) NOT NULL,
email VARCHAR(120) NOT NULL UNIQUE,
city VARCHAR(30),
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
KEY idx_city (city) -- 普通索引(篇 3 细讲)
) ENGINE=InnoDB;
INSERT INTO customers (name, email, city) VALUES ('张三', 'a@x.com', '北京'); -- ③ 写一行
SELECT * FROM customers; -- 读

建表即定规矩PRIMARY KEY(每行唯一标识)、NOT NULL(不许空)、UNIQUE(不许重复)、DEFAULT(默认值)、AUTO_INCREMENT(自增)。这层「规矩」= 篇 1 的「约束」。

5. 字符集:中文不乱码的根源

  • 库/表/连接三层都可能设字符集;统一 utf8mb4(能存 emoji、中文,兼容性最好);
  • 建库时显式给:CREATE DATABASE x CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • 连接字符串里也带:mysql -h host -u root -p --default-character-set=utf8mb4;应用连接串同样写 characterEncoding=utf8mb4(Java)/ charset=utf8mb4(Node)一类参数。

乱码排查口诀:库、表、连接三方字符集不一致。全设 utf8mb4 基本就没事。

6. 本系列怎么「动手」

每篇都建议你真连一个库跑一遍,别只读。最快路径:本机装 MySQL(或 Docker 起一个),把每篇开头那句「先建 shop 库」执行掉,然后对着样例表把示例 SQL 敲一遍——SQL 不是看会的,是跑会的

样例库结构(贯穿全系列):customers(顾客) / products(商品) / orders(订单) / order_items(订单明细),四张表互相外键关联,够演示 join、索引、事务。

自测

  1. 客户端和服务器分别是哪个程序?
  2. SHOW DATABASES / SHOW TABLES / DESC 各看什么?
  3. 默认存储引擎是?它支持事务靠什么?
  4. 建库为什么要显式 utf8mb4
  5. PRIMARY KEYUNIQUE 的区别是?

下一篇:CRUD 与约束