Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL常用命令速查高频操作

MySQL常用命令速查之新手必备的20个高频操作

作者:Jinkxs

MySQL命令是用于与MySQL数据库进行交互和操作的命令,这篇文章主要介绍了MySQL常用命令速查之新手必备的20个高频操作,文中通过代码就介绍的非常详细,需要的朋友可以参考下

引言:踏上数据库之旅

大家好!👋 欢迎来到这篇关于 MySQL 数据库常用命令的速查指南!无论你是刚接触数据库的新手,还是希望巩固基础的老手,这篇博客都将为你提供一份清晰、实用且易于上手的参考。我们将从最基础的连接和数据库操作开始,逐步深入到数据的增删改查(CRUD),并涵盖一些提升效率和安全性的关键命令。

MySQL,作为世界上最受欢迎的开源关系型数据库之一 🐘,以其易用性、稳定性和高性能而闻名。掌握其核心命令,是每一位开发者、数据库管理员乃至数据分析师的必修课。本文将为你梳理出 20 个在日常工作中高频出现的 MySQL 命令,并结合 Java 代码示例,让你不仅知道“怎么做”,更明白“为什么要这么做”。

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

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

1. 登录 MySQL 服务器

这是你与 MySQL 数据库建立联系的第一步。想象一下,你就像一位探险家,需要先找到通往宝藏(数据库)的大门钥匙 🔑。

命令格式:

mysql -u [用户名] -p [数据库名]

示例:

mysql -u root -p

输入上述命令后,系统会提示你输入密码。如果你的 MySQL 服务运行在本地且用户 root 没有密码,可以直接回车。

带数据库名登录:

mysql -u root -p my_database

这会直接连接到名为 my_database 的数据库。

注意: -h 参数用于指定主机名(默认是 localhost),如果需要连接远程数据库,则需指定 IP 地址或主机名。

Java 代码示例: 使用 JDBC 连接到 MySQL 数据库

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

public class MySQLConnectionExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/my_database"; // URL 包含主机、端口和数据库名
        String user = "root"; // 用户名
        String password = "your_password"; // 密码

        try {
            // 加载 MySQL JDBC 驱动程序
            Class.forName("com.mysql.cj.jdbc.Driver");
            // 建立连接
            Connection connection = DriverManager.getConnection(url, user, 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 添加依赖。

2. 退出 MySQL 客户端

当你完成操作后,需要优雅地离开 MySQL 的命令行环境。

命令:

exit;
-- 或者
quit;

第二部分:数据库操作

3. 查看所有数据库

在 MySQL 中,数据库就像是一个容器,用来存放相关的数据表。

命令:

SHOW DATABASES;

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

import java.sql.*;

public class ListDatabasesExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/";
        String user = "root";
        String password = "your_password";

        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection connection = DriverManager.getConnection(url, user, password);

            DatabaseMetaData metaData = connection.getMetaData();
            ResultSet databases = metaData.getCatalogs();

            System.out.println("📋 所有数据库:");
            while (databases.next()) {
                String dbName = databases.getString("TABLE_CAT"); // MySQL 中使用 TABLE_CAT 获取数据库名
                System.out.println("- " + dbName);
            }

            databases.close();
            connection.close();
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
    }
}

4. 创建数据库

创建一个新的数据库,就像为你的项目开辟一片新的土地。

命令:

CREATE DATABASE [IF NOT EXISTS] database_name;

示例:

CREATE DATABASE IF NOT EXISTS company_db;

IF NOT EXISTS 是一个安全选项,防止因数据库已存在而报错。

5. 使用数据库

选择一个数据库作为当前操作的目标。就像切换到某个特定的房间进行工作一样。

命令:

USE database_name;

示例:

USE company_db;

6. 删除数据库

当你不再需要某个数据库时,可以将其删除(注意:此操作不可逆!)。

命令:

DROP DATABASE [IF EXISTS] database_name;

