MySQL,作为全球最受欢迎的开源关系型数据库之一 🐘,以其卓越的性能、可靠的稳定性和友好的易用性而广受赞誉。熟练掌握其核心命令,是每一位开发者、数据库管理员(DBA)乃至数据分析师的必备技能。本文将梳理出 20 个 在日常工作中高频使用的 MySQL 命令,并结合 Java 代码示例,让你不仅知其然,更知其所以然。
![图片[1]_MySQL 数据库常用命令速查指南(附 Java 示例)_知途无界](https://zhituwujie.com/wp-content/uploads/2025/12/d2b5ca33bd20251223095229.png)
准备好了吗?让我们一起开启这段探索 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:指定主机名(默认为localhost或127.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,并在实践中不断深化理解!如有任何疑问或希望探讨更高级的主题(如索引优化、主从复制、分库分表等),欢迎随时留言交流。祝你在数据库的海洋中探索愉快!🌟

























暂无评论内容