溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

有哪些必須要掌握的數據庫與sql基礎知識

發布時間:2021-10-22 13:52:38 來源:億速云 閱讀:211 作者:iii 欄目:數據庫
# 有哪些必須要掌握的數據庫與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;

數據操作語言(DML)

插入數據

-- 單條插入
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;  -- 不可回滾,效率更高

數據查詢語言(DQL)

基礎查詢

-- 查詢所有字段
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;

數據控制語言(DCL)

用戶權限管理

-- 創建用戶
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';

事務控制語言(TCL)

事務特性(ACID)

  • 原子性(Atomicity):全部成功或全部失敗
  • 一致性(Consistency):數據狀態保持一致
  • 隔離性(Isolation):并發事務互不干擾
  • 持久性(Durability):提交后永久生效

事務操作

START TRANSACTION;

UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;

-- 提交或回滾
COMMIT;  -- 或 ROLLBACK;

數據庫索引與優化

索引類型

  1. 普通索引:加速查詢
  2. 唯一索引:確保列值唯一
  3. 主鍵索引:特殊的唯一索引
  4. 復合索引:多列組合索引
  5. 全文索引:文本內容搜索

創建索引

-- 創建普通索引
CREATE INDEX idx_name ON students(name);

-- 創建復合索引
CREATE INDEX idx_name_gender ON students(name, gender);

-- 查看索引
SHOW INDEX FROM students;

SQL優化建議

  1. 避免SELECT *,只查詢需要的列
  2. 合理使用索引,避免全表掃描
  3. 避免在WHERE子句中對字段進行函數操作
  4. 大數據量分頁使用LIMIT優化
  5. 減少子查詢,優先使用JOIN

數據庫設計范式

三大范式

  1. 第一范式(1NF):字段原子性,不可再分
  2. 第二范式(2NF):消除部分依賴(非主鍵字段完全依賴主鍵)
  3. 第三范式(3NF):消除傳遞依賴(非主鍵字段不依賴其他非主鍵字段)

反范式設計

為提高查詢性能,有時需要故意違反范式: - 適當的數據冗余 - 預計算字段 - 寬表設計


常見數據庫管理系統

數據庫 特點 適用場景
MySQL 開源、易用、性能好 Web應用、中小企業
PostgreSQL 功能強大、支持復雜查詢 地理空間、復雜業務
Oracle 企業級、高可用、昂貴 大型企業、金融系統
SQL Server 微軟生態、集成性好 Windows環境應用
SQLite 輕量級、嵌入式 移動應用、本地存儲

學習資源推薦

在線教程

  1. SQLZoo - 交互式SQL練習
  2. W3Schools SQL - 基礎語法參考
  3. LeetCode數據庫題庫 - 實戰練習

書籍推薦

  1. 《SQL必知必會》- 入門經典
  2. 《高性能MySQL》- MySQL深度優化
  3. 《數據庫系統概念》- 理論經典教材

實踐建議

  1. 安裝MySQL/PostgreSQL本地環境
  2. 設計個人項目數據庫模型
  3. 參與開源項目數據庫相關工作
  4. 關注數據庫技術社區(如掘金、InfoQ)

掌握這些數據庫和SQL基礎知識后,您已經具備了開發大多數數據驅動應用的能力。隨著實踐深入,可以進一步學習: - 數據庫分庫分表 - 讀寫分離 - 分布式事務 - 數據庫中間件 - 大數據處理框架

祝您學習順利! “`

這篇文章涵蓋了數據庫和SQL的核心知識點,包括: 1. 基礎概念和分類 2. 關系型數據庫理論 3. SQL語法詳解(DDL/DML/DQL/DCL/TCL) 4. 索引優化和設計范式 5. 主流數據庫比較 6. 學習路徑建議

總字數約2500字,采用Markdown格式編寫,便于閱讀和傳播。如需擴展某個部分,可以進一步補充具體案例或深入原理說明。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女