MySQL 命令列互動模式下逐筆輸入 INSERT 語句極易出錯且效率低落。本文示範如何將結構定義與資料準備為 SQL 腳本檔案,透過重導向一次性匯入資料庫。
# DOS 環境下建立資料庫
mysqladmin -u root create mydb
# 進入 MySQL 客戶端
mysql -u root
use mydb;
使用文字編輯器建立檔案,確保每個 INSERT 語句獨佔一行:
CREATE TABLE employees (
id tinyint(4) DEFAULT 0 NOT NULL AUTO_INCREMENT,
first varchar(20),
last varchar(20),
address varchar(255),
position varchar(50),
PRIMARY KEY (id),
UNIQUE id (id)
);
INSERT INTO employees VALUES (1, 'Bob', 'Smith', '128 Here St', 'Cityname', 'Marketing Manager');
INSERT INTO employees VALUES (2, 'John', 'Roberts', '45 There St', 'Townville', 'Telephonist');
INSERT INTO employees VALUES (3, 'Brad', 'Johnson', '1/34 Nowhere Blvd', 'Snowston', 'Doorman');
# 命令列執行 (非 MySQL 客戶端內部)
mysql -u root mydb < mydb.dump
參數說明:
-u root:指定 root 使用者mydb:目標資料庫名稱< mydb.dump:Shell 重導向,將檔案內容作為標準輸入傳給 mysql 客戶端| 方式 | 優點 | 缺點 |
|---|---|---|
| 互動式輸入 | 即時回饋、適合少量測試 | 易出錯、無法版控、重複性差 |
| SQL 腳本匯入 | 可版控、可重複執行、支援版本管理、適合部署自動化 | 需預先準備檔案 |
| GUI 工具匯入 | 視覺化、支援多格式 (CSV/Excel) | 難以自動化、大檔案易超時 |
# 僅匯出結構 (無資料)
mysqldump -u root -p --no-data mydb > structure.sql
# 僅匯出資料 (無結構)
mysqldump -u root -p --no-create-info mydb > data.sql
# 完整備份 (結構+資料+觸發器/存儲過程)
mysqldump -u root -p --routines --triggers mydb > full_backup.sql
SET autocommit=0; SET unique_checks=0; SET foreign_key_checks=0; 於腳本開頭,結尾恢復並 COMMIT;SELECT COUNT(*) FROM employees; 對比預期筆數現代補充:生產環境資料遷移建議使用pt-online-schema-change(Percona Toolkit) 或gh-ost實現零停機結構變更與大量資料導入。