数据库概念
简单来说,数据库 是一个有组织、可长期存储在计算机内、可共享、统一管理的数据集合 。你可以把它想象成一个电子化的文件柜,但功能要强大得多。管理数据库的软件称为数据库管理系统 ,我们常说的 DBMS,比如 MySQL、Oracle、SQL Server、PostgreSQL 等。
数据库优点
相比传统的文件存储,数据库解决了以下核心问题:
持久化:数据不会因为程序关闭而丢失。
高效存取:能快速地从海量数据中查询、更新信息。
数据共享与安全:多用户可安全并发访问,并有权限控制。
数据一致性:通过事务等机制,保证数据的准确和完整。
减少冗余:好的设计可以避免数据重复存储。
数据库主要类型
关系型数据库
核心概念:基于"关系模型",数据以二维表的形式组织。
关键术语:
表:存储数据的主体,如"学生表"、"课程表"。
行/记录:表中的一条数据,代表一个实体。
列/字段:表的属性,如"学号"、"姓名"。
主键:唯一标识一条记录的字段。
外键:建立表与表之间关联的字段。
优点:数据结构清晰,支持复杂的查询和事务处理,数据一致性高。
缺点:在处理海量、非结构化或高并发读写时,扩展性可能受限。
代表产品:MySQL, PostgreSQL, Oracle, SQL Server。
非关系型数据库
核心概念:不局限于固定的表结构,设计灵活,针对不同的应用场景有不同的数据模型。
主要类型:
文档型:数据存储类似 JSON 文档。代表:MongoDB, CouchDB
键值型:简单的键-值对存储。代表:Redis, Memcached
列存储型:按列族存储数据,适合大数据分析。代表:HBase, Cassandra
图数据库:用节点和边存储关系数据。代表:Neo4j
优点:schema灵活,易于水平扩展,读写性能高。
缺点:通常不支持复杂的跨文档/集合的事务和关联查询。
基本使用
连接服务器
mysql -h 127.0.0.1 -P 3306 -u root -p
注意: 如果没有写-h 127.0.0.1 默认是连接本地,如果没有写-P 3306 默认是连接3306端口号。
服务器、数据库、表关系
所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多 个数据库,一般开发人员会针对每一个应用创建一个数据库。 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。 数据库服务器、数据库和表的关系如下:

| 概念 | 计算机世界 | 图书馆比喻 | 说明 |
|---|---|---|---|
| 服务器 | 一台运行数据库软件的物理 / 虚拟计算机 | 整个图书馆大楼 | 提供存放和管理的物理 / 逻辑空间 |
| 数据库 | 数据库管理系统中的一个逻辑数据容器 | 图书馆中的一个专题书库(如 "计算机科学书库"、"文学书库") | 按主题或应用划分的逻辑单元 |
| 表 | 数据库中存储数据的二维结构 | 书库中的一个具体书架(如 "编程语言书架"、"小说书架") | 存储具体同类数据的结构 |
| 行 / 记录 | 表中的一行数据 | 书架上的一本具体的书 | 一个独立的实体 / 对象 |
| 列 / 字段 | 表中的一列属性 | 书的一个属性(如书名、作者、ISBN 号) | 实体的属性 / 特征 |
使用案例
创建数据库
create database helloworld;
使用数据库
use helloworld;
创建数据库表
create table student(
id int,
name varchar(32),
gender varchar(2)
};
表中插入数据
insert into student(id,name,gender) values(1,'张三','男');
查询表中数据
select * from student;
存储引擎
存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
MySQL的核心就是插件式存储引擎,支持多种存储引擎。
| 特性 | InnoDB | MyISAM | MEMORY | ARCHIVE |
|---|---|---|---|---|
| 事务支持 | ✅ 支持 (ACID) | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 |
| 锁的粒度 | 行级锁 | 表级锁 | 表级锁 | 行级锁 |
| 外键约束 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 |
| 数据恢复 | 支持崩溃后安全恢复 | 恢复能力弱 | 数据丢失 | 不支持 |
| 存储限制 | 64TB | 256TB | 受内存限制 | 无明确限制 |
| 存储文件 | .frm (结构) + .ibd (数据 & 索引) |
.frm + .MYD (数据) + .MYI (索引) |
仅内存 | .frm + .arz |
| MVCC | ✅ 支持(高并发基石) | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 |
| 全文索引 | ✅ MySQL 5.6+ 支持 | ✅ 支持 | ❌ 不支持 | ❌ 不支持 |
| 适用场景 | 默认选择,OLTP | 只读 / 读多写少,OLAP | 临时表 / 缓存 | 日志 / 归档 |
InnoDB
MySQL 5.5 之后默认的存储引擎。除非有特殊需求,否则永远使用 InnoDB。
核心特性:
事务安全:完全支持 ACID 特性,是 OLTP 应用的基础。
行级锁:只锁住需要修改的行,极大提高并发写性能。
外键约束:保证数据的一致性和完整性。
MVCC:多版本并发控制,读写不互斥,是高性能高并发的基础。
聚集索引 :数据文件本身(.ibd)就是主键索引的 B+ 树,数据按主键顺序物理存储。因此 InnoDB 必须有主键,且主键查询极快。
支持热备份:可以通过工具在线备份而不锁表。
MyISAM
MySQL 5.5 之前的默认引擎,现已不推荐在新项目中使用。
核心特性:
表级锁:任何写操作都会锁住整张表,并发性能差。
不支持事务:崩溃后数据可能不一致。
非聚集索引 :索引和数据是分开的(.MYI 和 .MYD 文件),索引保存的是数据行的地址指针。
压缩表:对于不常修改的数据,可压缩存储,节省空间。
全文索引:早期版本中只有 MyISAM 支持全文索引。
致命缺点:
(1)写操作会锁定全表,在写并发高的场景下是性能杀手。
(2)崩溃后数据恢复困难。