MySQL 数据库常用命令速查指南(附 Java 示例)

MySQL,作为全球最受欢迎的开源关系型数据库之一 🐘,以其卓越的性能、可靠的稳定性和友好的易用性而广受赞誉。熟练掌握其核心命令,是每一位开发者、数据库管理员(DBA)乃至数据分析师的必备技能。本文将梳理出 ​20 个​ 在日常工作中高频使用的 MySQL 命令,并结合 Java 代码示例,让你不仅知其然,更知其所以然。

图片[1]_MySQL 数据库常用命令速查指南(附 Java 示例)_知途无界

准备好了吗?让我们一起开启这段探索 MySQL 的奇妙旅程吧!🚀


第一部分:连接与环境设置

1. 登录 MySQL 服务器

这是与 MySQL 数据库建立交互的第一步。如同探险家寻找宝藏的大门,你需要一把正确的“钥匙” 🔑。

命令格式:​

mysql -u [用户名] -p [-h <主机名>] [-P <端口>] [数据库名]

示例:​

# 连接本地 MySQL 服务器,使用 root 用户
mysql -u root -p

# 连接远程 MySQL 服务器 (例如 IP 为 192.168.1.100)
mysql -u admin -p -h 192.168.1.100 -P 3306

输入命令后,系统会提示你输入密码。若本地 root 用户无密码,可直接回车(生产环境中极度不推荐!​)。

直接连接指定数据库:​

mysql -u root -p my_database

此命令会登录后直接进入 my_database 数据库。

注意:​

  • -h:指定主机名(默认为 localhost127.0.0.1)。
  • -P:指定端口(默认为 3306)。
  • -p不建议直接跟密码​(如 -p123456),因为这样会在 shell 历史中明文记录,存在安全风险。

Java 代码示例:使用 JDBC 连接 MySQL

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class MySQLJDBC {
    public static void main(String[] args) {
        // 数据库连接信息
        String url = "jdbc:mysql://localhost:3306/my_database?useSSL=false&serverTimezone=UTC";
        String username = "root";
        String password = "your_password";

        try {
            // 加载 JDBC 驱动 (MySQL 8.0+ 可省略,DriverManager 会自动加载)
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 建立连接
            Connection connection = DriverManager.getConnection(url, username, password);
            System.out.println("成功连接到 MySQL 数据库!");

            // ... 执行数据库操作 ...

            // 关闭连接
            connection.close();
        } catch (ClassNotFoundException e) {
            System.err.println("找不到 MySQL JDBC 驱动!");
            e.printStackTrace();
        } catch (SQLException e) {
            System.err.println("数据库连接失败!");
            e.printStackTrace();
        }
    }
}

⚠️ ​重要提示:​​ 请确保项目中包含了 MySQL 的 JDBC 驱动(如 mysql-connector-java)。推荐使用 Maven 或 Gradle 管理依赖。
Maven 依赖:​

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version> <!-- 请使用最新稳定版 -->
</dependency>

2. 退出 MySQL 客户端

完成操作后,优雅地退出 MySQL 命令行环境。

命令:​

EXIT;
-- 或
QUIT;
-- 或
\q

第二部分:数据库操作

3. 查看所有数据库

数据库是存储相关数据表的容器。

命令:​

SHOW DATABASES;

Java 代码示例:获取所有数据库列表

// ... (接上面的连接代码)
try (Statement stmt = connection.createStatement();
     ResultSet rs = stmt.executeQuery("SHOW DATABASES")) {
    System.out.println("可用的数据库:");
    while (rs.next()) {
        System.out.println(rs.getString(1));
    }
} catch (SQLException e) {
    e.printStackTrace();
}

4. 创建数据库

为新项目开辟一片数据存储的“土地”。

命令:​

CREATE DATABASE [IF NOT EXISTS] 数据库名 [CHARACTER SET 字符集] [COLLATE 排序规则];

示例:​

CREATE DATABASE IF NOT EXISTS my_project_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

IF NOT EXISTS 是安全措施,可防止因数据库已存在而报错。utf8mb4 是目前推荐的字符集,支持所有 Unicode 字符(包括表情符号)。

5. 使用数据库

选择当前操作的数据库上下文。

命令:​

USE 数据库名;

示例:​

USE my_project_db;

6. 删除数据库

危险操作!​​ 永久删除数据库及其所有数据,操作前务必确认!

命令:​

DROP DATABASE [IF EXISTS] 数据库名;

示例:​

DROP DATABASE IF EXISTS old_unused_db;

IF EXISTS 可避免因数据库不存在而报错。


第三部分:数据表操作

7. 查看当前数据库中的所有表

了解当前数据库中有哪些“数据表”。

命令:​

SHOW TABLES;

Java 代码示例:获取当前数据库中的所有表名

// ... (确保在连接后已 USE 某个数据库)
try (Statement stmt = connection.createStatement();
     ResultSet rs = stmt.executeQuery("SHOW TABLES")) {
    System.out.println("当前数据库的表:");
    while (rs.next()) {
        // 列名在第一个字段,具体名称取决于结果集元数据,通常为 "Tables_in_my_project_db"
        System.out.println(rs.getString(1));
    }
} catch (SQLException e) {
    e.printStackTrace();
}

