跳轉至

建立 2025-02-12 更新 2026-10-03

MySQL MySQL 使用簡介

MySQL 是全世界最普及的開源關聯式資料庫之一,目前由 Oracle 維護,大量網站後端(例如 WordPress)都使用它;MariaDB 則是由 MySQL 原作者分支出來、高度相容的開源版本。本頁介紹如何安裝或用 Docker 啟動 MySQL,以及用 Python 的 PyMySQL 或 mysql-connector-python 讀寫 MySQL 資料庫。

安裝 MySQL

docker run --name my_mysql -e MYSQL_ROOT_PASSWORD=mysecretpassword -p 3306:3306 -v /path/to/your/local/directory:/var/lib/mysql -d mysql:8.4

參數意義與 PostgreSQL 的 Docker 指令 相同;MYSQL_ROOT_PASSWORD 設定管理者 root 的密碼,mysql:8.4 是長期支援(LTS)版本。

用命令列客戶端連線並建立專案用的資料庫與帳號:

docker exec -it my_mysql mysql -u root -p
CREATE DATABASE app_db CHARACTER SET utf8mb4;
CREATE USER 'app_user'@'%' IDENTIFIED BY 'app_password';
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'%';
SHOW DATABASES;

中文與 Emoji 請用 utf8mb4

MySQL 的 utf8 其實只支援到 3 個位元組,存不了 Emoji 與部分罕用字。建立資料庫與資料表時請使用 utf8mb4(MySQL 8 起為預設值),Python 連線時也指定 charset="utf8mb4"。

1. 使用 PyMySQL

PyMySQL 是純 Python 實作的 MySQL 驅動,安裝簡單、跨平台。

1.1 安裝 PyMySQL

pip install pymysql

1.2 連接到 MySQL 並讀取數據

import pymysql

# 連接到 MySQL 資料庫
conn = pymysql.connect(
    host="localhost",
    user="your_username",
    password="your_password",
    database="your_database",
    port=3306,          # 預設 MySQL 埠號是 3306,如果你使用的是不同的埠號,請在這裡指定
    charset="utf8mb4",
)

# 創建 cursor
cursor = conn.cursor()

# 執行 SQL 查詢(參數以 %s 佔位)
cursor.execute("SELECT * FROM your_table WHERE id > %s", (0,))

# 獲取所有查詢結果
rows = cursor.fetchall()

# 打印每一行
for row in rows:
    print(row)

# 關閉 cursor 和連接
cursor.close()
conn.close()

想讓每一列以 dict 形式回傳,可在連線時加上 cursorclass=pymysql.cursors.DictCursor。

2. 使用 mysql-connector-python

mysql-connector-python 是 MySQL 官方(Oracle)提供的驅動。

2.1 安裝 mysql-connector-python

pip install mysql-connector-python

2.2 連接到 MySQL 並讀取數據

import mysql.connector

# 連接到 MySQL 資料庫
conn = mysql.connector.connect(
    host="localhost",
    user="your_username",
    password="your_password",
    database="your_database",
    port=3306,  # 預設 MySQL 埠號是 3306,如果你使用的是不同的埠號,請在這裡指定
)

# 創建 cursor
cursor = conn.cursor()

# 執行 SQL 查詢
cursor.execute("SELECT * FROM your_table")

# 獲取所有查詢結果
rows = cursor.fetchall()

# 打印每一行
for row in rows:
    print(row)

# 關閉 cursor 和連接
cursor.close()
conn.close()

3. 寫入資料記得 commit

兩個套件預設都不會自動提交交易。執行 INSERT、UPDATE、DELETE 之後,必須呼叫 conn.commit(),否則關閉連線時變更會被捨棄:

cursor.execute(
    "INSERT INTO users (name, age) VALUES (%s, %s)",
    ("Alice", 30),
)
conn.commit()
print(cursor.lastrowid)  # 自動遞增產生的 id

4. 程式碼說明

名稱 說明
conn 與 MySQL 資料庫的連線物件
cursor 游標,透過它執行 SQL 語句並取得結果
execute() 執行一條 SQL 語句;參數用 %s 佔位並以 tuple 傳入,避免 SQL 注入
fetchall() / fetchone() 取得全部結果/逐筆取得結果
commit() 提交交易,讓寫入真正生效
close() 完成操作後,關閉游標和連線

推薦影音

MySQL Workbench Tutorial(MySQL 官方頻道)

簡述:MySQL 官方 YouTube 頻道示範如何用 MySQL Workbench 連線伺服器、瀏覽資料表、撰寫與執行查詢,適合剛安裝好 MySQL 的初學者。

MySQL 資料庫安裝、快速開始(彭彭的課程)

簡述:台灣講師彭彭以中文示範 MySQL 的下載安裝與第一次連線使用,屬於「MySQL 資料庫全攻略」系列的一集,適合偏好中文講解的入門者。

MySQL - The Basics: Learn SQL in 23 Easy Steps(Fireship)

簡述:用 17 分鐘、23 個步驟快速走過 MySQL 的安裝、建表、查詢、JOIN 與索引,節奏很快,適合已有程式基礎、想快速上手的人。

相關資料

官方認證課程

Oracle 提供 MySQL 訓練與認證,包含 MySQL 8.0 Database Administrator(考試 1Z0-908)與 MySQL 8.0 Database Developer(考試 1Z0-909),適合想取得正式認證的資料庫管理者與後端工程師。