命令列是 MySQL 最高效、最通用的管理介面。本文系統整理從服務管理、帳號權限、庫表結構到資料增刪改查的完整操作指南,並針對常見陷阱(如外鍵約束、自增主鍵、註釋語法)提供最佳實踐,適合初學者建立知識體系、資深者作為速查手冊。
# 註冊為系統服務(需管理員權限)
mysqld --install MySQL80
# 啟動/停止服務
net start MySQL80
net stop MySQL80
systemctl start mysqld
systemctl enable mysqld # 開機自啟
systemctl status mysqld
# 交互式連線(推薦,密碼不顯示在歷史)
mysql -u root -p
# 非交互式執行單條 SQL
mysql -u root -p -e "SHOW DATABASES;"
# 指定協議/端口/Socket
mysql -h 192.168.1.10 -P 3306 -u root -p
mysql -S /tmp/mysql.sock -u root -p # 本地 Socket 連線,繞過網路層
USE mysql;
SELECT User, Host, plugin, authentication_string FROM user;
-- 關鍵欄位:Host 決定允許連線來源(% 為任意 IP,localhost 僅本地 Socket)
-- 8.0 推薦:建立 + 指定認證插件
CREATE USER 'zhangxiansen'@'%' IDENTIFIED WITH mysql_native_password BY 'StrongPass@123';
-- 或 5.7 相容語法
CREATE USER 'zhangxiansen'@'localhost' IDENTIFIED BY 'StrongPass@123';
-- 全庫全表所有權限(生產慎用)
GRANT ALL PRIVILEGES ON *.* TO 'zhangxiansen'@'%' WITH GRANT OPTION;
-- 特定庫讀寫權限(應用帳號標準)
GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `app_db`.* TO 'app_user'@'%';
-- 僅讀權限(報表/分析帳號)
GRANT SELECT ON `app_db`.* TO 'readonly'@'%';
-- 刷新權限生效
FLUSH PRIVILEGES;
GRANT ALL ON *.* 包含 SHUTDOWN、FILE 等高危權限,**生產嚴禁**Host 欄位區分 localhost(Socket)與 127.0.0.1(TCP),連線協議不匹配會拒絕validate_password 插件強制長度/複雜度,建立前檢查 SHOW VARIABLES LIKE 'validate_password%'CREATE DATABASE `test_data` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
SHOW DATABASES;
USE `test_data`;
DROP DATABASE `test_data`;
CREATE TABLE `stu` (
`stuId` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '學生ID',
`stuName` VARCHAR(15) NOT NULL COMMENT '姓名',
`roomId` INT UNSIGNED NULL COMMENT '教室ID',
`age` TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '年齡',
PRIMARY KEY (`stuId`),
KEY `idx_room` (`roomId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='學生表';
關鍵點:
ENGINE=InnoDB、CHARSET=utf8mb4UNSIGNED、NOT NULL、DEFAULTCOMMENT 覆蓋表/欄位,利於數據字典生成| 操作 | 語法範例 | 注意事項 |
|---|---|---|
| 修改欄位型別 | ALTER TABLE classRoom MODIFY roomName CHAR(10); | 需重寫全表,大表謹慎執行 |
| 重命名欄位 | ALTER TABLE classRoom CHANGE roomName room_name CHAR(10); | CHANGE 需重新指定完整定義 |
| 新增欄位 | ALTER TABLE stu ADD COLUMN age TINYINT UNSIGNED NOT NULL DEFAULT 0 AFTER stuName; | FIRST/AFTER 指定位置 |
| 刪除欄位 | ALTER TABLE stu DROP COLUMN age; | 不可逆,外鍵依賴會報錯 |
| 重命名表 | ALTER TABLE stu RENAME TO student; | 原子操作,極快 |