示例:

DROP DATABASE IF EXISTS company_db;

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

第三部分:数据表操作

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

了解当前数据库内有哪些“房间”(表)是很有必要的。

命令:

SHOW TABLES;

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

import java.sql.*;

public class ListTablesExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/company_db";
        String user = "root";
        String password = "your_password";

        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection connection = DriverManager.getConnection(url, user, password);

            DatabaseMetaData metaData = connection.getMetaData();
            String[] types = {"TABLE"}; // 指定获取表类型
            ResultSet tables = metaData.getTables(null, null, "%", types);

            System.out.println("📄 当前数据库中的所有表:");
            while (tables.next()) {
                String tableName = tables.getString("TABLE_NAME");
                System.out.println("- " + tableName);
            }

            tables.close();
            connection.close();
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
    }
}

8. 创建数据表

表是存储数据的结构化容器。定义表结构是数据管理的核心。

命令:

CREATE TABLE [IF NOT EXISTS] table_name (
    column1 datatype constraints,
    column2 datatype constraints,
    ...
    [table_constraints]
);

示例:

CREATE TABLE IF NOT EXISTS employees (
    id INT AUTO_INCREMENT PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    hire_date DATE NOT NULL,
    salary DECIMAL(10, 2)
);

这个例子创建了一个名为 employees 的表,包含了员工的基本信息。AUTO_INCREMENT 使得 id 字段自动递增,PRIMARY KEY 设置为主键,UNIQUE 确保邮箱唯一,NOT NULL 约束不允许为空。

9. 查看表结构

了解表的字段(列)信息、数据类型和约束是进行后续操作的基础。

命令:

DESCRIBE table_name;
-- 或者
DESC table_name;

示例:

DESCRIBE employees;

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

import java.sql.*;

public class GetTableStructureExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/company_db";
        String user = "root";
        String password = "your_password";

        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection connection = DriverManager.getConnection(url, user, password);

            DatabaseMetaData metaData = connection.getMetaData();
            String tableName = "employees";
            ResultSet columns = metaData.getColumns(null, null, tableName, "%");

            System.out.println(`📊 表 "${tableName}" 的结构:`);
            System.out.printf("%-20s %-15s %-10s %-10s%n", "列名", "类型", "允许空", "默认值");
            System.out.println("--------------------------------------------------------");
            while (columns.next()) {
                String columnName = columns.getString("COLUMN_NAME");
                String typeName = columns.getString("TYPE_NAME");
                int isNullable = columns.getInt("NULLABLE");
                String defaultValue = columns.getString("COLUMN_DEF");

                String nullableStr = (isNullable == DatabaseMetaData.columnNoNulls) ? "NO" : "YES";
                System.out.printf("%-20s %-15s %-10s %-10s%n", columnName, typeName, nullableStr, defaultValue);
            }

            columns.close();
            connection.close();
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
    }
}

10. 删除数据表

当表不再需要时,可以将其删除。

命令:

DROP TABLE [IF EXISTS] table_name;

示例:

DROP TABLE IF EXISTS employees;

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

11. 插入数据

向表中添加新的记录。

命令:

INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);

示例:

INSERT INTO employees (first_name, last_name, email, hire_date, salary)
VALUES ('John', 'Doe', 'john.doe@example.com', '2024-01-15', 75000.00);

Java 代码示例: 使用 PreparedStatement 插入数据

import java.sql.*;

public class InsertDataExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/company_db";
        String user = "root";
        String password = "your_password";

        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection connection = DriverManager.getConnection(url, user, password);

            String sql = "INSERT INTO employees (first_name, last_name, email, hire_date, salary) VALUES (?, ?, ?, ?, ?)";
            PreparedStatement pstmt = connection.prepareStatement(sql);

            // 设置参数
            pstmt.setString(1, "Jane");
            pstmt.setString(2, "Smith");
            pstmt.setString(3, "jane.smith@example.com");
            pstmt.setDate(4, Date.valueOf("2024-02-01"));
            pstmt.setBigDecimal(5, new java.math.BigDecimal("80000.00"));

            // 执行插入
            int rowsAffected = pstmt.executeUpdate();
            System.out.println("✅ 成功插入 " + rowsAffected + " 行数据。");

            pstmt.close();
            connection.close();
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
    }
}

