# 必須掌握的數據庫面試題有哪些
數據庫作為現代軟件系統的核心組件,是技術面試中必考的重點領域。本文整理了關系型數據庫、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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。