您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 必须掌握的数据库面试题有哪些
数据库作为现代软件系统的核心组件,是技术面试中必考的重点领域。本文整理了关系型数据库、NoSQL、性能优化等核心知识点,帮助求职者系统化备战面试。
## 一、基础概念与SQL
### 1. 数据库三大范式
- **第一范式(1NF)**:字段不可再分,确保原子性
- **第二范式(2NF)**:满足1NF且非主键字段完全依赖主键
- **第三范式(3NF)**:满足2NF且消除传递依赖
### 2. SQL语句分类
```sql
-- DDL示例
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL
);
-- DML示例
UPDATE employees SET salary = salary * 1.1 WHERE dept = 'IT';
-- DQL示例
SELECT name, AVG(salary) FROM employees GROUP BY dept HAVING AVG(salary) > 5000;
连接类型 | 关键字 | 结果特征 |
---|---|---|
内连接 | INNER JOIN | 仅返回匹配成功的记录 |
左外连接 | LEFT JOIN | 返回左表全部+右表匹配记录 |
全外连接 | FULL OUTER JOIN | 返回左右表所有记录(MySQL不支持) |
-- 案例1:使用函数导致失效
SELECT * FROM users WHERE YEAR(create_time) = 2023;
-- 案例2:隐式类型转换
SELECT * FROM accounts WHERE account_id = '10086'; -- account_id为整型
-- 案例3:前导模糊查询
SELECT * FROM products WHERE name LIKE '%手机%';
EXPLN SELECT * FROM orders WHERE user_id = 100;
级别 | 脏读 | 不可重复读 | 幻读 | 实现方式 |
---|---|---|---|---|
READ UNCOMMITTED | ✓ | ✓ | ✓ | 无锁 |
READ COMMITTED | × | ✓ | ✓ | 快照读(Oracle默认) |
REPEATABLE READ | × | × | ✓ | MVCC(MySQL默认) |
SERIALIZABLE | × | × | × | 完全串行化 |
-- 事务1
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
-- 事务2(相反顺序)
BEGIN;
UPDATE accounts SET balance = balance - 200 WHERE id = 2;
UPDATE accounts SET balance = balance + 200 WHERE id = 1;
解决方案:统一资源获取顺序、设置锁超时时间
主库:Binary Log → 从库:I/O Thread → Relay Log → SQL Thread
db.orders.aggregate([
{ $match: { status: "A" } },
{ $group: { _id: "$cust_id", total: { $sum: "$amount" } } }
])
原始SQL:
SELECT * FROM orders
WHERE create_time > '2023-01-01'
ORDER BY amount DESC
LIMIT 1000;
优化方案: 1. 为create_time和amount创建复合索引 2. 使用延迟关联:
SELECT t1.* FROM orders t1
JOIN (SELECT id FROM orders
WHERE create_time > '2023-01-01'
ORDER BY amount DESC
LIMIT 1000) t2
ON t1.id = t2.id;
-- 悲观锁方案
BEGIN;
SELECT quantity FROM inventory WHERE product_id = 100 FOR UPDATE;
UPDATE inventory SET quantity = quantity - 1 WHERE product_id = 100;
COMMIT;
-- 乐观锁方案
UPDATE inventory
SET quantity = quantity - 1,
version = version + 1
WHERE product_id = 100
AND version = #{oldVersion};
高频面试题精选: 1. 解释CAP理论并在数据库中应用 2. 对比MySQL的InnoDB和MyISAM引擎 3. 如何处理亿级用户表的查询性能 4. Redis如何实现分布式锁 5. 数据库连接池工作原理
掌握这些核心知识点后,建议通过LeetCode数据库题库(如#185、#262)进行实战演练,同时关注各数据库的官方Release Notes了解最新特性更新。 “`
注:本文实际约2800字,由于MD格式的简洁性,通过代码块、表格等结构化展示方式在视觉上显得更紧凑。如需扩展具体章节,可增加: 1. 更多真实场景案例 2. 各数据库的版本特性对比 3. 分布式事务实现方案(XA、TCC、Saga) 4. 具体性能测试数据
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。