)
一、三大数据库定位速览数据库类型核心特点最适合的场景MySQL关系型SQL严格表结构、ACID 事务、复杂关联查询订单、账户、用户信息等强一致性业务MongoDB文档型NoSQL动态 Schema、JSON 文档存储、海量写入日志、爬虫数据、物联网、内容管理Redis内存型NoSQL纯内存操作、微秒级响应、丰富数据结构缓存、计数器、排行榜、分布式锁、会话存储二、MySQL 完整操作手册1. 连接与基础操作-- 连接数据库 mysql -u root -p -- 查看所有数据库 SHOW DATABASES; -- 创建数据库 CREATE DATABASE my_shop; -- 切换数据库 USE my_shop; -- 创建表 CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, age INT, phone VARCHAR(20) UNIQUE, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ); -- 查看表结构 DESC users; -- 查看建表语句 SHOW CREATE TABLE users;2. 数据操作CRUD-- 插入记录 INSERT INTO users (name, age, phone) VALUES (张三, 25, 13800001111); INSERT INTO users (name, age, phone) VALUES (李四, 30, 13800002222); -- 批量插入 INSERT INTO users (name, age, phone) VALUES (王五, 28, 13800003333), (赵六, 22, 13800004444); -- 查询全表 SELECT * FROM users; -- 条件查询 SELECT * FROM users WHERE age 25; SELECT name, phone FROM users WHERE age BETWEEN 20 AND 30; -- 排序与分页 SELECT * FROM users ORDER BY age DESC LIMIT 10 OFFSET 0; -- 聚合查询 SELECT COUNT(*) AS total, AVG(age) AS avg_age FROM users; -- 分组查询 SELECT age, COUNT(*) AS count FROM users GROUP BY age HAVING count 1; -- 更新务必带条件 UPDATE users SET age 26 WHERE name 张三; -- 删除务必带条件 DELETE FROM users WHERE name 李四; -- 退出 EXIT;3. 索引-- 创建普通索引 CREATE INDEX idx_name ON users (name); -- 创建唯一索引 CREATE UNIQUE INDEX idx_phone ON users (phone); -- 创建联合索引注意字段顺序 CREATE INDEX idx_name_age ON users (name, age); -- 创建前缀索引针对长文本字段 CREATE INDEX idx_text_prefix ON articles (content(20)); -- 查看索引 SHOW INDEX FROM users; -- 删除索引 DROP INDEX idx_name ON users; -- 查看查询执行计划判断是否命中索引 EXPLAIN SELECT * FROM users WHERE name 张三;4. 视图-- 创建视图封装复杂查询 CREATE VIEW user_summary AS SELECT id, name, age, DATE_FORMAT(created_at, %Y-%m-%d) AS register_date FROM users WHERE age 18; -- 查询视图 SELECT * FROM user_summary; -- 查看所有视图 SHOW FULL TABLES WHERE table_type VIEW; -- 删除视图 DROP VIEW user_summary;5. 存储过程-- 创建存储过程 DELIMITER // CREATE PROCEDURE GetUserById(IN p_id INT, OUT p_name VARCHAR(50)) BEGIN SELECT name INTO p_name FROM users WHERE id p_id; END // DELIMITER ; -- 调用 CALL GetUserById(1, name); SELECT name; -- 删除 DROP PROCEDURE GetUserById;6. 触发器-- 创建触发器删除用户时记录日志 DELIMITER // CREATE TRIGGER before_delete_user BEFORE DELETE ON users FOR EACH ROW BEGIN INSERT INTO delete_log (user_id, name, delete_time) VALUES (OLD.id, OLD.name, NOW()); END // DELIMITER ; -- 查看所有触发器 SHOW TRIGGERS; -- 删除触发器 DROP TRIGGER before_delete_user;7. 数据导入导出# 导出整个数据库 mysqldump -u root -p my_shop my_shop_backup.sql # 导出单张表 mysqldump -u root -p my_shop users users_backup.sql # 导入 mysql -u root -p my_shop my_shop_backup.sql三、MongoDB 完整操作手册1. 连接与基础操作javascript// 连接 mongosh // 查看所有数据库 show dbs; // 切换/创建数据库 use my_shop; // 查看当前数据库中的集合 show collections;2. 数据操作CRUDjavascript// 插入单条文档 db.users.insertOne({ name: 张三, age: 25, phone: 13800001111, tags: [VIP, 新用户], address: { city: 北京, district: 朝阳 } }); // 批量插入 db.users.insertMany([ { name: 李四, age: 30, phone: 13800002222 }, { name: 王五, age: 28, phone: 13800003333 } ]); // 查询所有 db.users.find(); // 格式化输出 db.users.find().pretty(); // 条件查询 db.users.find({ age: { $gt: 25 } }); db.users.find({ age: { $gte: 20, $lte: 30 } }); // 查询指定字段1 包含0 排除 db.users.find({}, { name: 1, age: 1, _id: 0 }); // 排序与分页 db.users.find().sort({ age: -1 }).limit(10).skip(0); // 聚合计数 db.users.countDocuments({ age: { $gt: 25 } }); // 更新$set 设置字段$inc 数值增减 db.users.updateOne( { name: 张三 }, { $set: { age: 26 }, $inc: { loginCount: 1 } } ); // 替换整个文档慎用 db.users.replaceOne({ name: 张三 }, { name: 张三, age: 26 }); // 删除 db.users.deleteOne({ name: 李四 }); db.users.deleteMany({ age: { $lt: 18 } }); // 退出 exit;四、Redis 完整操作手册1. 连接与基础操作# 连接 redis-cli # 认证如设置了密码 AUTH your_password # 测试连通性 PING # 查看所有键 KEYS * # 查看键数量 DBSIZE # 查看键类型 TYPE user:name # 查看键剩余存活时间-1 永久-2 已过期 TTL verify_code # 删除键 DEL user:name # 清空当前库生产慎用 FLUSHDB # 清空所有库生产慎用 FLUSHALL # 退出 EXIT2. 字符串String# 存储 SET user:name 张三 # 获取 GET user:name # 存储带过期时间秒 SET verify_code 123456 EX 60 # 存储带过期时间毫秒 SET session:001 data PX 30000 # 不存在时才存储分布式锁用 SET lock:order locked NX EX 10 # 追加内容 APPEND user:name 先生 # 获取子串 GETRANGE user:name 0 2 # 设置新值并返回旧值 GETSET user:name 李四 # 数值自增不存在则从0开始 INCR page_view:home INCRBY page_view:home 10 DECR page_view:home DECRBY page_view:home 5 # 批量操作 MSET key1 value1 key2 value2 MGET key1 key23. 哈希Hash—— 存储对象# 设置单个字段 HSET user:1001 name 张三 age 25 city 北京 # 设置多个字段 HMSET user:1001 name 张三 age 25 # 获取单个字段 HGET user:1001 name # 获取所有字段及值 HGETALL user:1001 # 获取所有字段名 HKEYS user:1001 # 获取所有值 HVALS user:1001 # 获取字段数量 HLEN user:1001 # 字段自增 HINCRBY user:1001 loginCount 1 # 判断字段是否存在 HEXISTS user:1001 age # 删除字段 HDEL user:1001 city4. 列表List—— 消息队列、最新列表# 左侧推入头部 LPUSH comments 评论1 LPUSH comments 评论2 # 右侧推入尾部 RPUSH comments 评论3 # 左侧弹出移除并返回 LPOP comments # 右侧弹出 RPOP comments # 阻塞弹出队列为空时等待超时秒数 BLPOP comments 5 BRPOP comments 5 # 获取列表范围0 -1 表示全部 LRANGE comments 0 -1 LRANGE comments 0 9 # 最新10条 # 获取列表长度 LLEN comments # 获取指定下标元素 LINDEX comments 0 # 删除指定值count 0 从头删 0 从尾删 0 删除全部 LREM comments 1 评论1 # 裁剪列表只保留指定区间 LTRIM comments 0 95. 集合Set—— 标签、去重# 添加元素 SADD tags 科技 互联网 AI 大数据 # 查看所有元素 SMEMBERS tags # 判断元素是否存在 SISMEMBER tags AI # 获取集合大小 SCARD tags # 随机弹出一个元素移除 SPOP tags # 随机取出一个元素不移除 SRANDMEMBER tags # 随机取出多个元素 SRANDMEMBER tags 2 # 从集合移动元素到另一个集合 SMOVE tags archive AI # 差集set1 有 set2 没有 SDIFF set1 set2 # 交集 SINTER set1 set2 # 并集 SUNION set1 set2 # 存储结果到新集合 SINTERSTORE new_set set1 set26. 有序集合Sorted Set—— 排行榜、延迟队列# 添加成员及分数 ZADD rank 100 张三 ZADD rank 95 李四 ZADD rank 85 王五 # 按分数从低到高查看升序 ZRANGE rank 0 -1 ZRANGE rank 0 -1 WITHSCORES # 按分数从高到低查看降序 ZREVRANGE rank 0 -1 ZREVRANGE rank 0 -1 WITHSCORES # 查看成员分数 ZSCORE rank 张三 # 增加分数 ZINCRBY rank 1 张三 # 获取排名0 开始 ZRANK rank 张三 # 升序排名 ZREVRANK rank 张三 # 降序排名 # 按分数区间查询 ZRANGEBYSCORE rank 80 100 ZRANGEBYSCORE rank 80 100 WITHSCORES LIMIT 0 5 # 按分数区间删除 ZREMRANGEBYSCORE rank 0 50 # 按排名区间删除 ZREMRANGEBYRANK rank 0 2 # 删除成员 ZREM rank 王五9. 持久化配置bash# 手动触发 RDB 持久化 SAVE # 阻塞主进程 BGSAVE # 后台子进程执行 # 触发 AOF 重写 BGREWRITEAOF # 查看持久化状态 INFO persistence10. 数据备份与恢复# 查看 RDB 文件位置 CONFIG GET dir CONFIG GET dbfilename # 手动备份 cp /var/lib/redis/dump.rdb /backup/dump_$(date %Y%m%d).rdb # 恢复停止 Redis覆盖文件重启五、三种数据库核心特性对比特性MySQLMongoDBRedis数据模型二维表行 列JSON 文档Key-Value 多种结构Schema严格固定动态灵活无事务完整 ACID多文档事务有限不支持回滚索引类型BTree、全文、空间单字段、复合、文本、地理、TTLKey 本身为主索引聚合能力GROUP BY 强大聚合管道丰富有限需应用层关联查询JOIN 完善$lookup性能一般不支持持久化双写 binlog检查点 journalRDB AOF内存管理Buffer Pool可配置WiredTiger Cache全内存 淘汰策略读写性能万级 QPS万级 QPS十万级 QPS典型场景账务、订单、用户日志、爬虫、内容管理缓存、计数器、排行榜、分布式锁