1. 連線登入
# 標準登入 (提示輸入密碼)
mysql -u root -p
# 指定主機/埠口
mysql -h 192.168.1.100 -P 3306 -u root -p
# 直接帶密碼 (不安全,僅腳本用)
mysql -u root -p'password'
# 無密碼本機 (預設 root@localhost)
mysql
2. 資料庫 (Schema) 操作
-- 列出所有庫
SHOW DATABASES;
-- 建立庫 (指定字符集)
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 切換/使用庫
USE mydb;
-- 刪除庫 (慎用!)
DROP DATABASE mydb;
-- 查看當前庫
SELECT DATABASE();
3. 資料表操作
-- 列出當前庫所有表
SHOW TABLES;
-- 查看表結構
DESCRIBE tbl_name;
-- 或
SHOW COLUMNS FROM tbl_name;
-- 或詳細
SHOW CREATE TABLE tbl_name;
-- 建表示例
CREATE TABLE users (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL,
password_hash CHAR(60) NOT NULL,
status TINYINT DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 修改表結構
ALTER TABLE users ADD COLUMN phone VARCHAR(20);
ALTER TABLE users MODIFY COLUMN email VARCHAR(150);
ALTER TABLE users DROP COLUMN phone;
ALTER TABLE users RENAME TO app_users;
-- 刪除表
DROP TABLE IF EXISTS old_table;
4. 資料增刪改查 (CRUD)
-- 插入 (單筆)
INSERT INTO users (username, email, password_hash) VALUES ('john', 'john@example.com', '$2a$10$...');
-- 插入 (多筆,效能佳)
INSERT INTO users (username, email, password_hash)
VALUES ('alice', 'alice@ex.com', '...'), ('bob', 'bob@ex.com', '...');
-- 查詢 (全部)
SELECT * FROM users;
-- 查詢 (條件)
SELECT id, username, email FROM users WHERE status = 1;
-- 模糊查詢
SELECT * FROM users WHERE username LIKE 'john%';
-- 更新
UPDATE users SET status = 0, updated_at = NOW() WHERE id = 1;
-- 刪除 (條件)
DELETE FROM users WHERE id = 1;
-- 刪除 (全表,慎用!)
DELETE FROM users;
-- 或極速清空
TRUNCATE TABLE users;
5. 進階查詢技巧
-- 排序與分頁
SELECT * FROM users ORDER BY created_at DESC LIMIT 10 OFFSET 20;
-- 聚合統計
SELECT status, COUNT(*) AS cnt FROM users GROUP BY status;
-- 連接查詢
SELECT u.username, o.order_no FROM users u JOIN orders o ON u.id = o.user_id;
-- 子查詢
SELECT * FROM users WHERE id IN (SELECT user_id FROM orders WHERE amount > 1000);
6. 文字檔匯入 (LOAD DATA)
-- 格式:欄位逗號分隔、雙引號包裹、換行分隔
LOAD DATA LOCAL INFILE '/path/users.csv'
INTO TABLE users
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(username, email, password_hash); -- 指定欄位順序
7. 權限管理
-- 建立用戶
CREATE USER 'app'@'%' IDENTIFIED BY 'StrongPass!';
-- 授權
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'app'@'%';
GRANT ALL PRIVILEGES ON mydb.* TO 'admin'@'%';
-- 刷新權限
FLUSH PRIVILEGES;
-- 查看權限
SHOW GRANTS FOR 'app'@'%';
-- 撤銷權限
REVOKE DELETE ON mydb.* FROM 'app'@'%';
8. 實用系統指令
-- 查看版本
SELECT VERSION();
-- 查看狀態
SHOW GLOBAL STATUS LIKE 'Threads_connected';
SHOW GLOBAL VARIABLES LIKE 'max_connections';
-- 查看進程
SHOW PROCESSLIST;
SHOW FULL PROCESSLIST;
-- 關閉連線
KILL 12345;
-- 重載配置 (無需重啟)
FLUSH PRIVILEGES;
FLUSH LOGS;
新手必記 10 條
- 永遠
WHERE 後加條件,防誤刪誤改全表
- 生產環境禁用
root 遠程登入
- 字符集統一
utf8mb4
- 時間欄位用
TIMESTAMP (自動更新) 或 DATETIME
- 主鍵用
BIGINT UNSIGNED AUTO_INCREMENT
- 金額用
DECIMAL(19,4) 禁用浮點數
- 軟刪除
deleted_at 替代硬刪除
- 重要操作先
BEGIN 再 COMMIT
- 定期備份、定期演練恢復
- 慢查詢日誌永遠開啟