MySQL Database CLI Skill

👤 429668385 📦 v1.0.1 ⭐ 4.5 ⬇️ 1.2K 下載
💻 開發程式設計 免費

📖 技能介紹


name: mysql-database description: "MySQL 資料庫操作技能。通過 mysql CLI 連線資料庫,執行 SELECT 查詢、INSERT/UPDATE/DELETE 增刪改、批次 SQL 執行、事務控制、資料庫/表管理、JSON 格式輸出。適用場景:查使用者資料、統計報表、資料匯入匯出、資料庫巡檢、表結構檢視、遠端連線、生產環境除錯。觸發關鍵詞:MySQL、資料庫查詢、SQL 語句執行、連線資料庫、查表、資料增刪改、jdbc 連線字串、navicat、資料庫遷移、DESCRIBE TABLE、查看錶結構、表字段分析、檢視索引、EXPLAIN 查詢分析。" license: "Copyright © 2026 少煊(年少有為,名聲煊赫)429668385@qq.com. All rights reserved."


MySQL Database Skill

Use the mysql CLI to connect to and interact with MySQL databases. Use the -e flag to execute SQL statements and the -s (--silent) flag to produce clean output suitable for processing. Combine with -r (--raw) to avoid escaping, and pipe the result to jq for reliable JSON formatting.

快速使用場景

場景 1: 查詢資料(最常用)

mysql -h <host> -u <user> --database <db> -s -r -e "SELECT * FROM users LIMIT 10;" 2>$null

場景 2: 查看錶結構

mysql -h <host> -u <user> --database <db> -s -r -e "DESCRIBE users;" 2>$null

場景 3: 插入/更新/刪除資料

# 插入
mysql -h <host> -u <user> --database <db> -s -r -e "INSERT INTO users (name, email) VALUES ('Test', 'test@example.com');" 2>$null

# 更新
mysql -h <host> -u <user> --database <db> -s -r -e "UPDATE users SET status=1 WHERE id=1;" 2>$null

# 刪除
mysql -h <host> -u <user> --database <db> -s -r -e "DELETE FROM users WHERE id=1;" 2>$null

場景 4: 統計資料報表

mysql -h <host> -u <user> --database <db> -s -r -e "SELECT COUNT(*) as total, SUM(amount) as revenue FROM orders WHERE DATE(create_time)=CURDATE();" | jq -s '.'

場景 5: 匯出資料到檔案

mysql -h <host> -u <user> --database <db> -s -r -e "SELECT * FROM users INTO OUTFILE '/tmp/users.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n';" 2>$null

場景 6: 執行 SQL 指令碼檔案

mysql -h <host> -u <user> --database <db> -s -r < script.sql 2>$null

資料庫連線

基礎連線

mysql -h <hostname> -P <port> -u <username> --database <database-name> -s -r

示例 (連線本地資料庫):

MYSQL_PWD=yourpassword mysql -h 127.0.0.1 -u app_user --database app_db -s -r

從 JDBC URL 解析連線引數

使用者可能提供 JDBC URL 格式:jdbc:mysql://host:port/database,需要解析為 mysql CLI 引數:

jdbc:mysql://nexus.syrinxchina.com:3306/test3
  → -h nexus.syrinxchina.com -P 3306 --database test3
# 示例:從 JDBC URL 構建連線
JDBC_URL="jdbc:mysql://nexus.syrinxchina.com:3306/test3"
HOST=$(echo $JDBC_URL | sed -n 's/.*:\/\/\([^:]*\):\([0-9]*\)\/\(.*\)/\1/p')
PORT=$(echo $JDBC_URL | sed -n 's/.*:\/\/\([^:]*\):\([0-9]*\)\/\(.*\)/\2/p')
DB=$(echo $JDBC_URL | sed -n 's/.*:\/\/\([^:]*\):\([0-9]*\)\/\(.*\)/\3/p')
mysql -h "$HOST" -P "$PORT" -u root --database "$DB" -s -r

連線參數列

