菜鸟科技网

MySQL命令行如何执行SQL语句?

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

MySQL命令行如何执行SQL语句?-图1
(图片来源网络,侵删)

连接 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>

MySQL命令行如何执行SQL语句?-图2
(图片来源网络,侵删)

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 语句,例如删除 usernamealice 的记录:
    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)。

常见问题与注意事项

  1. 编码问题:若出现中文乱码,需确保 MySQL 服务器、数据库、表及连接客户端均使用 utf8mb4 编码,可通过 SHOW VARIABLES LIKE 'character_set%'; 检查编码设置。
  2. 权限不足:执行某些操作(如创建用户、修改全局配置)需 SUPERGRANT OPTION 权限,可通过 GRANT 语句分配权限。
  3. 长事务阻塞:未提交的长事务可能导致锁等待,可通过 SHOW PROCESSLIST; 查看并终止进程(KILL [进程ID])。
  4. 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: 通常从以下步骤排查:

  1. 确认用户名和密码:检查 -u-p 参数是否正确,密码是否包含特殊字符需注意转义。
  2. 检查用户权限:登录后执行 SELECT * FROM mysql.user WHERE User = 'your_user'; 确认主机权限(如 或 localhost)。
  3. 验证连接方式:若远程连接,检查服务器防火墙是否开放 3306 端口,且 MySQL 配置文件(my.cnf)中的 bind-address 是否限制访问。
  4. 重置密码:若密码遗忘,可通过 mysqld_safe --skip-grant-tables 跳过权限重置(需重启服务)。
分享:
扫描分享到社交APP
上一篇
下一篇