12. 查询所有数据

最基本的操作,查看表中所有的记录。

命令:

SELECT * FROM table_name;

示例:

SELECT * FROM employees;

13. 条件查询

根据特定条件筛选数据,这是数据库查询的核心。

命令:

SELECT column1, column2, ... FROM table_name WHERE condition;

示例:

SELECT first_name, last_name, salary FROM employees WHERE salary > 70000;

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

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

class Employee {
    private int id;
    private String firstName;
    private String lastName;
    private String email;
    private java.sql.Date hireDate;
    private java.math.BigDecimal salary;

    // 构造函数、getter 和 setter 方法...
    public Employee(int id, String firstName, String lastName, String email, Date hireDate, BigDecimal salary) {
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.hireDate = hireDate;
        this.salary = salary;
    }

    // Getter 和 Setter 方法...
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    public String getFirstName() { return firstName; }
    public void setFirstName(String firstName) { this.firstName = firstName; }
    public String getLastName() { return lastName; }
    public void setLastName(String lastName) { this.lastName = lastName; }
    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }
    public Date getHireDate() { return hireDate; }
    public void setHireDate(Date hireDate) { this.hireDate = hireDate; }
    public BigDecimal getSalary() { return salary; }
    public void setSalary(BigDecimal salary) { this.salary = salary; }

    @Override
    public String toString() {
        return "Employee{" +
                "id=" + id +
                ", firstName='" + firstName + '\'' +
                ", lastName='" + lastName + '\'' +
                ", email='" + email + '\'' +
                ", hireDate=" + hireDate +
                ", salary=" + salary +
                '}';
    }
}

public class SelectWithConditionExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/company_db";
        String user = "root";
        String password = "your_password";

        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection connection = DriverManager.getConnection(url, user, password);

            String sql = "SELECT id, first_name, last_name, email, hire_date, salary FROM employees WHERE salary > ?";
            PreparedStatement pstmt = connection.prepareStatement(sql);
            pstmt.setBigDecimal(1, new java.math.BigDecimal("70000.00"));

            ResultSet rs = pstmt.executeQuery();

            List<Employee> employees = new ArrayList<>();
            while (rs.next()) {
                int id = rs.getInt("id");
                String firstName = rs.getString("first_name");
                String lastName = rs.getString("last_name");
                String email = rs.getString("email");
                Date hireDate = rs.getDate("hire_date");
                BigDecimal salary = rs.getBigDecimal("salary");

                employees.add(new Employee(id, firstName, lastName, email, hireDate, salary));
            }

            System.out.println("💰 薪资高于 70000 的员工:");
            for (Employee emp : employees) {
                System.out.println(emp);
            }

            rs.close();
            pstmt.close();
            connection.close();
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
    }
}

14. 更新数据

修改现有记录中的数据。

命令:

UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;

示例:

UPDATE employees SET salary = 85000.00 WHERE first_name = 'John' AND last_name = 'Doe';

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

import java.sql.*;

public class UpdateDataExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/company_db";
        String user = "root";
        String password = "your_password";

        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection connection = DriverManager.getConnection(url, user, password);

            String sql = "UPDATE employees SET salary = ? WHERE first_name = ? AND last_name = ?";
            PreparedStatement pstmt = connection.prepareStatement(sql);

            pstmt.setBigDecimal(1, new java.math.BigDecimal("90000.00"));
            pstmt.setString(2, "Jane");
            pstmt.setString(3, "Smith");

            int rowsAffected = pstmt.executeUpdate();
            System.out.println("✅ 成功更新 " + rowsAffected + " 行数据。");

            pstmt.close();
            connection.close();
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
    }
}

