首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 入門教程:基礎概念、SQL 語法與常用操作指南

     編輯:MySQL 資料庫相關知識

MySQL 入門教程

本文面向初學者,系統介紹關係型數據庫基本概念、MySQL 客戶端工具、核心 SQL 語法 (DDL/DML/DQL)、數據類型、權限管理與常用操作技巧,助您快速上手 MySQL 開發與管理。

一、關係型數據庫基礎概念

  • RDBMS:關係數據庫管理系統,以表 (Table) 組織數據,行 = 記錄,列 = 屬性。
  • SQL:結構化查詢語言,標準化操作 RDBMS 的語言,分四類:
    • DDL (Data Definition Language):CREATE/ALTER/DROP 定義結構
    • DML (Data Manipulation Language):INSERT/UPDATE/DELETE 操作數據
    • DQL (Data Query Language):SELECT 查詢數據
    • DCL (Data Control Language):GRANT/REVOKE 權限控制
  • 主流 RDBMS 定位:
    • Access:小型桌面應用 (~1GB)
    • MySQL / SQL Server / PostgreSQL:中型 Web/企業應用
    • Oracle / DB2:大型核心業務、高可用、複雜事務

二、MySQL 客戶端工具

三、連接與會話管理

# 連接本地 (Socket)
mysql -u root -p
# 連接遠程 (TCP)
mysql -h 192.168.1.100 -u root -p
# 指定默認數據庫
mysql -u root -p db_name
# 執行單條 SQL 退出
mysql -u root -p -e "SELECT VERSION();"
# 從文件批量執行
mysql -u root -p db_name < script.sql

# 會話內命令
\q / quit / exit          -- 退出
\c                        -- 取消當前多行輸入
\G                        -- 垂直顯示結果
SOURCE /path/file.sql     -- 執行腳本文件
TEE /path/out.log         -- 記錄輸出
NOTEE                     -- 停止記錄
STATUS / \s               -- 顯示連接狀態

四、核心 SQL 語法速查

數據庫操作

CREATE DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE db_name;
DROP DATABASE db_name;
SHOW DATABASES;
SELECT DATABASE();

表操作 (DDL)

