一、MySQL 概述
1.1 核心概念
- 數據庫 (DB):存儲數據的結構化倉庫
- 數據庫管理系統 (DBMS):操作數據庫的軟件(如 MySQL、Oracle)
- SQL:操作關系型數據庫的標準語言
1.2 安裝與配置
- 下載地址:MySQL Installer
- 安裝步驟:
- 選擇 "Developer Default" 安裝類型
- 設置 root 用戶密碼
- 配置 Windows 服務(默認名稱:MySQL80)
- 環境變量配置:將
C:\Program Files\MySQL\MySQL Server 8.0\bin
添加到 Path
1.3 連接方式
- 命令行工具:
mysql -u root -p
- 圖形化工具:推薦使用 DataGrip
二、SQL 基礎語法
2.1 通用規則
- 語句以分號結尾
- 不區分大小寫(建議關鍵字大寫)
- 注釋:
--
?單行,/* */
?多行
2.2 分類
類型 | 功能 | 關鍵字 |
---|
DDL | 定義數據庫對象 | CREATE/DROP/ALTER |
DML | 操作數據 | INSERT/UPDATE/DELETE |
DQL | 查詢數據 | SELECT |
DCL | 控制權限 | GRANT/REVOKE |
三、DDL 操作
3.1 數據庫操作
-- 創建數據庫(指定字符集)
CREATE DATABASE db_name DEFAULT CHARSET utf8mb4;-- 刪除數據庫
DROP DATABASE IF EXISTS db_name;-- 切換數據庫
USE db_name;
3.2 表操作
3.2.1 數據類型
類型 | 示例 | 說明 |
---|
整數 | TINYINT(1) | 0-255(無符號) |
字符串 | VARCHAR(50) | 可變長度字符串 |
日期 | DATE | YYYY-MM-DD |
3.2.2 表結構操作
-- 創建表
CREATE TABLE user (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,age TINYINT UNSIGNED
);-- 修改表(添加字段)
ALTER TABLE user ADD COLUMN email VARCHAR(100);-- 刪除表
DROP TABLE IF EXISTS user;
四、DML 操作
4.1 數據插入
-- 插入單條記錄
INSERT INTO user (name, age) VALUES ('張三', 20);-- 批量插入
INSERT INTO user (name, age)
VALUES ('李四', 25), ('王五', 30);
4.2 數據更新
-- 更新單條記錄
UPDATE user SET age = 26 WHERE id = 1;-- 更新多條記錄
UPDATE user SET age = age + 1 WHERE age < 30;
4.3 數據刪除
-- 刪除單條記錄
DELETE FROM user WHERE id = 1;-- 刪除所有記錄(保留表結構)
TRUNCATE TABLE user;
五、DQL 查詢
5.1 基礎查詢
-- 查詢所有字段
SELECT * FROM user;-- 查詢指定字段并去重
SELECT DISTINCT age FROM user;-- 字段別名
SELECT name AS 姓名, age AS 年齡 FROM user;
5.2 條件查詢
-- 范圍查詢
SELECT * FROM user WHERE age BETWEEN 20 AND 30;-- 模糊查詢
SELECT * FROM user WHERE name LIKE '張%';-- 空值處理
SELECT * FROM user WHERE email IS NULL;
5.3 聚合函數
函數 | 功能 |
---|
COUNT() | 統計數量 |
AVG() | 平均值 |
MAX() | 最大值 |
SUM() | 求和 |
-- 統計總人數
SELECT COUNT(*) AS 總人數 FROM user;-- 計算平均年齡
SELECT AVG(age) AS 平均年齡 FROM user;
5.4 分組與排序
-- 按性別分組統計人數
SELECT gender, COUNT(*) FROM user GROUP BY gender;-- 按年齡降序排序
SELECT * FROM user ORDER BY age DESC;
5.5 分頁查詢
-- 每頁10條,顯示第2頁
SELECT * FROM user LIMIT 10 OFFSET 10;
六、約束
6.1 類型
約束 | 關鍵字 | 說明 |
---|
主鍵 | PRIMARY KEY | 唯一標識,非空 |
外鍵 | FOREIGN KEY | 關聯其他表主鍵 |
唯一 | UNIQUE | 字段值唯一 |
非空 | NOT NULL | 字段值不能為空 |
6.2 外鍵示例
-- 創建部門表
CREATE TABLE dept (id INT PRIMARY KEY,name VARCHAR(50)
);-- 創建員工表(外鍵關聯)
CREATE TABLE emp (id INT PRIMARY KEY,name VARCHAR(50),dept_id INT,FOREIGN KEY (dept_id) REFERENCES dept(id)
);
七、多表查詢
7.1 連接類型
類型 | 說明 |
---|
內連接 | 只返回匹配的數據 |
左外連接 | 返回左表所有數據 |
右外連接 | 返回右表所有數據 |
全外連接 | 返回所有數據(MySQL 不支持) |
7.2 示例
-- 內連接查詢員工及其部門
SELECT e.name, d.name
FROM emp e
JOIN dept d ON e.dept_id = d.id;-- 左外連接查詢所有員工
SELECT e.name, d.name
FROM emp e
LEFT JOIN dept d ON e.dept_id = d.id;
八、事務
8.1 基本操作
-- 開啟事務
START TRANSACTION;-- 提交事務
COMMIT;-- 回滾事務
ROLLBACK;
8.2 隔離級別
級別 | 臟讀 | 不可重復讀 | 幻讀 |
---|
READ UNCOMMITTED | 是 | 是 | 是 |
READ COMMITTED | 否 | 是 | 是 |
REPEATABLE READ | 否 | 否 | 是 |
SERIALIZABLE | 否 | 否 | 否 |
九、函數
9.1 常用函數
類型 | 函數 | 示例 |
---|
字符串 | CONCAT(a,b) | CONCAT('Hello', 'MySQL') → 'HelloMySQL' |
日期 | CURDATE() | 獲取當前日期 |
流程控制 | IF(condition, t, f) | IF (age>18, ' 成年 ', ' 未成年 ') |
十、權限管理
10.1 用戶管理
-- 創建用戶
CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';-- 修改密碼
ALTER USER 'user'@'localhost' IDENTIFIED BY 'new_password';-- 刪除用戶
DROP USER 'user'@'localhost';
10.2 權限控制
-- 授予權限
GRANT SELECT, INSERT ON db.* TO 'user'@'localhost';-- 撤銷權限
REVOKE INSERT ON db.* FROM 'user'@'localhost';