針對初學者,本文從零開始介紹 MySQL 命令列基本操作,涵蓋連線、資料庫/表管理、資料增刪改查、批次執行、匯入匯出等核心技能,附實戰範例可直接複製執行。
# 連線本機(無密碼)
mysql -u root -p
# 輸入密碼後進入 mysql> 提示符
# 連線指定資料庫
mysql -u root -p mydb
# 退出
mysql> EXIT;
# 或 QUIT、\q、Ctrl+D
# 顯示所有資料庫
SHOW DATABASES;
# 建立資料庫(指定字元集)
CREATE DATABASE `school` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
# 切換資料庫
USE `school`;
# 刪除資料庫
DROP DATABASE `school`;
# 建立表
CREATE TABLE `teacher` (
`id` INT(3) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` CHAR(10) NOT NULL,
`address` VARCHAR(50) DEFAULT '深圳',
`birth` DATE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
# 顯示所有表
SHOW TABLES;
# 查看表結構
DESC `teacher`; -- 或 SHOW COLUMNS FROM `teacher`
# 刪除表
DROP TABLE `teacher`;
-- 插入 (INSERT)
INSERT INTO `teacher` (`name`, `address`, `birth`) VALUES ('glchengang', '深圳一中', '1976-10-10');
INSERT INTO `teacher` (`name`, `address`, `birth`) VALUES ('jack', '深圳一中', '1975-12-23');
-- 批次插入
INSERT INTO `teacher` (`name`, `address`, `birth`) VALUES
('alice', '深圳二中', '1980-01-01'),
('bob', '深圳三中', '1985-05-05');
-- 查詢 (SELECT)
SELECT * FROM `teacher`;
SELECT `id`, `name` FROM `teacher` WHERE `address` = '深圳一中';
SELECT * FROM `teacher` ORDER BY `birth` DESC LIMIT 5;
-- 更新 (UPDATE)
UPDATE `teacher` SET `name` = 'GL Chengang' WHERE `name` = 'glchengang';
-- 刪除 (DELETE)
DELETE FROM `teacher` WHERE `id` = 2;
-- 清空表(保留結構、重置自增)
TRUNCATE TABLE `teacher`;
# 準備 school.sql(去掉註釋)
DROP DATABASE IF EXISTS `school`;
CREATE DATABASE `school` CHARACTER SET utf8mb4;
USE `school`;
CREATE TABLE `teacher` (
`id` INT(3) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` CHAR(10) NOT NULL,
`address` VARCHAR(50) DEFAULT '深圳',
`birth` DATE
);
INSERT INTO `teacher` (`name`, `address`, `birth`) VALUES ('glchengang', '深圳一中', '1976-10-10');
INSERT INTO `teacher` (`name`, `address`, `birth`) VALUES ('jack', '深圳一中', '1975-12-23');
# 方式 1:重導向(非互動)
mysql -u root -p < school.sql
# 方式 2:SOURCE 指令(互動模式)
mysql> SOURCE /path/to/school.sql;
# 或
mysql> \. /path/to/school.sql
# data.txt(Tab 分隔,NULL 用 \N)
3 rose 深圳二中 1976-10-10
4 mike 深圳一中 1975-12-23
LOAD DATA LOCAL INFILE '/path/to/data.txt'
INTO TABLE `teacher`
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
(`id`, `name`, `address`, `birth`);
# 匯出 (mysqldump)
mysqldump -u root -p --single-transaction `school` > school_backup_$(date +%F).sql
# 壓縮
mysqldump -u root -p `school` | gzip > school_backup_$(date +%F).sql.gz
# 還原
mysql -u root -p `school` < school_backup.sql
# 壓縮檔還原
gunzip -c school_backup.sql.gz | mysql -u root -p `school`
SELECT * FROM t; 才會執行,可跨行輸入。\c 清除緩衝區。readline 庫)。mysql> 就緒-> 續行(未遇分號)'> 單引號字串未閉合"> 雙引號字串未閉合`> 反引號識別碼未閉合/*> 註釋未閉合# CMD 執行
mysql -u root -p
# 匯出
mysqldump -u root -p --opt school > school.sql
# 匯入
mysql -u root -p school < school.sql