# 進入安裝目錄 bin
cd /usr/local/mysql/bin
# 或 Windows
cd C:\Program Files\MySQL\MySQL Server 8.0\bin
# 連線
mysql -h localhost -u root -p
# 密碼可緊跟 -p 或交互輸入
# 顯示庫/表
SHOW DATABASES;
USE mydb;
SHOW TABLES;
| 操作 | SQL |
|---|---|
| 建庫(指定字符集) | CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; |
| 刪庫 | DROP DATABASE mydb; |
| 建表 | CREATE TABLE users (id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; |
| 刪表 | DROP TABLE users; |
| 查看結構 | DESCRIBE users; / SHOW CREATE TABLE users\G |
| 修改表名 | RENAME TABLE users TO members; |
| 新增欄位 | ALTER TABLE users ADD COLUMN phone VARCHAR(20) AFTER email; |
| 修改欄位 | ALTER TABLE users MODIFY COLUMN name VARCHAR(100) NOT NULL; |
| 刪除欄位 | ALTER TABLE users DROP COLUMN phone; |
| 新增索引 | ALTER TABLE users ADD INDEX idx_email (email); |
| 刪除索引 | ALTER TABLE users DROP INDEX idx_email; |
-- 插入(指定欄位)
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com');
-- 批次插入
INSERT INTO users (name, email) VALUES
('Bob', 'bob@example.com'),
('Carol', 'carol@example.com');
-- 查詢
SELECT * FROM users;
SELECT id, name FROM users WHERE email LIKE '%@example.com' LIMIT 10;
SELECT * FROM users ORDER BY created_at DESC;
-- 更新
UPDATE users SET name = 'Alice Smith' WHERE id = 1;
-- 刪除
DELETE FROM users WHERE id = 2;
-- 清空表(重置自增)
TRUNCATE TABLE users;
| 類別 | 範例 |
|---|---|
| 比較 | =, !=, <>, >, <, >=, <=, BETWEEN, IN, NOT IN, LIKE, REGEXP |
| 邏輯 | AND, OR, NOT |
| 字符串 | CONCAT, SUBSTRING, REPLACE, TRIM, UPPER, LOWER, LENGTH |
| 數學 | +, -, *, /, DIV, MOD, ROUND, FLOOR, CEIL, ABS |
| 日期 | NOW(), CURDATE(), CURTIME(), DATE_ADD, DATE_SUB, DATEDIFF, DATE_FORMAT |
| 聚合 | COUNT, SUM, AVG, MAX, MIN, GROUP_CONCAT |
| 模式 | 關鍵字 | 結果集 |
|---|---|---|
| 內連接 | INNER JOIN / JOIN | 兩表匹配行 |
| 左連接 | LEFT JOIN | 左表所有 + 右表匹配 |
| 右連接 | RIGHT JOIN | 右表所有 + 左表匹配 |
| 全連接 | FULL JOIN(MySQL 不支援,用 UNION 模擬) | 兩表所有行 |
CREATE USER 'app'@'%' IDENTIFIED BY 'Pass#2024';
GRANT SELECT, INSERT, UPDATE ON mydb.* TO 'app'@'%';
FLUSH PRIVILEGES;
# 邏輯備份
mysqldump -u root -p --single-transaction --master-data=2 mydb > mydb.sql
# 還原
mysql -u root -p mydb < mydb.sql