Option Description
-h Hostname (default: localhost)
-P Port (default: 3306)
-u Username
-p Prompt for password (less secure, avoid in scripts)
-D / --database Default database
-e Execute query and exit
-s Silent mode (no headers/borders)
-r Raw mode (no escaping)
--ssl-mode=REQUIRED Force SSL connection
--connect-timeout=<seconds> Connection timeout
--default-character-set=utf8mb4 Character set

連線示例 (完整引數):

MYSQL_PWD=password mysql -h 192.168.1.100 -P 3306 -u admin --database mydb --ssl-mode=REQUIRED --connect-timeout=10 -s -r

使用配置檔案

建立 ~/.my.cnf 簡化頻繁連線:

[client]
host = 127.0.0.1
port = 3306
user = app_user
database = app_db
password = yourpassword
ssl-mode = DISABLED
mysql --defaults-extra-file=~/.my.cnf -s -r -e "SELECT 1;"

小蔥技能站7w4.net每天更新,海量AI技能等你發現。

資料操作

查詢 (SELECT)

mysql -h <host> -u <user> --database <db> -s -r -e "SELECT * FROM your_table LIMIT 5;" | jq -R -s 'split("\n") | map(select(. != "")) | map(split("\t")) | {headers: .[0], rows: .[1:]}'

更推薦的方法 (在SQL內生成JSON):

mysql -h <host> -u <user> --database <db> -s -r -e "SELECT JSON_OBJECT('id', id, 'name', name) FROM users LIMIT 5;" | jq -s '.'

輸出:

[
 {"id": 1, "name": "Alice"},
 {"id": 2, "name": "Bob"}
]

插入 (INSERT)

mysql -h <host> -u <user> --database <db> -s -r -e "INSERT INTO users (name, email) VALUES ('New User', 'new@example.com'); SELECT JSON_OBJECT('last_insert_id', LAST_INSERT_ID());" | jq .

更新 (UPDATE)

mysql -h <host> -u <user> --database <db> -s -r -e "UPDATE users SET status = 'active' WHERE signup_date < '2026-01-01'; SELECT JSON_OBJECT('rows_affected', ROW_COUNT());" | jq .

刪除 (DELETE)

mysql -h <host> -u <user> --database <db> -s -r -e "DELETE FROM sessions WHERE last_activity < DATE_SUB(NOW(), INTERVAL 30 DAY); SELECT JSON_OBJECT('rows_affected', ROW_COUNT());" | jq .

高階查詢與 JSON 輸出

統計摘要查詢

mysql -h <host> -u <user> --database <db> -s -r -e "
SELECT JSON_OBJECT(
 'total_users', (SELECT COUNT(*) FROM users),
 'active_users', (SELECT COUNT(*) FROM users WHERE status = 'active'),
 'avg_posts', (SELECT AVG(post_count) FROM user_stats)
) AS report;
" | jq .

通用 JSON 輸出模式

單行結果:

mysql ... -s -r -e "SELECT JSON_OBJECT('key1', column1, 'key2', column2) FROM ..." | jq .

多行結果:

mysql ... -s -r -e "SELECT JSON_ARRAYAGG(JSON_OBJECT('id', id, 'name', name)) FROM users;" | jq .

批次執行 SQL 檔案

mysql -h <host> -u <user> --database <db> -s -r < script.sql 2>$null

帶變數執行:

mysql -h <host> -u <user> --database <db> -s -r -e "source script.sql;"

批次匯入 CSV:

mysql -h <host> -u <user> --database <db> -s -r -e "LOAD DATA LOCAL INFILE 'data.csv' INTO TABLE my_table FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n' (col1, col2, col3);"

事務支援

# 提交事務
mysql -h <host> -u <user> --database <db> -s -r -e "
START TRANSACTION;
INSERT INTO orders (user_id, total) VALUES (1, 100.50);
UPDATE inventory SET stock = stock - 1 WHERE product_id = 42;
COMMIT;
SELECT JSON_OBJECT('status', 'committed') AS result;
" | jq .

事務回滾:

mysql -h <host> -u <user> --database <db> -s -r -e "
START TRANSACTION;
INSERT INTO users (name) VALUES ('Test');
ROLLBACK;
SELECT JSON_OBJECT('rolled_back', true) AS result;
" | jq .