8. 创建数据表

定义数据的结构化存储方式。

命令:​

CREATE TABLE [IF NOT EXISTS] 表名 (
    列名1 数据类型 [约束],
    列名2 数据类型 [约束],
    ...
    [表级约束]
);

示例:​

CREATE TABLE IF NOT EXISTS employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    department VARCHAR(50),
    salary DECIMAL(10, 2),
    hire_date DATE,
    INDEX idx_department (department) -- 创建索引以提高查询效率
);

此例创建了 employees 表,包含员工基本信息。AUTO_INCREMENT 实现 id 自增,PRIMARY KEY 设为主键,UNIQUE 确保邮箱唯一,NOT NULL 约束字段非空。

9. 查看表结构

了解表的字段、数据类型和约束,是进行有效操作的基础。

命令:​

DESCRIBE 表名;
-- 或
DESC 表名;
-- 或
SHOW COLUMNS FROM 表名;

示例:​

DESCRIBE employees;

Java 代码示例:获取表的列信息

// ... (接连接代码)
try (Statement stmt = connection.createStatement();
     ResultSet rs = stmt.executeQuery("DESCRIBE employees")) {
    System.out.println("employees 表结构:");
    while (rs.next()) {
        System.out.println("字段: " + rs.getString("Field") +
                           ", 类型: " + rs.getString("Type") +
                           ", 空值: " + rs.getString("Null") +
                           ", 键: " + rs.getString("Key") +
                           ", 默认值: " + rs.getString("Default"));
    }
} catch (SQLException e) {
    e.printStackTrace();
}

10. 删除数据表

危险操作!​​ 删除表及其所有数据。

命令:​

DROP TABLE [IF EXISTS] 表名;

示例:​

DROP TABLE IF EXISTS temp_employees;

第四部分:数据操作(增删改查 CRUD)

11. 插入数据

向表中添加新记录。

命令:​

INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...);

示例:​

INSERT INTO employees (name, email, department, salary, hire_date)
VALUES ('张三', 'zhangsan@example.com', '技术部', 15000.00, '2023-01-15');

Java 代码示例:使用 PreparedStatement 插入数据(防 SQL 注入)​

String sql = "INSERT INTO employees (name, email, department, salary, hire_date) VALUES (?, ?, ?, ?, ?)";
try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
    pstmt.setString(1, "李四");
    pstmt.setString(2, "lisi@example.com");
    pstmt.setString(3, "市场部");
    pstmt.setBigDecimal(4, new BigDecimal("12000.00"));
    pstmt.setDate(5, java.sql.Date.valueOf("2023-02-20"));

    int rowsAffected = pstmt.executeUpdate();
    if (rowsAffected > 0) {
        System.out.println("新员工插入成功!");
    }
} catch (SQLException e) {
    e.printStackTrace();
}

12. 查询所有数据

检索表中的所有记录。

命令:​

SELECT * FROM 表名;

示例:​

SELECT * FROM employees;

💡 ​提示:​​ 实际开发中应避免使用 SELECT *,应明确指定所需列名,以减少网络传输和提升性能。

13. 条件查询

根据特定条件筛选数据,是 SQL 的核心。

命令:​

SELECT 列1, 列2, ... FROM 表名 WHERE 条件;

示例:​

-- 查询技术部工资大于10000的员工姓名和工资
SELECT name, salary FROM employees WHERE department = '技术部' AND salary > 10000;

-- 查询2023年入职的员工
SELECT * FROM employees WHERE hire_date >= '2023-01-01' AND hire_date < '2024-01-01';

Java 代码示例:使用 PreparedStatement 执行条件查询

String sql = "SELECT id, name, salary FROM employees WHERE department = ? AND salary > ?";
try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
    pstmt.setString(1, "技术部");
    pstmt.setBigDecimal(2, new BigDecimal("10000.00"));

    try (ResultSet rs = pstmt.executeQuery()) {
        while (rs.next()) {
            System.out.println("ID: " + rs.getInt("id") +
                               ", 姓名: " + rs.getString("name") +
                               ", 工资: " + rs.getBigDecimal("salary"));
        }
    }
} catch (SQLException e) {
    e.printStackTrace();
}

14. 更新数据

修改现有记录的数据。

命令:​

UPDATE 表名 SET 列1=值1, 列2=值2, ... WHERE 条件;

示例:​

-- 将李四的工资调整为13000
UPDATE employees SET salary = 13000.00 WHERE name = '李四';

⚠️ ​警告:​​ 务必使用 WHERE 子句指定更新范围!若无 WHERE,将更新表中所有记录!

Java 代码示例:使用 PreparedStatement 更新数据

String sql = "UPDATE employees SET salary = ? WHERE name = ?";
try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
    pstmt.setBigDecimal(1, new BigDecimal("13500.00"));
    pstmt.setString(2, "李四");

    int rowsAffected = pstmt.executeUpdate();
    if (rowsAffected > 0) {
        System.out.println("员工工资更新成功!");
    } else {
        System.out.println("未找到指定员工或未做更改。");
    }
} catch (SQLException e) {
    e.printStackTrace();
}

