DB Quick Ref — 数据库指令速查

MySQL / PostgreSQL / Redis 常用指令速查手册,点击代码块可一键复制

数据库与表操作 (DDL)

CREATE DATABASE mydb DEFAULT CHARACTER SET utf8mb4;
创建数据库并指定 UTF-8 编码,推荐用 utf8mb4 以支持 emoji
DDL
CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL, email VARCHAR(255) UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
创建表并定义主键自增、非空约束、唯一索引和默认时间戳
DDL
ALTER TABLE users ADD COLUMN age INT DEFAULT 0;
给已有表新增一列,DEFAULT 可为已有行设置初始值
DDL
CREATE INDEX idx_email ON users(email);
为 email 列创建普通索引,加快 WHERE 查询速度
DDL
SHOW TABLES; DESCRIBE users;
列出当前库所有表 / 查看表的列定义、类型和约束
管理
DROP TABLE IF EXISTS temp_data;
危险操作:删除整张表及其数据,IF EXISTS 可避免报错
DDL

数据增删改 (DML)

INSERT INTO users (name, email) VALUES ('张三', 'zhang@example.com');
插入单条数据,字段顺序与 VALUES 一一对应
DML
INSERT INTO users (name, email) VALUES ('张三', 'a@test.com'), ('李四', 'b@test.com'), ('王五', 'c@test.com');
批量插入多条数据,比逐条 INSERT 性能高很多
DML
UPDATE users SET name = '李四', age = 25 WHERE id = 1;
更新指定行的数据,务必带 WHERE 否则会更新全表
DML
DELETE FROM users WHERE id = 1;
删除符合条件的行,不带 WHERE 会清空全表
DML
INSERT INTO users (id, name) VALUES (1, '新名') ON DUPLICATE KEY UPDATE name = '新名';
存在则更新,不存在则插入(Upsert),依据主键/唯一索引判断
DML
REPLACE INTO users (id, name, email) VALUES (1, '王五', 'wang@test.com');
MySQL 专有:主键冲突时删旧行插新行(注意 AUTO_INCREMENT 会变)
DML

查询 (SELECT)

SELECT * FROM users WHERE age > 18 AND name LIKE '%张%' ORDER BY created_at DESC LIMIT 10;
组合条件查询 + 模糊匹配 + 排序 + 分页,最常用的 SELECT 写法
查询
SELECT u.name, o.amount FROM users u LEFT JOIN orders o ON u.id = o.user_id WHERE o.amount > 100;
LEFT JOIN 保留左表全部行,常用于「用户+订单」等一对多关联
查询
SELECT department, COUNT(*) AS cnt, AVG(salary) AS avg_salary FROM employees GROUP BY department HAVING cnt > 5;
分组聚合统计,HAVING 可对聚合结果再过滤
查询
SELECT * FROM users WHERE id IN ( SELECT user_id FROM orders WHERE amount > 1000 );
子查询:先查满足条件的用户 ID,再查对应用户信息
查询
EXPLAIN SELECT * FROM users WHERE email = 'test@test.com';
查看查询执行计划,判断是否走了索引、扫描了多少行
管理
START TRANSACTION; UPDATE accounts SET balance = balance - 100 WHERE id = 1; UPDATE accounts SET balance = balance + 100 WHERE id = 2; COMMIT;
事务操作:转账等场景必须保证原子性,失败则 ROLLBACK
DML

用户与权限管理

CREATE USER 'appuser'@'%' IDENTIFIED BY 'StrongPass123!'; GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'appuser'@'%'; FLUSH PRIVILEGES;
创建用户并授予指定库的增删改查权限,生产环境勿用 root
管理
SHOW PROCESSLIST;
查看当前所有活跃连接和正在执行的查询,排查慢查询和死锁必备
管理

表与结构操作

CREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(255) UNIQUE, data JSONB DEFAULT '{}', created_at TIMESTAMPTZ DEFAULT NOW() );
PG 用 SERIAL 代替 AUTO_INCREMENT,原生支持 JSONB 类型
DDL
INSERT INTO users (id, name, email) VALUES (1, '张三', 'z@test.com') ON CONFLICT (id) DO UPDATE SET name = EXCLUDED.name;
PG 的 Upsert 语法,ON CONFLICT 比 MySQL 的更灵活
DML
SELECT * FROM users WHERE data->>>'city' = '深圳'; SELECT data->'tags' FROM users WHERE data @> '{"vip": true}';
->>> 取文本值,@> 判断包含关系,PG 的 JSON 查询能力极强
查询
WITH RECURSIVE tree AS ( SELECT id, name, parent_id, 1 AS depth FROM categories WHERE parent_id IS NULL UNION ALL SELECT c.id, c.name, c.parent_id, t.depth + 1 FROM categories c JOIN tree t ON c.parent_id = t.id ) SELECT * FROM tree;
递归 CTE 查询树形结构(分类/组织架构),PG 的杀手级特性
查询
SELECT name, department, salary, ROW_NUMBER() OVER( PARTITION BY department ORDER BY salary DESC ) AS rank FROM employees;
窗口函数:按部门分组内排名,不折叠行数(比 GROUP BY 强大)
查询
\l -- 列出所有数据库 \dt -- 列出当前库所有表 \d users -- 查看表结构 \di -- 列出所有索引 \timing on -- 显示查询耗时
psql 客户端元命令速查,在终端操作 PG 必备
管理

管理与运维

VACUUM ANALYZE users;
回收死行空间 + 更新统计信息,PG 必须定期执行
管理
pg_dump -U postgres -d mydb -F c -f backup.dump pg_restore -U postgres -d mydb backup.dump
-F c 自定义压缩格式,体积小速度快,生产备份首选
管理

字符串 (String)

SET user:1:name "张三" GET user:1:name SET token:abc "xyz" EX 3600 -- 1小时过期
最基础的键值对操作,EX 设置过期秒数,常用于缓存和 Token
String
INCR page:views -- +1 INCRBY page:views 10 -- +10 DECR stock:item:1 -- -1
原子计数器,适合 PV 统计、库存扣减、限流等场景
String
MSET k1 "v1" k2 "v2" k3 "v3" MGET k1 k2 k3
批量设置/获取多个键,一次网络往返完成,减少 RTT
String

哈希 (Hash)

HSET user:1 name "张三" age 25 city "深圳" HGET user:1 name HGETALL user:1
存储对象的最佳结构,一个 key 下多个 field-value 对
Hash
HINCRBY user:1 score 50 HDEL user:1 city
HINCRBY 对单个字段原子加减,HDEL 删除指定字段
Hash

列表 (List) & 集合 (Set)

LPUSH queue:tasks "task1" "task2" RPOP queue:tasks LRANGE queue:tasks 0 -1 -- 查看全部
LPUSH+RPOP = 先进先出队列,轻量消息队列首选
List
SADD tag:go "user1" "user2" SADD tag:python "user2" "user3" SINTER tag:go tag:python -- 交集: user2 SMEMBERS tag:go
集合天然去重,SINTER/SUNION/SDIFF 做交并差运算
Set
ZADD leaderboard 100 "player1" 85 "player2" ZREVRANGE leaderboard 0 9 WITHSCORES ZINCRBY leaderboard 10 "player2"
有序集合:天然排行榜,ZREVRANGE 取 Top N
Sorted Set

Key 管理与运维

EXPIRE session:abc 1800 -- 30分钟后过期 TTL session:abc -- 查看剩余秒数 PERSIST session:abc -- 取消过期
管理 key 的生命周期,TTL 返回 -1 表示永不过期,-2 表示已删除
Key
SCAN 0 MATCH user:* COUNT 100 -- 生产环境禁用 KEYS *(会阻塞) DBSIZE -- 当前库 key 总数 INFO memory
SCAN 是 KEYS 的安全替代,游标分页不阻塞,生产必用
Key
DEL key1 key2 -- 同步删除 UNLINK big_key -- 异步删除(大key用这个)
大 key(>10MB)用 UNLINK 异步释放,避免阻塞主线程
Key
没有找到匹配的指令,试试其他关键词?
已复制到剪贴板