创建日期:2026-09-08 | 最近更新:2026-09-08 版本基线:MySQL 8.4 LTS。本系列用本机临时实例实测(
mysqld 8.4.0,root 无密码、本机 socket),文中输出均为真实查询结果。
MySQL 入门:装好、连上、先认识「库表」
一句话:MySQL 是关系型数据库——数据存进「表」(行×列),表和表之间用「键」关联,你用 SQL(结构化查询语言)读写它。前端/后端项目几乎都绕不开它,所以值得系统学一遍。这个系列共 8 篇,带你从连上服务器到能设计、调优、上线。
| 篇 | 主题 |
|---|---|
| 0 | 认识与连接:库、表、引擎、字符集(本文) |
| 1 | CRUD 与约束:增删改查 + 主键/唯一/外键 |
| 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、索引、事务。
自测
- 客户端和服务器分别是哪个程序?
SHOW DATABASES / SHOW TABLES / DESC各看什么?- 默认存储引擎是?它支持事务靠什么?
- 建库为什么要显式
utf8mb4? PRIMARY KEY和UNIQUE的区别是?
下一篇:CRUD 与约束。