mysql是什么数据库_mysql基本概念详解

来源:这里教程网 时间:2026-02-28 20:44:48 作者:

MySQL 是一个开源的关系型数据库管理系统(RDBMS),不是“数据库”本身,而是管理数据库的软件(即 DBMS);你日常说的“创建一个 MySQL 数据库”,实际是让 MySQL 这个 DBMS 创建了一个逻辑上的数据容器(文件夹),里面存着若干张二维表(

.frm
+
.ibd
文件)。

下面直击实操中真正卡人的几个点:

MySQL 里的“数据库”到底对应什么物理文件?

很多人连不上库、备份失败或迁移出错,根源在于误以为“数据库 = 一个文件”。其实:

MySQL 中每个数据库在磁盘上就是一个**文件夹**(如
/var/lib/mysql/myapp_db/
该文件夹下每个表对应至少两个文件:
users.frm
(表结构)、
users.ibd
(数据+索引)
.frm
文件定义列名、类型、主键等;
.ibd
文件用 B+ 树组织数据,叶子节点存完整行记录
删库(
DROP DATABASE myapp_db
)= 直接删掉整个文件夹 —— 不可逆,没回收站

为什么
CREATE TABLE
会失败?常见约束陷阱

建表看似简单,但字段定义稍有偏差,后续写入或 JOIN 就报错。关键注意:

NOT NULL
字段没给默认值,且 INSERT 时又漏填 → 报错
Field 'xxx' doesn't have a default value
VARCHAR(255)
存手机号?浪费空间;用
INT
存带前导零的编号(如 '00123')→ 零被吃掉 → 改用
CHAR(5)
或字符串类型
外键(
FOREIGN KEY
)必须满足:① 引用列有索引;② 类型严格一致(
INT
不能对
BIGINT
);③ 引用表引擎必须是 InnoDB(MyISAM 不支持)
主键自动
NOT NULL + UNIQUE
,但别再手动加这两个约束,冗余且易冲突

客户端连不上 MySQL?先盯住这三件事

不是密码错,大概率是服务、网络或权限配置没对齐:

确认 MySQL 服务真在跑:
net start mysql80
(Windows)或
sudo systemctl status mysql
(Linux)
本地连接用
localhost
127.0.0.1
行为不同:
localhost
走 socket 文件(
/tmp/mysql.sock
),
127.0.0.1
走 TCP —— 若 socket 路径不对,
localhost
直接拒绝
新用户必须显式授权:仅
CREATE USER 'dev'@'localhost'
不够,还得
GRANT SELECT,INSERT ON myapp_db.* TO 'dev'@'localhost'
,最后
FLUSH PRIVILEGES

SQL 语句执行慢?先看是不是在扫全表

90% 的慢查不是 SQL 写得差,而是缺索引或索引没用上:

EXPLAIN SELECT * FROM orders WHERE user_id = 123;
type
列:如果是
ALL
,说明正在全表扫描
复合查询条件(如
WHERE status = 'paid' AND created_at > '2025-01-01'
)要建联合索引,顺序很重要:高频过滤字段放前面(
status
比时间更离散,应放左)
LIKE '%abc'
无法用索引;
LIKE 'abc%'
可以 —— 模糊匹配别滥用前导通配符
小表(PRIMARY KEY

真正容易被忽略的是:MySQL 的“数据库”概念既轻量(就是一个文件夹),又敏感(删库即丢所有表文件);而它的 SQL 表现和底层存储(B+树、页分裂、缓冲池)之间隔着一层抽象 —— 你以为在操作逻辑表,其实每条

SELECT
都在跟磁盘页和内存缓存打交道。动手前,先想清楚你要的到底是「快速验证」还是「生产就绪」。

相关推荐