429668385/mysql-database-skill/SKILL.md
MySQL 数据库操作技能。通过 mysql CLI 连接数据库,执行 SELECT 查询、INSERT/UPDATE/DELETE 增删改、批量 SQL 执行、事务控制、数据库/表管理、JSON 格式输出。适用场景:查用户数据、统计报表、数据导入导出、数据库巡检、表结构查看、远程连接、生产环境调试。触发关键词:MySQL、数据库查询、SQL 语句执行、连接数据库、查表、数据增删改、jdbc 连接字符串、navicat、数据库迁移、DESCRIBE TABLE、查看表结构、表字段分析、查看索引、EXPLAIN 查询分析。
npx skillsauth add openclaw/skills mysql-databaseInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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.
mysql -h <host> -u <user> --database <db> -s -r -e "SELECT * FROM users LIMIT 10;" 2>$null
mysql -h <host> -u <user> --database <db> -s -r -e "DESCRIBE users;" 2>$null
# 插入
mysql -h <host> -u <user> --database <db> -s -r -e "INSERT INTO users (name, email) VALUES ('Test', '[email protected]');" 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
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 '.'
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
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: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;"
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"}
]
mysql -h <host> -u <user> --database <db> -s -r -e "INSERT INTO users (name, email) VALUES ('New User', '[email protected]'); SELECT JSON_OBJECT('last_insert_id', LAST_INSERT_ID());" | jq .
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 .
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 .
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 .
单行结果:
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 .
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 '.'
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 等) |
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 '.'
分析 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 是全表扫描,需要优化(加索引)。
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 .
MYSQL_PWD 环境变量或配置文件--ssl-mode=REQUIRED)chmod 600 ~/.my.cnf重要提示: 使用 -s -r (--silent --raw) 组合确保 mysql 客户端输出纯净数据,是生成有效 JSON 的前提。
tools
Use when the user wants to connect to, test, or use the McDonalds service at mcp.mcd.cn, including checking authentication, probing MCP endpoints, listing tools, or calling McDonalds MCP tools through a reusable local CLI.
development
Web scraping platform — Twitter/X data, Vinted marketplace, and general web scraping API
development
SlowMist AI Agent Security Review — comprehensive security framework for skills, repositories, URLs, on-chain addresses, and products (Claude Code version)
data-ai
去除中文文本中的 AI 写作痕迹,使其读起来自然。基于维基百科 AI 写作特征指南,检测 24 种 AI 模式。触发词:humanizer-cn、去除 AI 痕迹、去除 AI 写作痕迹、中文文本人性化。