錯誤處理

常見錯誤碼

Error Code Meaning Solution
1045 Access denied 檢查使用者名稱/密碼是否正確
1049 Unknown database 檢查資料庫名是否存在
2003 Can't connect to MySQL 檢查 MySQL 服務是否啟動,埠是否開放
1146 Table doesn't exist 檢查表名拼寫是否正確

超時配置

mysql -h <host> -u <user> --database <db> --connect-timeout=5 --read-timeout=30 --write-timeout=30 -s -r -e "SELECT * FROM large_table;"

連線測試模式

mysql -h <host> -u <user> --database <db> -s -r -e "SELECT 1 AS connected;" 2>&1 | grep -q "connected" && echo "連線成功" || echo "連線失敗"

資料庫與表操作

建立資料庫

mysql -h <host> -u <user> -s -r -e "CREATE DATABASE IF NOT EXISTS new_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"

列出所有資料庫

mysql -h <host> -u <user> -s -r -e "SHOW DATABASES;"

列出表

mysql -h <host> -u <user> --database <db> -s -r -e "SHOW TABLES;"

查看錶結構

mysql -h <host> -u <user> --database <db> -s -r -e "DESCRIBE users;"

檢視索引

mysql -h <host> -u <user> --database <db> -s -r -e "SHOW INDEX FROM users;"

檢視建表語句

mysql -h <host> -u <user> --database <db> -s -r -e "SHOW CREATE TABLE users;" | jq -s '.'

DESCRIBE TABLE 詳解

檢視單表結構

mysql -h <host> -u <user> --database <db> -s -r -e "DESCRIBE users;"

輸出欄位說明:

欄位 說明
Field 列名
Type 資料型別(varchar(64)、int、datetime 等)
Null 是否允許 NULL(YES/NO)
Key 索引型別(PRI=主鍵、UNI=唯一索引、MUL=普通索引)
Default 預設值
Extra 額外屬性(auto_increment、DEFAULT_GENERATED 等)

格式化輸出為 JSON

mysql -h <host> -u <user> --database <db> -s -r -e "
SELECT JSON_ARRAYAGG(JSON_OBJECT(
  'column', Field,
  'type', Type,
  'nullable', NULL,
  'key', Key,
  'default', Default,
  'extra', Extra
)) AS columns FROM information_schema.columns
WHERE table_schema = '<database>' AND table_name = '<table>'
ORDER BY ordinal_position;" | jq .

查看錶的所有資訊(含註釋)

mysql -h <host> -u <user> --database <db> -s -r -e "
SELECT COLUMN_NAME, DATA_TYPE, COLUMN_TYPE, IS_NULLABLE, COLUMN_KEY, COLUMN_DEFAULT, EXTRA, COLUMN_COMMENT
FROM information_schema.columns
WHERE table_schema = '<database>' AND table_name = '<table>'
ORDER BY ordinal_position;" | jq -s '.'

快速檢視主鍵和自增欄位

mysql -h <host> -u <user> --database <db> -s -r -e "
SELECT COLUMN_NAME, DATA_TYPE, EXTRA
FROM information_schema.columns
WHERE table_schema = '<database>'
  AND table_name = '<table>'
  AND (COLUMN_KEY = 'PRI' OR EXTRA LIKE '%auto_increment%')
ORDER BY COLUMN_KEY DESC, ordinal_position;" | jq -s '.'

EXPLAIN 查詢分析(重要!)

分析 SELECT 查詢執行計劃:

mysql -h <host> -u <user> --database <db> -s -r -e "EXPLAIN SELECT * FROM users WHERE phone = '13800138000';" | jq -s '.'

輸出欄位說明:

欄位 說明
id 查詢編號
select_type 查詢型別(SIMPLE、PRIMARY、SUBQUERY 等)
table 查詢的表
type 連線型別(const、ref、range、ALL 等,ALL 表示全表掃描)
possible_keys 可能使用的索引
key 實際使用的索引
key_len 索引長度
rows 預計掃描行數(越小越好)
Extra 額外資訊(Using index、Using where、Using filesort 等)

type 效能排序(從快到慢):