15. 删除数据

移除不需要的记录。

命令:

DELETE FROM table_name WHERE condition;

示例:

DELETE FROM employees WHERE first_name = 'John' AND last_name = 'Doe';

⚠️ 警告: 不要忘记 WHERE 子句!否则会删除表中的所有数据!

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

import java.sql.*;

public class DeleteDataExample {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/company_db";
        String user = "root";
        String password = "your_password";

        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            Connection connection = DriverManager.getConnection(url, user, password);

            String sql = "DELETE FROM employees WHERE first_name = ? AND last_name = ?";
            PreparedStatement pstmt = connection.prepareStatement(sql);

            pstmt.setString(1, "Jane");
            pstmt.setString(2, "Smith");

            int rowsAffected = pstmt.executeUpdate();
            System.out.println("✅ 成功删除 " + rowsAffected + " 行数据。");

            pstmt.close();
            connection.close();
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }
    }
}

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

16. 创建用户

为不同的应用或人员分配访问数据库的账户。

命令:

CREATE USER 'username'@'host' IDENTIFIED BY 'password';

示例:

CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'secure_password_123';

'app_user'@'localhost' 表示用户名为 app_user,只能从本机(localhost)连接。

17. 授权用户

赋予用户特定的权限,遵循最小权限原则。

命令:

GRANT privileges ON database.table TO 'username'@'host';

示例:

GRANT SELECT, INSERT, UPDATE ON company_db.employees TO 'app_user'@'localhost';

这授予了 app_usercompany_db 数据库中 employees 表的查询、插入和更新权限。

18. 撤销权限

收回已授予的权限。

命令:

REVOKE privileges ON database.table FROM 'username'@'host';

示例:

REVOKE UPDATE ON company_db.employees FROM 'app_user'@'localhost';

19. 删除用户

当不再需要某个用户时,将其从系统中移除。

命令:

DROP USER 'username'@'host';

示例:

DROP USER 'app_user'@'localhost';

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

20. 备份与恢复数据库

数据安全至关重要!定期备份是保护数据免受意外损失的关键措施。

备份数据库:

使用 mysqldump 工具导出数据库结构和数据。

命令:

mysqldump -u [用户名] -p [数据库名] > backup_file.sql

示例:

mysqldump -u root -p company_db > company_backup.sql

恢复数据库:

将备份文件导入到 MySQL 中。

命令:

mysql -u [用户名] -p [数据库名] < backup_file.sql

示例:

mysql -u root -p company_db < company_backup.sql

💡 提示: mysqldump 生成的是纯文本 SQL 文件,可以方便地进行版本控制和传输。

总结与最佳实践

掌握这些 MySQL 命令是走向数据库精通的第一步。它们构成了日常数据库工作的基石。记住以下几点,会让你事半功倍:

  1. 安全第一: 使用强密码,遵循最小权限原则,定期审查用户权限。
  2. 备份策略: 定期进行数据库备份,测试恢复流程。
  3. 性能优化: 合理使用索引,避免 SELECT *,编写高效的 SQL 查询。
  4. 命名规范: 使用清晰、一致的表名和字段名。
  5. 事务处理: 在需要保证数据一致性的场景下,使用事务(BEGIN, COMMIT, ROLLBACK)。
  6. 学习资源: 不断学习官方文档和其他优质教程。例如,MySQL 官方文档 是最权威的参考资料。

希望这篇博客能帮助你快速上手 MySQL!如果你有任何疑问或想了解更高级的话题,请随时留言讨论。祝你数据库之旅愉快!🌟

参考链接

到此这篇关于MySQL常用命令速查之新手必备的20个高频操作的文章就介绍到这了,更多相关MySQL常用命令速查高频操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文