MySQL 操作与命令
连接数据库与检查结构
mysql · 连接数据库并从终端执行 SQL;密码通过交互提示输入
- 连接指定主机和数据库:
bash
mysql --host={{localhost}} --port={{3306}} --user={{app_user}} --password {{app_db}}- 执行只读查询后退出:
bash
mysql --user={{app_user}} --password {{app_db}} --execute="SELECT CURRENT_USER(), DATABASE();"- 以适合脚本的格式输出,不显示列名:
bash
mysql --user={{app_user}} --password --batch --skip-column-names {{app_db}} --execute="SELECT id FROM users ORDER BY id LIMIT 10;"- 查看客户端版本;这不是服务器版本:
bash
mysql --versionMySQL SHOW · 查看数据库结构及会话信息;权限会影响可见范围
- 列出可见数据库:
bash
SHOW DATABASES;- 查看指定库中的表:
bash
SHOW TABLES FROM {{app_db}};- 查看建表语句:
bash
SHOW CREATE TABLE {{app_db.users}};- 查看索引:
bash
SHOW INDEX FROM {{app_db.users}};- 查看当前可见连接与完整 SQL:
bash
SHOW FULL PROCESSLIST;查询与读取数据
MySQL JOIN · 在 MySQL 会话中组合表数据,注意连接键不唯一可能增加结果行数
在 MySQL 会话中组合表数据,注意连接键不唯一可能增加结果行数。
- 关联订单与用户:
bash
SELECT o.id, u.name, o.total FROM orders AS o INNER JOIN users AS u ON u.id = o.user_id LIMIT 20;- 保留没有订单的用户:
bash
SELECT u.id, o.id AS order_id FROM users AS u LEFT JOIN orders AS o ON o.user_id = u.id LIMIT 20;- 查找没有订单的用户:
bash
SELECT u.id, u.name FROM users AS u LEFT JOIN orders AS o ON o.user_id = u.id WHERE o.id IS NULL;MySQL SELECT · 在 MySQL 会话中筛选、排序和聚合数据;表名和字段需按实际结构调整
- 按条件查询,限制返回行数:
bash
SELECT id, name FROM users WHERE active = 1 ORDER BY id LIMIT 20;- 按时间区间查询,使用左闭右开边界:
bash
SELECT id, total FROM orders WHERE created_at >= '2026-01-01' AND created_at < '2026-02-01';- 按用户统计订单数量,过滤聚合结果:
bash
SELECT user_id, COUNT(*) AS order_count FROM orders GROUP BY user_id HAVING COUNT(*) >= 3;- 使用上一页末尾 ID 查询下一页:
bash
SELECT id, name FROM users WHERE id > {{last_id}} ORDER BY id LIMIT 20;写入数据与管理事务
MySQL INSERT · 在 MySQL 会话中新增数据;示例会写入表,先确认唯一键和目标环境
在 MySQL 会话中新增数据;示例会写入表,先确认唯一键和目标环境。
- 明确列名插入一行:
bash
INSERT INTO users (name, active) VALUES ('demo-user', 1);- 一次插入多行:
bash
INSERT INTO users (name, active) VALUES ('demo-one', 1), ('demo-two', 0);- 复制筛选后的数据到已有归档表,避免重复执行:
bash
INSERT INTO archived_users (id, name) SELECT id, name FROM users WHERE active = 0;MySQL transaction · 在同一个会话管理事务;回滚适用于事务表,部分 DDL 会隐式提交
- 开始事务;后续语句需在同一连接执行:
bash
START TRANSACTION;- 在事务中修改已确认的行;执行前检查 WHERE 条件:
bash
UPDATE users SET active = 0 WHERE id = 42;- 确认无误后提交;提交后的更改不能用 ROLLBACK 撤销:
bash
COMMIT;- 放弃尚未提交的事务修改:
bash
ROLLBACK;分析计划、过期时间与运行状态
MySQL EXPLAIN · 分析查询计划;ANALYZE 会实际运行查询,应先评估成本
- 查看估算执行计划:
bash
EXPLAIN SELECT id, name FROM users WHERE id = 42;- 以 JSON 输出计划:
bash
EXPLAIN FORMAT=JSON SELECT id FROM orders WHERE user_id = 42;- 实际执行只读查询并测量计划,可能消耗较多资源:
bash
EXPLAIN ANALYZE SELECT id FROM orders WHERE user_id = 42 LIMIT 20;导入、导出与备份恢复
MySQL import · 将 SQL 文件导入数据库;脚本可能覆盖或删除数据,先审阅并备份
将 SQL 文件导入数据库;脚本可能覆盖或删除数据,先审阅并备份。
- 在已连接的 mysql 会话中执行经过审阅的 SQL 文件:
bash
source {{path/to/backup.sql}}- 从终端导入 SQL;路径不要含空格,文件内 USE 可切换数据库:
bash
mysql --user={{app_user}} --password {{app_db}} --execute="source {{path/to/backup.sql}}"- 导入后检查目标表行数;不等同于完整校验:
bash
mysql --user={{app_user}} --password {{app_db}} --execute="SELECT COUNT(*) FROM users;"示例整理自 tldr-pages,作者为 tldr-pages team and contributors,遵循 CC BY 4.0。
继续阅读
- 知识专题
- 知识专题
- 知识专题