MySQL常用命令速查之新手必備的20個(gè)高頻操作

引言:踏上數(shù)據(jù)庫(kù)之旅
大家好!?? 歡迎來(lái)到這篇關(guān)于 MySQL 數(shù)據(jù)庫(kù)常用命令的速查指南!無(wú)論你是剛接觸數(shù)據(jù)庫(kù)的新手,還是希望鞏固基礎(chǔ)的老手,這篇博客都將為你提供一份清晰、實(shí)用且易于上手的參考。我們將從最基礎(chǔ)的連接和數(shù)據(jù)庫(kù)操作開(kāi)始,逐步深入到數(shù)據(jù)的增刪改查(CRUD),并涵蓋一些提升效率和安全性的關(guān)鍵命令。
MySQL,作為世界上最受歡迎的開(kāi)源關(guān)系型數(shù)據(jù)庫(kù)之一 ??,以其易用性、穩(wěn)定性和高性能而聞名。掌握其核心命令,是每一位開(kāi)發(fā)者、數(shù)據(jù)庫(kù)管理員乃至數(shù)據(jù)分析師的必修課。本文將為你梳理出 20 個(gè)在日常工作中高頻出現(xiàn)的 MySQL 命令,并結(jié)合 Java 代碼示例,讓你不僅知道“怎么做”,更明白“為什么要這么做”。
準(zhǔn)備好了嗎?讓我們一起開(kāi)啟這段探索 MySQL 的奇妙旅程吧!??
第一部分:連接與環(huán)境設(shè)置
1. 登錄 MySQL 服務(wù)器
這是你與 MySQL 數(shù)據(jù)庫(kù)建立聯(lián)系的第一步。想象一下,你就像一位探險(xiǎn)家,需要先找到通往寶藏(數(shù)據(jù)庫(kù))的大門(mén)鑰匙 ??。
命令格式:
mysql -u [用戶名] -p [數(shù)據(jù)庫(kù)名]
示例:
mysql -u root -p
輸入上述命令后,系統(tǒng)會(huì)提示你輸入密碼。如果你的 MySQL 服務(wù)運(yùn)行在本地且用戶
root沒(méi)有密碼,可以直接回車。
帶數(shù)據(jù)庫(kù)名登錄:
mysql -u root -p my_database
這會(huì)直接連接到名為
my_database的數(shù)據(jù)庫(kù)。
注意: -h 參數(shù)用于指定主機(jī)名(默認(rèn)是 localhost),如果需要連接遠(yuǎn)程數(shù)據(jù)庫(kù),則需指定 IP 地址或主機(jī)名。
Java 代碼示例: 使用 JDBC 連接到 MySQL 數(shù)據(jù)庫(kù)
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 包含主機(jī)、端口和數(shù)據(jù)庫(kù)名
String user = "root"; // 用戶名
String password = "your_password"; // 密碼
try {
// 加載 MySQL JDBC 驅(qū)動(dòng)程序
Class.forName("com.mysql.cj.jdbc.Driver");
// 建立連接
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println("? 成功連接到 MySQL 數(shù)據(jù)庫(kù)!");
// 在這里可以執(zhí)行數(shù)據(jù)庫(kù)操作...
connection.close(); // 關(guān)閉連接
} catch (ClassNotFoundException e) {
System.err.println("? 未找到 MySQL JDBC 驅(qū)動(dòng)程序。");
e.printStackTrace();
} catch (SQLException e) {
System.err.println("? 連接數(shù)據(jù)庫(kù)失敗。");
e.printStackTrace();
}
}
}
?? 重要提示: 請(qǐng)確保你的項(xiàng)目中包含了 MySQL 的 JDBC 驅(qū)動(dòng)(如
mysql-connector-java)。你可以通過(guò) Maven 或 Gradle 添加依賴。
2. 退出 MySQL 客戶端
當(dāng)你完成操作后,需要優(yōu)雅地離開(kāi) MySQL 的命令行環(huán)境。
命令:
exit; -- 或者 quit;
第二部分:數(shù)據(jù)庫(kù)操作
3. 查看所有數(shù)據(jù)庫(kù)
在 MySQL 中,數(shù)據(jù)庫(kù)就像是一個(gè)容器,用來(lái)存放相關(guān)的數(shù)據(jù)表。
命令:
SHOW DATABASES;
Java 代碼示例: 獲取所有數(shù)據(jù)庫(kù)列表
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("?? 所有數(shù)據(jù)庫(kù):");
while (databases.next()) {
String dbName = databases.getString("TABLE_CAT"); // MySQL 中使用 TABLE_CAT 獲取數(shù)據(jù)庫(kù)名
System.out.println("- " + dbName);
}
databases.close();
connection.close();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
}
4. 創(chuàng)建數(shù)據(jù)庫(kù)
創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù),就像為你的項(xiàng)目開(kāi)辟一片新的土地。
命令:
CREATE DATABASE [IF NOT EXISTS] database_name;
示例:
CREATE DATABASE IF NOT EXISTS company_db;
IF NOT EXISTS是一個(gè)安全選項(xiàng),防止因數(shù)據(jù)庫(kù)已存在而報(bào)錯(cuò)。
5. 使用數(shù)據(jù)庫(kù)
選擇一個(gè)數(shù)據(jù)庫(kù)作為當(dāng)前操作的目標(biāo)。就像切換到某個(gè)特定的房間進(jìn)行工作一樣。
命令:
USE database_name;
示例:
USE company_db;
6. 刪除數(shù)據(jù)庫(kù)
當(dāng)你不再需要某個(gè)數(shù)據(jù)庫(kù)時(shí),可以將其刪除(注意:此操作不可逆?。?。
命令:
DROP DATABASE [IF EXISTS] database_name;
示例:
DROP DATABASE IF EXISTS company_db;
同樣,
IF EXISTS可以避免因數(shù)據(jù)庫(kù)不存在而報(bào)錯(cuò)。
第三部分:數(shù)據(jù)表操作
7. 查看當(dāng)前數(shù)據(jù)庫(kù)中的所有表
了解當(dāng)前數(shù)據(jù)庫(kù)內(nèi)有哪些“房間”(表)是很有必要的。
命令:
SHOW TABLES;
Java 代碼示例: 獲取當(dāng)前數(shù)據(jù)庫(kù)中的所有表名
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("?? 當(dāng)前數(shù)據(jù)庫(kù)中的所有表:");
while (tables.next()) {
String tableName = tables.getString("TABLE_NAME");
System.out.println("- " + tableName);
}
tables.close();
connection.close();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
}
8. 創(chuàng)建數(shù)據(jù)表
表是存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu)化容器。定義表結(jié)構(gòu)是數(shù)據(jù)管理的核心。
命令:
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)
);
這個(gè)例子創(chuàng)建了一個(gè)名為
employees的表,包含了員工的基本信息。AUTO_INCREMENT使得id字段自動(dòng)遞增,PRIMARY KEY設(shè)置為主鍵,UNIQUE確保郵箱唯一,NOT NULL約束不允許為空。
9. 查看表結(jié)構(gòu)
了解表的字段(列)信息、數(shù)據(jù)類型和約束是進(jìn)行后續(xù)操作的基礎(chǔ)。
命令:
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}" 的結(jié)構(gòu):`);
System.out.printf("%-20s %-15s %-10s %-10s%n", "列名", "類型", "允許空", "默認(rè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. 刪除數(shù)據(jù)表
當(dāng)表不再需要時(shí),可以將其刪除。
命令:
DROP TABLE [IF EXISTS] table_name;
示例:
DROP TABLE IF EXISTS employees;
第四部分:數(shù)據(jù)操作(增刪改查)
11. 插入數(shù)據(jù)
向表中添加新的記錄。
命令:
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 插入數(shù)據(jù)
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);
// 設(shè)置參數(shù)
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"));
// 執(zhí)行插入
int rowsAffected = pstmt.executeUpdate();
System.out.println("? 成功插入 " + rowsAffected + " 行數(shù)據(jù)。");
pstmt.close();
connection.close();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
}
12. 查詢所有數(shù)據(jù)
最基本的操作,查看表中所有的記錄。
命令:
SELECT * FROM table_name;
示例:
SELECT * FROM employees;
13. 條件查詢
根據(jù)特定條件篩選數(shù)據(jù),這是數(shù)據(jù)庫(kù)查詢的核心。
命令:
SELECT column1, column2, ... FROM table_name WHERE condition;
示例:
SELECT first_name, last_name, salary FROM employees WHERE salary > 70000;
Java 代碼示例: 使用 PreparedStatement 執(zhí)行條件查詢
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;
// 構(gòu)造函數(shù)、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. 更新數(shù)據(jù)
修改現(xiàn)有記錄中的數(shù)據(jù)。
命令:
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 更新數(shù)據(jù)
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 + " 行數(shù)據(jù)。");
pstmt.close();
connection.close();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
}
15. 刪除數(shù)據(jù)
移除不需要的記錄。
命令:
DELETE FROM table_name WHERE condition;
示例:
DELETE FROM employees WHERE first_name = 'John' AND last_name = 'Doe';
?? 警告: 不要忘記
WHERE子句!否則會(huì)刪除表中的所有數(shù)據(jù)!
Java 代碼示例: 使用 PreparedStatement 刪除數(shù)據(jù)
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 + " 行數(shù)據(jù)。");
pstmt.close();
connection.close();
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
}
第五部分:用戶權(quán)限與管理
16. 創(chuàng)建用戶
為不同的應(yīng)用或人員分配訪問(wèn)數(shù)據(jù)庫(kù)的賬戶。
命令:
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
示例:
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'secure_password_123';
'app_user'@'localhost'表示用戶名為app_user,只能從本機(jī)(localhost)連接。
17. 授權(quán)用戶
賦予用戶特定的權(quán)限,遵循最小權(quán)限原則。
命令:
GRANT privileges ON database.table TO 'username'@'host';
示例:
GRANT SELECT, INSERT, UPDATE ON company_db.employees TO 'app_user'@'localhost';
這授予了
app_user對(duì)company_db數(shù)據(jù)庫(kù)中employees表的查詢、插入和更新權(quán)限。
18. 撤銷權(quán)限
收回已授予的權(quán)限。
命令:
REVOKE privileges ON database.table FROM 'username'@'host';
示例:
REVOKE UPDATE ON company_db.employees FROM 'app_user'@'localhost';
19. 刪除用戶
當(dāng)不再需要某個(gè)用戶時(shí),將其從系統(tǒng)中移除。
命令:
DROP USER 'username'@'host';
示例:
DROP USER 'app_user'@'localhost';
第六部分:數(shù)據(jù)庫(kù)備份與恢復(fù)
20. 備份與恢復(fù)數(shù)據(jù)庫(kù)
數(shù)據(jù)安全至關(guān)重要!定期備份是保護(hù)數(shù)據(jù)免受意外損失的關(guān)鍵措施。
備份數(shù)據(jù)庫(kù):
使用 mysqldump 工具導(dǎo)出數(shù)據(jù)庫(kù)結(jié)構(gòu)和數(shù)據(jù)。
命令:
mysqldump -u [用戶名] -p [數(shù)據(jù)庫(kù)名] > backup_file.sql
示例:
mysqldump -u root -p company_db > company_backup.sql
恢復(fù)數(shù)據(jù)庫(kù):
將備份文件導(dǎo)入到 MySQL 中。
命令:
mysql -u [用戶名] -p [數(shù)據(jù)庫(kù)名] < backup_file.sql
示例:
mysql -u root -p company_db < company_backup.sql
?? 提示:
mysqldump生成的是純文本 SQL 文件,可以方便地進(jìn)行版本控制和傳輸。
總結(jié)與最佳實(shí)踐
掌握這些 MySQL 命令是走向數(shù)據(jù)庫(kù)精通的第一步。它們構(gòu)成了日常數(shù)據(jù)庫(kù)工作的基石。記住以下幾點(diǎn),會(huì)讓你事半功倍:
- 安全第一: 使用強(qiáng)密碼,遵循最小權(quán)限原則,定期審查用戶權(quán)限。
- 備份策略: 定期進(jìn)行數(shù)據(jù)庫(kù)備份,測(cè)試恢復(fù)流程。
- 性能優(yōu)化: 合理使用索引,避免
SELECT *,編寫(xiě)高效的 SQL 查詢。 - 命名規(guī)范: 使用清晰、一致的表名和字段名。
- 事務(wù)處理: 在需要保證數(shù)據(jù)一致性的場(chǎng)景下,使用事務(wù)(
BEGIN,COMMIT,ROLLBACK)。 - 學(xué)習(xí)資源: 不斷學(xué)習(xí)官方文檔和其他優(yōu)質(zhì)教程。例如,MySQL 官方文檔 是最權(quán)威的參考資料。
希望這篇博客能幫助你快速上手 MySQL!如果你有任何疑問(wèn)或想了解更高級(jí)的話題,請(qǐng)隨時(shí)留言討論。祝你數(shù)據(jù)庫(kù)之旅愉快!??
參考鏈接
到此這篇關(guān)于MySQL常用命令速查之新手必備的20個(gè)高頻操作的文章就介紹到這了,更多相關(guān)MySQL常用命令速查高頻操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mac OS10.11下mysql5.7.12 安裝配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了Mac OS10.11下mysql5.7.12 安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
MySQL?根據(jù)多字段查詢重復(fù)數(shù)據(jù)的示例代碼
本文介紹了如何使用 MySQL 根據(jù)多個(gè)字段查詢重復(fù)數(shù)據(jù),我們介紹了如何根據(jù)多個(gè)字段查詢重復(fù)數(shù)據(jù),并提供了相應(yīng)的代碼示例,通過(guò)這些方法,我們可以快速準(zhǔn)確地找到和處理重復(fù)數(shù)據(jù),提高數(shù)據(jù)庫(kù)的數(shù)據(jù)質(zhì)量,需要的朋友可以參考下2023-11-11
windows2008 64位系統(tǒng)下MySQL 5.7綠色版的安裝教程
這篇文章主要給大家分享了在windows2008 64位系統(tǒng)下MySQL 5.7綠色版的安裝教程,文中將安裝步驟介紹的非常詳細(xì),相信會(huì)對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-05-05
mysql如何實(shí)現(xiàn)最大連接數(shù)
云服務(wù)器同時(shí)最大連接數(shù),也就是說(shuō)可以有一千個(gè)用戶,那么mysql如何實(shí)現(xiàn)最大連接數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12
mysql 5.7.17 安裝配置方法圖文教程(ubuntu 16.04)
這篇文章主要為大家分享了ubuntu 16.04下mysql 5.7.17 安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
Prometheus 監(jiān)控MySQL使用grafana展示
這篇文章主要介紹prometheus通過(guò)mysql exporter+node exporter監(jiān)控mysql,并使用grafana進(jìn)行圖表展示的相關(guān)內(nèi)容,感興趣的效果版可以參考下文2021-08-08