const > eq_ref > ref > range > index > ALL

ALL 是全表掃描,需要最佳化(加索引)。

EXPLAIN ANALYZE(MySQL 8.0+)

mysql -h <host> -u <user> --database <db> -s -r -e "EXPLAIN ANALYZE SELECT * FROM users WHERE phone = '13800138000';" | jq -s '.'

比 EXPLAIN 更詳細,包含實際執行時間實際行數

查看錶的索引詳情

mysql -h <host> -u <user> --database <db> -s -r -e "SHOW INDEX FROM users;" | jq -s '.'

返回每個索引的:索引名、列名、唯一性、基數、索引型別

查看錶大小和行數

mysql -h <host> -u <user> --database <db> -s -r -e "
SELECT
  table_name,
  table_rows,
  ROUND(data_length / 1024 / 1024, 2) AS 'data_size_mb',
  ROUND(index_length / 1024 / 1024, 2) AS 'index_size_mb',
  ROUND((data_length + index_length) / 1024 / 1024, 2) AS 'total_size_mb'
FROM information_schema.tables
WHERE table_schema = '<database>'
ORDER BY (data_length + index_length) DESC;" | jq -s '.'

檢視資料庫中所有表的基本資訊

mysql -h <host> -u <user> --database <db> -s -r -e "
SELECT
  TABLE_NAME AS 'table',
  TABLE_ROWS AS 'rows',
  ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024, 2) AS 'size_mb',
  ROUND(DATA_FREE / 1024 / 1024, 2) AS 'free_mb',
  ENGINE,
  TABLE_COMMENT
FROM information_schema.tables
WHERE table_schema = '<database>'
  AND table_type = 'BASE TABLE'
ORDER BY (DATA_LENGTH + INDEX_LENGTH) DESC;" | jq -s '.'

free_mb 過大說明表有碎片,可以定期 OPTIMIZE TABLE 回收空間。

環境變數配置

export MYSQL_PWD="yourpassword"
export MYSQL_HOST="127.0.0.1"
export MYSQL_USER="app_user"
export MYSQL_DATABASE="app_db"

mysql -s -r -e "SELECT 1;"

完整示例指令碼

#!/bin/bash
# 查詢使用者統計資料(帶錯誤處理)

DB_HOST="${MYSQL_HOST:-127.0.0.1}"
DB_USER="${MYSQL_USER:-app_user}"
DB_NAME="${MYSQL_DATABASE:-app_db}"

QUERY="
SELECT JSON_OBJECT(
  'timestamp', NOW(),
  'summary', JSON_OBJECT(
    'total_users', (SELECT COUNT(*) FROM users),
    'active_users', (SELECT COUNT(*) FROM users WHERE status = 'active'),
    'new_today', (SELECT COUNT(*) FROM users WHERE DATE(created_at) = CURDATE())
  )
) AS report;
"

mysql -h "$DB_HOST" -u "$DB_USER" --database "$DB_NAME" -s -r -e "$QUERY" 2>&1 | jq .

安全建議

  1. 禁止在命令列中直接寫密碼(程序列表可見)
  2. 使用 MYSQL_PWD 環境變數或配置檔案
  3. 生產環境強制使用 SSL (--ssl-mode=REQUIRED)
  4. 配置檔案許可權設定為 chmod 600 ~/.my.cnf
  5. 查詢操作使用只讀賬號

重要提示: 使用 -s -r (--silent --raw) 組合確保 mysql 客戶端輸出純淨資料,是生成有效 JSON 的前提。

🤖 AI 評測

這個技能質量不錯,文件非常詳細全面,涵蓋了MySQL資料庫操作的方方面面,示例豐富實用,新手也能快速上手使用。優點是場景覆蓋廣、安全提示到位、JSON輸出處理完善。不足是缺少一些高階功能和完整的測試驗證示例,部分場景的邊界條件處理可以更完善。總體來說,這是一個值得推薦使用的資料庫操作技能。

📊 多維度評分

適應性4.4
規範性4.4
有效性4.7
可靠性4.2
可信度5

📁 包含檔案 (2 個)

📄 SKILL.md 13.2 KB
📄 _meta.json 139 B