-- 建表範例
CREATE TABLE president (
  last_name  VARCHAR(15) NOT NULL,
  first_name VARCHAR(15) NOT NULL,
  suffix     VARCHAR(5),
  city       VARCHAR(20) NOT NULL,
  state      CHAR(2) NOT NULL,
  birth      DATE NOT NULL DEFAULT '0000-00-00',
  death      DATE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 判斷存在
CREATE TABLE IF NOT EXISTS tbl (...);

-- 複製結構
CREATE TABLE tbl2 LIKE tbl1;
CREATE TABLE tbl2 AS SELECT * FROM tbl1 WHERE 1=0;

-- 修改結構
ALTER TABLE tbl ADD COLUMN col_name TYPE;
ALTER TABLE tbl MODIFY col_name NEW_TYPE;
ALTER TABLE tbl CHANGE old_col new_col NEW_TYPE;
ALTER TABLE tbl DROP COLUMN col_name;
ALTER TABLE tbl RENAME TO new_tbl;

-- 刪表
DROP TABLE tbl;

數據操作 (DML)

-- 插入
INSERT INTO tbl (col1, col2) VALUES ('val1', 'val2');
INSERT INTO tbl VALUES ('val1', 'val2'), ('val3', 'val4');  -- 多行
INSERT INTO tbl SET col1='val1', col2='val2';

-- 更新
UPDATE tbl SET col1='new_val' WHERE id=1;

-- 刪除
DELETE FROM tbl WHERE id=1;
TRUNCATE TABLE tbl;  -- 清空並重置自增,不可回滾

查詢 (DQL)

-- 基礎
SELECT col1, col2 FROM tbl WHERE condition;
SELECT * FROM tbl;

-- 條件與運算符
WHERE col = 'val'
WHERE col IN (1,2,3)
WHERE col BETWEEN 1 AND 100
WHERE col LIKE 'prefix%'      -- 索引友好
WHERE col IS NULL / IS NOT NULL

-- 排序、分頁
ORDER BY col1 DESC, col2 ASC
LIMIT offset, count   -- LIMIT 10, 20 (跳過10取20)

-- 聚合與分組
SELECT col1, COUNT(*), AVG(col2) FROM tbl GROUP BY col1 HAVING COUNT(*) > 5;

-- 多表關聯
SELECT a.col1, b.col2
FROM tbl_a a
INNER JOIN tbl_b b ON a.id = b.a_id
LEFT JOIN tbl_c c ON a.id = c.a_id;

-- 子查詢 / CTE (8.0+)
WITH cte AS (SELECT id FROM tbl WHERE status=1)
SELECT * FROM tbl WHERE id IN (SELECT id FROM cte);

常用函數

  • 字串:CONCAT(), SUBSTRING(), TRIM(), REPLACE(), LENGTH()
  • 日期:NOW(), CURDATE(), DATE_FORMAT(), DATEDIFF(), DATE_ADD()
  • 數學:ROUND(), FLOOR(), CEIL(), RAND()
  • 流程控制:IF(), CASE WHEN, COALESCE(), NULLIF()
  • 聚合:COUNT(), SUM(), AVG(), MAX(), MIN(), GROUP_CONCAT()

五、數據類型選擇指南

工具用途
mysql命令列交互式客戶端,最常用
mysqladmin管理操作:啟停、密碼、狀態、刷新
mysqldump邏輯備份導出 SQL
mysqlimport文本數據批量導入
MySQL Workbench官方 GUI:建模、SQL開發、管理、遷移
Navicat / DBeaver / DataGrip第三方 GUI,功能豐富、跨平台

六、權限管理基礎

-- 建用戶 + 授權 (8.0 語法)
CREATE USER 'app'@'%' IDENTIFIED BY 'StrongPass123!';
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app'@'%';
FLUSH PRIVILEGES;

-- 查看權限
SHOW GRANTS FOR 'app'@'%';

-- 回收
REVOKE INSERT ON app_db.* FROM 'app'@'%';

-- 刪用戶
DROP USER 'app'@'%';

七、常用維護操作

# 備份
mysqldump -u root -p --single-transaction --routines --triggers db_name > backup.sql

# 還原
mysql -u root -p db_name < backup.sql

# 文本導入 (字段 Tab 分隔,NULL 用 \N)
LOAD DATA LOCAL INFILE 'data.txt' INTO TABLE tbl FIELDS TERMINATED BY '\t';

# 修改密碼
mysqladmin -u root -p'old' password 'new'
# 或 SQL
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new';

# 查看進程
SHOW PROCESSLIST;
SHOW FULL PROCESSLIST;

八、避坑指南

  1. 字符集統一用 utf8mb4:支援 Emoji,避免 utf8 (實為 utf8mb3) 截斷 4 字節字符。
  2. 主鍵用自增 BIGINT/INT:業務無關、單調遞增、最小空間、InnoDB 聚簇索引最優。
  3. NOT NULL 默認值:減少 NULL 判斷、節省位圖空間、利於優化器估算。
  4. 避免 SELECT *:明確列名,減少網絡傳輸、利用覆蓋索引、Schema 變更不影響應用。
  5. 大事務拆小:長事務阻塞 Purge、膨脹 Undo、鎖競爭、主從延遲。
  6. 定期 ANALYZE TABLE:更新統計資訊,優化器選擇正確索引。

MySQL 易上手、文檔豐富、社區活躍。掌握核心 SQL、數據類型、索引原理、事務隔離、鎖機制,再配合實戰項目練習,即可勝任初中級開發與運維工作。建議配合官方文檔 dev.mysql.com/doc 深入學習各專題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
類別類型範圍/特點建議場景
整數TINYINT1 字節 -128~127布爾、狀態碼、極小範圍
INT4 字節 ±21 億主鍵、通用計數、ID (首選)
BIGINT8 字節 ±9 京超大 ID、雪花算法、時間戳毫秒
小數DECIMAL(p,s)精確定點數,字串存儲金額、價格、比率 (絕不丟精度)
FLOAT/DOUBLE浮點近似值科學計算、坐標、不需精確場景
字串CHAR(n)定長,右補空格固定長度代碼、MD5、UUID、國旗
VARCHAR(n)變長,1-2 字節長度前綴通用文本、名稱、描述 (最常用)
TEXT/MEDIUMTEXT/LONGTEXT大文本,溢出頁存儲文章、日誌、JSON 文檔
日期時間DATE3 字節 1000-01-01 ~ 9999-12-31生日、入職日期
DATETIME8 字節 秒精度創建/更新時間 (5.6+ 支援微秒)
TIMESTAMP4 字節 1970-2038,時區感知自動更新時間戳、跨時區應用
枚舉/集合ENUM/SET內部存數值,極省空間性別、狀態、固定字典值