15. 删除数据

移除表中的记录。

命令:​

DELETE FROM 表名 WHERE 条件;

示例:​

-- 删除姓名为“临时工”的员工记录
DELETE FROM employees WHERE name = '临时工';

⚠️ ​严重警告:​​ ​必须使用 WHERE 子句!若无 WHERE,将删除表中所有记录,且无法轻易恢复(即使有备份,也需谨慎)!

Java 代码示例:使用 PreparedStatement 删除数据

String sql = "DELETE FROM employees WHERE name = ?";
try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
    pstmt.setString(1, "临时工");

    int rowsAffected = pstmt.executeUpdate();
    if (rowsAffected > 0) {
        System.out.println("员工记录删除成功!");
    } else {
        System.out.println("未找到指定员工。");
    }
} catch (SQLException e) {
    e.printStackTrace();
}

第五部分:用户权限与管理

16. 创建用户

为不同应用或人员创建专属数据库账户。

命令:​

CREATE USER '用户名'@'主机' IDENTIFIED BY '密码';

示例:​

CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
-- 'app_user'@'localhost' 表示该用户只能从数据库服务器本机连接
-- 若要允许任意主机连接,可使用 '%' (不推荐用于生产环境)
-- CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPassword123!';

17. 授权用户

遵循最小权限原则,仅授予用户完成任务所必需的权限。

命令:​

GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机';

示例:​

-- 授予 app_user 对 company_db 数据库中 employees 表的查询、插入、更新权限
GRANT SELECT, INSERT, UPDATE ON company_db.employees TO 'app_user'@'localhost';

-- 授予对所有数据库所有表的全部权限 (极度谨慎!)
-- GRANT ALL PRIVILEGES ON *.* TO 'admin_user'@'%';

刷新权限(使授权立即生效):​

FLUSH PRIVILEGES;

18. 撤销权限

收回已授予用户的特定权限。

命令:​

REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机';

示例:​

REVOKE INSERT, UPDATE ON company_db.employees FROM 'app_user'@'localhost';
FLUSH PRIVILEGES;

19. 删除用户

移除不再需要的数据库用户。

命令:​

DROP USER '用户名'@'主机';

示例:​

DROP USER 'old_app_user'@'localhost';
FLUSH PRIVILEGES;

第六部分:数据库备份与恢复

20. 备份与恢复数据库

数据安全是重中之重!定期备份是防范意外(硬件故障、误操作、攻击)的最后一道防线。

备份数据库:​
使用 mysqldump 工具(MySQL 自带)导出数据库结构和数据为 SQL 文件。

命令:​

mysqldump -u [用户名] -p [数据库名] > [备份文件路径].sql

示例:​

# 备份 my_project_db 数据库到当前目录的 backup_20231027.sql 文件
mysqldump -u root -p my_project_db > backup_20231027.sql

输入密码后,命令会将数据库结构和所有数据导出到指定文件。

恢复数据库:​
将备份的 SQL 文件导入到 MySQL 中,重建数据库和数据。

命令:​

# 方法一:登录 MySQL 后 source 文件
mysql -u root -p
USE target_database; -- 选择或创建一个目标数据库
SOURCE /path/to/backup_file.sql;

# 方法二:直接在 shell 中执行
mysql -u root -p target_database < /path/to/backup_file.sql

示例:​

# 先将备份恢复到名为 restored_db 的新数据库
mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS restored_db;"
mysql -u root -p restored_db < backup_20231027.sql

💡 ​提示:​mysqldump 生成的是纯文本 SQL 文件,便于版本控制、审查和跨平台传输。对于大型数据库,可考虑使用 --single-transaction(InnoDB)或 mydumper 等工具提升效率。


总结与最佳实践

掌握这些 MySQL 命令是迈向数据库精通的坚实第一步,它们构成了日常工作的基石。牢记以下最佳实践,能让你的数据库之旅更加顺畅和安全:

  • 安全第一​:使用强密码,遵循最小权限原则,定期审查用户权限,生产环境禁用远程 root 登录。
  • 备份为本​:制定并严格执行定期备份策略,定期测试备份文件的完整性和可恢复性。
  • 性能优化​:为常用查询条件创建合适的索引,避免在 WHERE、JOIN、ORDER BY 子句中滥用函数,编写高效的 SQL,避免使用 SELECT *
  • 命名规范​:采用清晰、一致且有意义的表名和字段名(如使用 snake_case)。
  • 事务处理​:在执行多步写操作时(如转账),使用事务(BEGIN; / COMMIT; / ROLLBACK;)确保数据一致性。
  • 持续学习​:官方文档永远是最权威的资料来源。MySQL 官方文档 是你的最佳伙伴。

希望这篇指南能助你快速上手 MySQL,并在实践中不断深化理解!如有任何疑问或希望探讨更高级的主题(如索引优化、主从复制、分库分表等),欢迎随时留言交流。祝你在数据库的海洋中探索愉快!🌟

© 版权声明
THE END
喜欢就点个赞,支持一下吧!
点赞5 分享
评论 抢沙发
头像
欢迎您留下评论!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容