SQL 概述
- ANSI 標準語言,操作關係型數據庫 (MySQL、Oracle、SQL Server、PostgreSQL 等)
- 各廠商有擴展,但核心關鍵字 (SELECT/INSERT/UPDATE/DELETE/WHERE) 統一
- 關鍵字慣用大寫,語句以
; 結尾
四大語言分類
| 類別 | 全稱 | 核心關鍵字 | 作用 |
| DDL | Data Definition Language | CREATE, ALTER, DROP, TRUNCATE, RENAME | 定義數據庫對象結構 (庫、表、索引、視圖) |
| DML | Data Manipulation Language | SELECT, INSERT, UPDATE, DELETE | 操作數據內容 (增刪改查) |
| DCL | Data Control Language | GRANT, REVOKE | 權限控制 (用戶、角色、權限) |
| TCL | Transaction Control Language | COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION | 事務控制 (原子性、一致性) |
核心 DML 四大金剛
-- 1. 查詢
SELECT col1, col2 FROM table_name WHERE condition ORDER BY col1 LIMIT 10;
-- 2. 插入
INSERT INTO table_name (col1, col2) VALUES (val1, val2);
INSERT INTO table_name (col1, col2) VALUES (v1,v2), (v3,v4); -- 批量
-- 3. 更新
UPDATE table_name SET col1=val1, col2=val2 WHERE condition;
-- 4. 刪除
DELETE FROM table_name WHERE condition;
TRUNCATE TABLE table_name; -- 清空表,DDL 性質,不可回滾
常用 DDL 語句速查
| 對象 | 創建 | 修改 | 刪除 |
| 數據庫 | CREATE DATABASE db_name CHARSET utf8mb4; | ALTER DATABASE db_name CHARSET utf8mb4; | DROP DATABASE db_name; |
| 表 | CREATE TABLE t (id INT PRIMARY KEY, name VARCHAR(50)); | ALTER TABLE t ADD COLUMN age INT; | DROP TABLE t; |
| 索引 | CREATE INDEX idx_name ON t(name); | ALTER TABLE t DROP INDEX idx_name; | DROP INDEX idx_name ON t; |
| 視圖 | CREATE VIEW v AS SELECT * FROM t WHERE status=1; | ALTER VIEW v AS SELECT * FROM t WHERE status IN (1,2); | DROP VIEW v; |
| 存儲過程 | CREATE PROCEDURE p() BEGIN ... END; | DROP PROCEDURE p; CREATE PROCEDURE p() ... | DROP PROCEDURE p; |
| 觸發器 | CREATE TRIGGER trg BEFORE INSERT ON t FOR EACH ROW BEGIN ... END; | - | DROP TRIGGER trg; |
數據庫對象層級關係
實例 (Instance)
└─ 數據庫 (Database / Schema)
└─ 表
├─ 列
├─ 行 (記錄)
├─ 索引
├─ 約束 (PK, FK, UK, NOT NULL, DEFAULT, CHECK)
├─ 觸發器
└─ 分區
新手規範與避坑
- 命名規範:小寫 + 下劃線 (
user_info)、表名單數、列名語義化、布爾型 is_xxx/has_xxx
- 必加主鍵:InnoDB 聚簇索引依賴 PK,建議
BIGINT UNSIGNED AUTO_INCREMENT
- 字符集統一:庫/表/列/連接 全鏈路
utf8mb4
- 拒絕 SELECT *:顯式列出所需列,減少網絡/IO、利用覆蓋索引
- WHERE 必加索引列:避免全表掃描
- 事務最小化:只包含必要寫操作,避免長事務持有鎖
- 備份習慣:
mysqldump --single-transaction --routines --triggers --events db > backup.sql