MySQL 命令行执行 SQL 是数据库管理中最基础也是最重要的操作之一,它允许用户通过终端直接与 MySQL 服务器交互,执行数据查询、表管理、用户权限配置等多种任务,本文将详细介绍 MySQL 命令行执行 SQL 的全流程,包括连接服务器、基本操作、高级技巧及注意事项,帮助用户熟练掌握这一核心技能。

连接 MySQL 服务器
在执行 SQL 之前,首先需要连接到 MySQL 服务器,打开终端(Windows 下为命令提示符或 PowerShell,Linux/macOS 下为终端),使用 mysql 命令并指定必要参数,基本语法为:
mysql [选项] [数据库名]
常用选项包括:
-u, --user:指定用户名,默认为root。-p, --password:提示输入密码,若直接跟password则不安全,建议仅使用-p。-h, --host:指定服务器主机名或 IP 地址,默认为localhost。-P, --port:指定端口号,默认为3306。-D, --database:连接后直接选择指定数据库。
以 root 用户连接到本地 MySQL 服务器的 test 数据库:
mysql -u root -p test
执行后会提示输入密码,验证通过后即可进入 MySQL 命令行界面,提示符变为 mysql>。

SQL 语句的执行与基本操作
连接成功后,即可输入 SQL 语句并执行,MySQL 命令行支持单行和多行 SQL 语句,每条语句以分号()
数据库操作
- 创建数据库:使用
CREATE DATABASE语句,例如创建名为mydb的数据库:CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 选择数据库:使用
USE语句切换当前数据库,USE mydb;
- 查看数据库列表:执行
SHOW DATABASES;可列出所有数据库。 - 删除数据库:使用
DROP DATABASE语句,DROP DATABASE mydb;
表操作
- 创建表:以创建用户表
users为例:CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); - 查看表结构:使用
DESCRIBE users;或SHOW COLUMNS FROM users;。 - 插入数据:通过
INSERT INTO语句添加记录:INSERT INTO users (username, email) VALUES ('alice', 'alice@example.com'); - 查询数据:使用
SELECT语句,例如查询所有用户:SELECT * FROM users;
- 更新数据:通过
UPDATE语句修改记录,UPDATE users SET email = 'alice_new@example.com' WHERE username = 'alice';
- 删除数据:使用
DELETE语句,例如删除username为alice的记录:DELETE FROM users WHERE username = 'alice';
- 删除表:使用
DROP TABLE users;删除整个表。
事务处理
MySQL 支持事务操作,确保数据一致性,转账场景下的事务处理:
START TRANSACTION; UPDATE accounts SET balance = balance - 100 WHERE user_id = 1; UPDATE accounts SET balance = balance + 100 WHERE user_id = 2; COMMIT; -- 提交事务,或使用 ROLLBACK; 回滚
高级操作与技巧
执行外部 SQL 文件
若 SQL 语句保存在文件中(如 backup.sql),可通过以下方式执行:
mysql -u root -p mydb < backup.sql
或进入 MySQL 命令行后使用 source 命令:
mysql> source /path/to/backup.sql;
导出数据
使用 mysqldump 工具可导出数据库或表结构及数据:
# 导出整个数据库 mysqldump -u root -p mydb > mydb_backup.sql # 仅导出表结构 mysqldump -u root -p mydb --no-data > mydb_structure.sql # 导出特定表 mysqldump -u root -p mydb users > users_backup.sql
格式化输出
查询结果可通过 \G 格式化显示,使列值垂直排列,便于阅读:
SELECT * FROM users\G
变量与脚本
MySQL 命令行支持变量定义和使用,
SET @user_count = (SELECT COUNT(*) FROM users); SELECT @user_count;
退出命令行
使用 EXIT; 或 QUIT; 退出 MySQL 命令行,或通过快捷键 Ctrl + D(Linux/macOS)或 Ctrl + Z(Windows)。
常见问题与注意事项
- 编码问题:若出现中文乱码,需确保 MySQL 服务器、数据库、表及连接客户端均使用
utf8mb4编码,可通过SHOW VARIABLES LIKE 'character_set%';检查编码设置。 - 权限不足:执行某些操作(如创建用户、修改全局配置)需
SUPER或GRANT OPTION权限,可通过GRANT语句分配权限。 - 长事务阻塞:未提交的长事务可能导致锁等待,可通过
SHOW PROCESSLIST;查看并终止进程(KILL [进程ID])。 - SQL 注入风险:执行动态 SQL 时需对输入参数进行转义或使用预处理语句,避免安全漏洞。
相关操作效率对比
| 操作类型 | 命令行方式 | 图形化工具(如 MySQL Workbench) |
|---|---|---|
| 批量导入数据 | 使用 mysql -u user -p db < file.sql |
通过“数据导入”向导选择文件 |
| 复杂查询调试 | 结合 \G 格式化输出和 EXPLAIN 分析 |
可视化执行计划展示与高亮 |
| 权限管理 | 执行 GRANT/REVOKE 语句 |
通过“用户管理”界面勾选权限选项 |
| 事务管理 | 手动输入 START TRANSACTION 等 |
提供事务提交、回滚的按钮操作 |
相关问答 FAQs
Q1: 如何在 MySQL 命令行中执行包含特殊字符(如单引号)的 SQL 语句?
A1: 可通过以下方式处理:
- 使用反斜杠转义:
INSERT INTO table VALUES ('O\'Reilly'); - 使用双引号包裹字符串(若 SQL_MODE 包含
ANSI_QUOTES):INSERT INTO table VALUES ("O'Reilly"); - 使用
QUOTE()函数:INSERT INTO table VALUES (QUOTE('O'Reilly'));(结果为'O\'Reilly')。
Q2: MySQL 命令行执行 SQL 时提示“Access denied for user”,如何排查?
A2: 通常从以下步骤排查:
- 确认用户名和密码:检查
-u和-p参数是否正确,密码是否包含特殊字符需注意转义。 - 检查用户权限:登录后执行
SELECT * FROM mysql.user WHERE User = 'your_user';确认主机权限(如 或localhost)。 - 验证连接方式:若远程连接,检查服务器防火墙是否开放
3306端口,且 MySQL 配置文件(my.cnf)中的bind-address是否限制访问。 - 重置密码:若密码遗忘,可通过
mysqld_safe --skip-grant-tables跳过权限重置(需重启服务)。
