MySQL 是目前最流行的開源關系型數據庫管理系統之一,廣泛應用于Web開發、數據分析等場景。掌握基礎的增刪改查操作是入門的關鍵。本文將從環境準備開始,帶你深入,mysql
一、前置準備:安裝與連接 MySQL
1. 安裝 MySQL
- Windows:前往 https://dev.mysql.com/ 下載安裝包(選擇 Community Server),按向導完成安裝(注意記錄 root 用戶密碼)。
- macOS:推薦通過 Homebrew 安裝:
brew install mysql
- Linux(Ubuntu/Debian):
sudo apt-get update && sudo apt-get install mysql-server
2. 連接 MySQL
安裝完成后,通過命令行工具連接 MySQL(需先啟動服務):
mysql -u root -p # 輸入安裝時設置的 root 密碼
成功連接后,會看到 MySQL 的命令行提示符 mysql>
。
二、數據庫操作:創建與管理數據庫
數據庫(Database)是存儲數據的容器,用于組織多個相關表。以下是數據庫的核心操作:
1. 查看所有數據庫
SHOW DATABASES; #列出服務器中所有數據庫
2. 創建數據庫
CREATE DATABASE IF NOT EXISTS school; #創建名為 "school" 的數據庫(若不存在)
IF NOT EXISTS
是可選參數,避免因數據庫已存在而報錯。- 建議指定字符集(如
utf8mb4
,支持 emoji)和存儲引擎(如InnoDB
,默認引擎):CREATE DATABASE school DEFAULT CHARSET utf8mb4
3. 切換數據庫
USE school; #切換到 "school" 數據庫(后續操作將基于此數據庫)
執行后提示 Database changed
表示切換成功。
4. 刪除數據庫(謹慎!)
DROP DATABASE IF EXISTS school; #刪除名為 "school" 的數據庫(數據將永久丟失)
三、表操作:創建與管理數據表
表(Table)是數據庫的核心結構,由行和列組成。創建表時需定義字段的名稱、數據類型、約束(如主鍵、非空等)。
1. 查看當前數據庫的表
SHOW TABLES; #列出當前數據庫中的所有表(若未創建表則無結果)
2. 創建表
以創建學生表 students
為例:
CREATE TABLE students (id INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '學生ID(主鍵)',name VARCHAR(50) NOT NULL COMMENT '姓名',gender ENUM('男','女','其他') DEFAULT '其他' COMMENT '性別',age TINYINT UNSIGNED COMMENT '年齡(0-255)',birth DATE COMMENT '出生日期',class VARCHAR(20) NOT NULL COMMENT '班級',create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '記錄創建時間',PRIMARY KEY (id) -- 指定主鍵(唯一標識一條記錄)
)DEFAULT CHARSET utf8mb4;
關鍵參數說明:
-
數據類型:
INT UNSIGNED
:無符號整數(取值范圍 0~4294967295)。VARCHAR(50)
:可變長度字符串(最多50字符)。ENUM('男','女','其他')
:枚舉類型(僅允許指定值)。DATE
:日期(格式YYYY-MM-DD
)。DATETIME
:日期時間(格式YYYY-MM-DD HH:MM:SS
)。CURRENT_TIMESTAMP
:自動填充當前時間(插入或更新時)。
-
約束:
NOT NULL
:字段不可為空。AUTO_INCREMENT
:自增(主鍵常用,插入新記錄時自動生成唯一ID)。DEFAULT
:字段默認值(未顯式賦值時使用)。PRIMARY KEY
:主鍵(唯一且非空,用于快速查找記錄)。
3. 查看表結構
DESCRIBE students; -- 或簡寫 DESC students
輸出結果會顯示字段名、類型、是否為空、默認值、鍵等信息。
4. 修改表結構
(1)添加字段
ALTER TABLE students
ADD COLUMN email VARCHAR(100) UNIQUE COMMENT '郵箱(唯一)' AFTER class;
AFTER class
表示將新字段email
添加到class
字段之后(可選,默認添加到末尾)。
(2)修改字段類型
ALTER TABLE students
MODIFY COLUMN age SMALLINT UNSIGNED COMMENT '年齡(調整類型)';
(3)刪除字段
ALTER TABLE students
DROP COLUMN birth; -- 刪除 `birth` 字段(數據將丟失!)
5. 刪除表(謹慎!)
DROP TABLE IF EXISTS students; -- 刪除 "students" 表(數據永久丟失)
四、數據操作:增刪改查(CRUD)
1. 插入數據(Create)
(1)插入單條記錄
INSERT INTO students (name, gender, age, class)
VALUES ('張三', '男', 18, '高三1班');
- 若未指定字段(如
id
和create_time
),則使用默認值(id
自增,create_time
自動填充當前時間)。
(2)插入多條記錄
INSERT INTO students (name, gender, age, class)
VALUES ('李四', '女', 17, '高三1班'),('王五', '男', 19, '高三2班'),('趙六', '其他', 18, '高三1班');
2. 查詢數據(Read)
查詢是最常用操作,通過 SELECT
語句實現。
(1)基礎查詢(查詢所有字段)
SELECT * FROM students; -- * 表示所有字段
(2)指定字段查詢
SELECT name, age, class FROM students; -- 只查詢姓名、年齡、班級
(3)條件過濾(WHERE 子句)
-- 查詢高三1班的男生,年齡 >=18
SELECT * FROM students
WHERE class = '高三1班' AND gender = '男' AND age >= 18;-- 查詢年齡在17-19歲之間的學生(BETWEEN ... AND)
SELECT * FROM students
WHERE age BETWEEN 17 AND 19;-- 查詢姓名包含“張”的學生(LIKE 模糊查詢,% 匹配任意字符)
SELECT * FROM students
WHERE name LIKE '%張%';-- 查詢性別為“女”或“其他”的學生(IN 枚舉值)
SELECT * FROM students
WHERE gender IN ('女', '其他');
(4)排序(ORDER BY)
-- 按年齡降序排序(年齡大的在前)
SELECT * FROM students
ORDER BY age DESC;-- 先按班級升序,再按年齡降序(多字段排序)
SELECT * FROM students
ORDER BY class ASC, age DESC;
(5)分組與聚合(GROUP BY + 聚合函數)
統計每個班級的學生人數:
SELECT class, COUNT(*) AS student_count -- COUNT(*) 統計記錄數
FROM students
GROUP BY class; -- 按班級分組
(6)分頁(LIMIT)
查詢第2頁數據(每頁10條):
SELECT * FROM students
LIMIT 10 OFFSET 10; -- OFFSET 表示跳過的記錄數(第2頁從第11條開始)
-- 簡寫:LIMIT 10, 10(前10條跳過,取接下來的10條)
3. 修改數據(Update)
-- 將姓名為“張三”的學生年齡改為19歲
UPDATE students
SET age = 19
WHERE name = '張三'; -- 必須加 WHERE 條件,否則會修改所有記錄!
4. 刪除數據(Delete)
-- 刪除高三2班的學生記錄
DELETE FROM students
WHERE class = '高三2班'; -- 必須加 WHERE 條件,否則會刪除全表數據!
五、注意事項與最佳實踐
- 編碼問題:創建數據庫/表時指定
CHARSET=utf8mb4
,避免中文或 emoji 亂碼。 - 主鍵設計:每張表建議設置主鍵(如自增
id
),提高查詢效率。 - 避免全表操作:
UPDATE
和DELETE
語句必須加WHERE
條件,否則會修改/刪除所有數據(可先SELECT
驗證條件)。 - 字段類型優化:根據業務需求選擇合適的數據類型,如年齡用
TINYINT
而非INT
,節省空間。