Skip to content

数据库速查

概念 + 命令,面向上手。新增存储引擎 / 索引 / 分表分库 / 执行顺序 / EXPLAIN / 慢查询等深度内容。


一、关系型 vs 非关系型

关系型(SQL)非关系型(NoSQL)
代表MySQL / PostgreSQL / Oracle / 达梦 DMMongoDB / Redis / ES
数据结构表(行+列),严格模式文档 / 键值 / 图
关联外键 JOIN嵌入或应用层关联
场景业务系统(订单、用户、权限)缓存、日志、搜索

二、核心概念

概念解释
表(Table)行 = 记录,列 = 字段
主键(PK)唯一标识一条记录
外键(FK)关联另一张表主键
索引(Index)加速查询
事务BEGIN → 操作 → COMMIT / ROLLBACK

事务 ACID

  • Atomicity:要么全做,要么全不做
  • Consistency:数据从一致状态到另一一致状态
  • Isolation:并发事务互不干扰
  • Durability:提交后永久保存

隔离级别

级别脏读不可重复读幻读
READ UNCOMMITTEDYYY
READ COMMITTEDNYY
REPEATABLE READ(InnoDB 默认)NN基本避免
SERIALIZABLENNN

索引

类型说明
主键索引唯一、非空、聚簇索引(InnoDB 物理排序)
唯一索引值唯一,可为 NULL
普通索引加速查询
联合索引多列组合,最左前缀原则
全文索引文本搜索
  • B+Tree:InnoDB 默认,叶子节点形成有序双向链表,适合范围查询和排序
  • 聚簇 vs 二级:聚簇索引(主键)叶子存完整行 → 二级索引查完需回表;覆盖索引可避免回表

分表分库

策略说明
垂直分库按业务拆:用户库 / 订单库
垂直分表大表拆列:高频列主表 + 详情扩展表
水平分库按行拆分到不同库(hash / range 路由)
水平分表同库内按行拆成多张结构相同的小表

常见问题:跨分片 JOIN / 事务、全局 ID(雪花)、count 和分页复杂化。

SQL 执行顺序

FROM → ON → JOIN → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY → LIMIT

EXPLAIN 关键字段

字段关注
typeALL < index < range < ref < eq_ref < const(越靠后越好)
key实际使用的索引
rows预估扫描行数
ExtraUsing index(覆盖索引,好)/ Using filesort / Using temporary(差)

慢查询

sql
SHOW VARIABLES LIKE 'slow_query%';
SHOW VARIABLES LIKE 'long_query_time';
SET GLOBAL slow_query_log = ON;

三、MySQL 操作

连接

bash
mysql -u root -p                    # 本地
mysql -h 192.168.1.100 -u root -p   # 远程

库/表

sql
SHOW DATABASES;
CREATE DATABASE mydb CHARACTER SET utf8mb4;
USE mydb;
SHOW TABLES;
DESC tablename;

建表

sql
CREATE TABLE users (
  id       INT PRIMARY KEY AUTO_INCREMENT,
  name     VARCHAR(50) NOT NULL,
  age      INT DEFAULT 0,
  created  DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

索引操作

sql
CREATE INDEX idx_name ON users(name);
CREATE UNIQUE INDEX idx_email ON users(email);
SHOW INDEX FROM users;
DROP INDEX idx_name ON users;

CRUD

sql
INSERT INTO users (name, age) VALUES ('张三', 20);
INSERT INTO users (name, age) VALUES ('a', 1), ('b', 2);
UPDATE users SET age = 21 WHERE id = 1;
DELETE FROM users WHERE id = 1;

SELECT id, name FROM users WHERE age >= 18 ORDER BY id DESC LIMIT 10;
SELECT * FROM users WHERE name LIKE '张%';
SELECT * FROM users WHERE id IN (1,2,3);
SELECT * FROM users WHERE age BETWEEN 18 AND 30;

-- JOIN
SELECT u.name, o.amount FROM users u LEFT JOIN orders o ON o.user_id = u.id;

-- 分页优化(深分页用 id 定位)
SELECT * FROM users WHERE id > 10000 ORDER BY id LIMIT 10;

事务

sql
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;   -- 或 ROLLBACK;

用户与权限

sql
CREATE USER 'dev'@'%' IDENTIFIED BY 'pass123';
GRANT ALL ON mydb.* TO 'dev'@'%';
SHOW GRANTS FOR 'dev'@'%';
DROP USER 'dev'@'%';

备份恢复

bash
mysqldump -u root -p mydb > mydb.sql
mysql -u root -p mydb < mydb.sql

连接诊断

sql
SHOW PROCESSLIST;
SHOW STATUS LIKE 'Threads%';

四、PostgreSQL 对照

bash
psql -h 127.0.0.1 -U postgres -d dbname
\l | \dt | \d tablename
pg_dump -U postgres -d dbname -f dbname.sql
psql -U postgres -d dbname -f dbname.sql

五、国产化数据库(信创)

数据库厂商兼容命令要点
达梦 DM8武汉达梦Oracle 语法disql SYSDBA/SYSDBA@127.0.0.1:5236
OceanBase蚂蚁MySQL 协议连法同 MySQL
KingbaseES人大金仓PostgreSQLksql(同 psql)
openGauss华为PostgreSQLgsql(同 psql)

达梦常用

bash
# 登录(端口 5236)
disql SYSDBA/SYSDBA@127.0.0.1:5236

# Oracle 风格
SELECT table_name FROM user_tables;
DESC users;
SELECT * FROM users WHERE rownum <= 10;

# 备份恢复
dexp SYSDBA/SYSDBA@127.0.0.1:5236 file=db.dmp full=y
dimp SYSDBA/SYSDBA@127.0.0.1:5236 file=db.dmp full=y

六、常见选型

需求推荐
企业级业务MySQL / PostgreSQL / 达梦 DM
信创替代达梦 DM / OceanBase / KingbaseES / openGauss
缓存Redis
搜索日志Elasticsearch
文档存储MongoDB

© 2026 开发速查