# 有哪些必須要掌握的數據庫與SQL基礎知識
## 目錄
1. [數據庫基礎概念](#數據庫基礎概念)
2. [關系型數據庫核心理論](#關系型數據庫核心理論)
3. [SQL語言分類與語法結構](#sql語言分類與語法結構)
4. [數據定義語言(DDL)](#數據定義語言ddl)
5. [數據操作語言(DML)](#數據操作語言dml)
6. [數據查詢語言(DQL)](#數據查詢語言dql)
7. [數據控制語言(DCL)](#數據控制語言dcl)
8. [事務控制語言(TCL)](#事務控制語言tcl)
9. [數據庫索引與優化](#數據庫索引與優化)
10. [數據庫設計范式](#數據庫設計范式)
11. [常見數據庫管理系統](#常見數據庫管理系統)
12. [學習資源推薦](#學習資源推薦)
---
## 數據庫基礎概念
### 什么是數據庫
數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫,具有以下特征:
- 持久化存儲
- 有組織的結構
- 可共享訪問
- 統一管理機制
### 數據庫管理系統(DBMS)
DBMS是管理數據庫的軟件系統,主要功能包括:
- 數據定義
- 數據操作
- 數據安全
- 并發控制
- 故障恢復
### 數據庫類型
1. **關系型數據庫**:MySQL、Oracle、SQL Server
2. **非關系型數據庫**:MongoDB、Redis、Cassandra
3. **時序數據庫**:InfluxDB、TimescaleDB
4. **圖數據庫**:Neo4j、ArangoDB
---
## 關系型數據庫核心理論
### 關系模型三要素
1. **數據結構**:二維表結構
2. **數據操作**:關系代數運算
3. **完整性約束**:實體/參照/用戶定義完整性
### 核心概念
- **表(Table)**:數據存儲的基本單位
- **行(Row/Record)**:一條完整數據記錄
- **列(Column/Field)**:數據的特定屬性
- **主鍵(PK)**:唯一標識記錄的字段
- **外鍵(FK)**:建立表間關聯的字段
---
## SQL語言分類與語法結構
### SQL分類
| 類型 | 功能 | 常用命令 |
|------|------|----------|
| DDL | 定義數據結構 | CREATE, ALTER, DROP |
| DML | 數據增刪改 | INSERT, UPDATE, DELETE |
| DQL | 數據查詢 | SELECT |
| DCL | 權限控制 | GRANT, REVOKE |
| TCL | 事務控制 | COMMIT, ROLLBACK |
### 基本語法特點
- 不區分大小寫(但建議關鍵字大寫)
- 以分號(;)結束語句
- 支持單行(--)和多行(/* */)注釋
---
## 數據定義語言(DDL)
### 數據庫操作
```sql
-- 創建數據庫
CREATE DATABASE school CHARACTER SET utf8mb4;
-- 修改數據庫
ALTER DATABASE school CHARACTER SET utf8;
-- 刪除數據庫
DROP DATABASE school;
-- 創建表
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
gender CHAR(1) CHECK(gender IN ('M','F')),
birth_date DATE,
class_id INT,
FOREIGN KEY (class_id) REFERENCES classes(id)
);
-- 修改表結構
ALTER TABLE students ADD COLUMN email VARCHAR(100);
-- 刪除表
DROP TABLE students;
-- 單條插入
INSERT INTO students(name, gender) VALUES('張三', 'M');
-- 批量插入
INSERT INTO students(name, gender) VALUES
('李四', 'F'),
('王五', 'M');
UPDATE students
SET name = '張三豐', email = 'zhangsan@example.com'
WHERE id = 1;
-- 條件刪除
DELETE FROM students WHERE id = 5;
-- 清空表
TRUNCATE TABLE students; -- 不可回滾,效率更高
-- 查詢所有字段
SELECT * FROM employees;
-- 查詢指定字段
SELECT first_name, last_name, salary FROM employees;
-- 使用別名
SELECT first_name AS "名", last_name "姓" FROM employees;
-- 比較運算符
SELECT * FROM products WHERE price > 100;
-- 邏輯運算符
SELECT * FROM employees
WHERE salary > 5000 AND department = 'IT';
-- IN/NOT IN
SELECT * FROM students WHERE class_id IN (1, 3, 5);
-- LIKE模糊查詢
SELECT * FROM customers WHERE name LIKE '張%';
-- BETWEEN范圍查詢
SELECT * FROM orders
WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31';
SELECT
COUNT(*) AS total_employees,
AVG(salary) AS avg_salary,
MAX(salary) AS max_salary,
MIN(salary) AS min_salary,
SUM(salary) AS total_salary
FROM employees;
SELECT
department,
COUNT(*) AS emp_count,
AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING COUNT(*) > 5;
-- 內連接
SELECT s.name, c.class_name
FROM students s
INNER JOIN classes c ON s.class_id = c.id;
-- 左外連接
SELECT s.name, c.class_name
FROM students s
LEFT JOIN classes c ON s.class_id = c.id;
-- 自連接(查詢員工及其經理)
SELECT e.name AS employee, m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;
-- WHERE子查詢
SELECT name FROM products
WHERE price > (SELECT AVG(price) FROM products);
-- FROM子查詢
SELECT dept_name, avg_salary
FROM (
SELECT d.name AS dept_name, AVG(e.salary) AS avg_salary
FROM departments d
JOIN employees e ON d.id = e.dept_id
GROUP BY d.name
) AS dept_stats
WHERE avg_salary > 10000;
-- 創建用戶
CREATE USER 'dev_user'@'localhost' IDENTIFIED BY 'password123';
-- 授予權限
GRANT SELECT, INSERT ON school.* TO 'dev_user'@'localhost';
-- 撤銷權限
REVOKE INSERT ON school.* FROM 'dev_user'@'localhost';
-- 查看權限
SHOW GRANTS FOR 'dev_user'@'localhost';
START TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
-- 提交或回滾
COMMIT; -- 或 ROLLBACK;
-- 創建普通索引
CREATE INDEX idx_name ON students(name);
-- 創建復合索引
CREATE INDEX idx_name_gender ON students(name, gender);
-- 查看索引
SHOW INDEX FROM students;
為提高查詢性能,有時需要故意違反范式: - 適當的數據冗余 - 預計算字段 - 寬表設計
| 數據庫 | 特點 | 適用場景 |
|---|---|---|
| MySQL | 開源、易用、性能好 | Web應用、中小企業 |
| PostgreSQL | 功能強大、支持復雜查詢 | 地理空間、復雜業務 |
| Oracle | 企業級、高可用、昂貴 | 大型企業、金融系統 |
| SQL Server | 微軟生態、集成性好 | Windows環境應用 |
| SQLite | 輕量級、嵌入式 | 移動應用、本地存儲 |
掌握這些數據庫和SQL基礎知識后,您已經具備了開發大多數數據驅動應用的能力。隨著實踐深入,可以進一步學習: - 數據庫分庫分表 - 讀寫分離 - 分布式事務 - 數據庫中間件 - 大數據處理框架
祝您學習順利! “`
這篇文章涵蓋了數據庫和SQL的核心知識點,包括: 1. 基礎概念和分類 2. 關系型數據庫理論 3. SQL語法詳解(DDL/DML/DQL/DCL/TCL) 4. 索引優化和設計范式 5. 主流數據庫比較 6. 學習路徑建議
總字數約2500字,采用Markdown格式編寫,便于閱讀和傳播。如需擴展某個部分,可以進一步補充具體案例或深入原理說明。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。