MySQL 入門全方位指南(附Java操作示例)
MySQL 作為最流行的關系型數據庫之一,廣泛應用于各類應用開發中。本文將從安裝開始,逐步講解 MySQL 的核心知識點與操作技巧,并通過 Java 示例展示客戶端交互,幫助你快速掌握 MySQL 實戰技能。
一、MySQL 安裝
1.1 Windows 安裝
- 下載 MySQL 社區版 安裝包
- 運行安裝程序,選擇「Server only」模式
- 配置 root 密碼,建議復雜度適中
- 安裝完成后,通過「MySQL Command Line Client」驗證
1.2 Linux 安裝(以 CentOS 為例)
# 安裝
yum install mysql-server
# 啟動服務
systemctl start mysqld
# 查看初始密碼
grep 'temporary password' /var/log/mysqld.log
# 登錄并修改密碼
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass123!';
驗證安裝:
mysql -V # 輸出版本信息即成功
1.3 DBMS
數據庫管理軟件,推薦 DBeaver
二、MySQL 常用命令
連接數據庫:
mysql -u 用戶名 -p # 回車后輸入密碼
數據庫操作:
CREATE DATABASE demo; # 創建數據庫
SHOW DATABASES; # 查看所有數據庫
USE demo; # 切換到 demo 數據庫
DROP DATABASE demo; # 刪除數據庫(謹慎操作)
表操作:
CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,age INT,create_time DATETIME DEFAULT CURRENT_TIMESTAMP
); # 創建表SHOW TABLES; # 查看當前庫所有表
DESC users; # 查看表結構
DROP TABLE users; # 刪除表(謹慎操作)
三、MySQL 基本操作
3.1 插入數據(INSERT)
INSERT INTO users (name, age) VALUES
('張三', 25),
('李四', 30); # 批量插入
3.2 刪除數據(DELETE)
DELETE FROM users WHERE id = 1; # 按條件刪除(無WHERE則刪除全表!)
3.3 修改數據(UPDATE)
UPDATE users SET age = 26 WHERE name = '張三'; # 按條件更新
3.4 查詢數據(SELECT)
SELECT * FROM users; # 查詢全表
SELECT name, age FROM users WHERE age > 28; # 查詢指定字段+條件
四、MySQL 關鍵字與函數
常用關鍵字
SELECT
:查詢數據INSERT
:插入數據UPDATE
:更新數據DELETE
:刪除數據WHERE
:過濾條件GROUP BY
:分組JOIN
:連接表LIMIT
:限制結果數量
常用函數
- 聚合函數:
SELECT COUNT(*) FROM users; # 總記錄數
SELECT AVG(age) FROM users; # 平均年齡
SELECT SUM(age) FROM users; # 年齡總和
- 字符串函數:
SELECT CONCAT(name, '_', age) FROM users; # 拼接字符串
SELECT LENGTH(name) FROM users; # 字符串長度
- 日期函數:
SELECT NOW(); # 當前時間
SELECT DATE(create_time) FROM users; # 提取日期部分
五、MySQL 查詢語法進階
5.1 條件查詢
# 多條件(AND/OR)
SELECT * FROM users WHERE age > 25 AND name LIKE '張%';
# 范圍查詢
SELECT * FROM users WHERE age BETWEEN 20 AND 30;
# 枚舉查詢
SELECT * FROM users WHERE name IN ('張三', '李四');
5.2 聚合與分組查詢
# 按年齡分組統計人數
SELECT age, COUNT(*) AS count FROM users GROUP BY age;
# 分組后過濾(HAVING)
SELECT age, COUNT(*) AS count
FROM users
GROUP BY age
HAVING count > 1; # 只保留人數>1的年齡組
5.3 連接查詢
假設有 orders
表(訂單):
CREATE TABLE orders (id INT PRIMARY KEY AUTO_INCREMENT,user_id INT,amount DECIMAL(10,2),FOREIGN KEY (user_id) REFERENCES users(id)
);
- 內連接(只保留匹配的記錄):
SELECT u.name, o.amount
FROM users u
INNER JOIN orders o
ON u.id = o.user_id;
- 左連接(保留左表所有記錄):
SELECT u.name, o.amount
FROM users u
LEFT JOIN orders o
ON u.id = o.user_id; # 無訂單的用戶也會顯示(amount為NULL)
5.4 子查詢
# 查有訂單的用戶
SELECT * FROM users
WHERE id IN (SELECT user_id FROM orders);
5.5 組合查詢(UNION)
# 合并兩個查詢結果(去重)
SELECT name FROM users WHERE age < 25
UNION
SELECT name FROM users WHERE age > 30;
六、MySQL 約束
約束用于保證數據完整性:
- 主鍵(PRIMARY KEY):唯一標識記錄(非空+唯一)
- 外鍵(FOREIGN KEY):關聯其他表的主鍵,保證數據一致性
- 唯一(UNIQUE):字段值唯一(可空)
- 非空(NOT NULL):字段不可為空
- 默認值(DEFAULT):未賦值時使用默認值
示例:
CREATE TABLE products (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(100) NOT NULL,code VARCHAR(20) UNIQUE, # 產品編碼唯一price DECIMAL(10,2) DEFAULT 0.00 # 默認價格0
);
七、MySQL 存儲引擎
存儲引擎決定表的存儲方式,常用兩種:
- InnoDB(默認):支持事務、外鍵、行級鎖,適合寫操作多的場景
- MyISAM:不支持事務,查詢速度快,適合讀多寫少的場景
查看/修改存儲引擎:
SHOW TABLE STATUS LIKE 'users'; # 查看表引擎
ALTER TABLE users ENGINE = MyISAM; # 修改引擎
八、MySQL 高級特性
8.1 事務(ACID特性)
BEGIN; # 開始事務
UPDATE users SET age = 26 WHERE id = 1;
INSERT INTO orders (user_id, amount) VALUES (1, 100);
COMMIT; # 提交事務(成功則生效)
# ROLLBACK; # 回滾(失敗則撤銷)
8.2 索引(加速查詢)
CREATE INDEX idx_age ON users(age); # 為age字段創建索引
DROP INDEX idx_age ON users; # 刪除索引
注意:索引會減慢寫操作(插入/更新/刪除),需合理設計。
8.3 視圖(虛擬表)
CREATE VIEW user_orders AS
SELECT u.name, o.amount FROM users u
JOIN orders o ON u.id = o.user_id;SELECT * FROM user_orders; # 使用視圖
8.4 觸發器(自動執行的操作)
# 插入訂單后自動更新用戶訂單數
CREATE TRIGGER update_order_count
AFTER INSERT ON orders
FOR EACH ROW
UPDATE users SET order_count = order_count + 1
WHERE id = NEW.user_id;
九、庫表設計原則
遵循三范式設計,避免冗余:
- 每個字段不可再分
- 非主鍵字段需完全依賴主鍵
- 非主鍵字段不依賴其他非主鍵字段
示例:電商場景核心表設計
users
(用戶):id, name, phoneorders
(訂單):id, user_id, create_time, totalorder_items
(訂單項):id, order_id, product_id, quantity, priceproducts
(商品):id, name, price, stock
十、Java 操作 MySQL(JDBC)
10.1 依賴配置(Maven)
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version>
</dependency>
10.2 示例代碼
import java.sql.*;public class MySQLDemo {// 連接信息private static final String URL = "jdbc:mysql://localhost:3306/demo?useSSL=false&serverTimezone=UTC";private static final String USER = "root";private static final String PASSWORD = "root123";public static void main(String[] args) {Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;try {// 1. 加載驅動(MySQL 8.0+ 可省略)Class.forName("com.mysql.cj.jdbc.Driver");// 2. 建立連接conn = DriverManager.getConnection(URL, USER, PASSWORD);// 3. 執行查詢String sql = "SELECT id, name, age FROM users WHERE age > ?";pstmt = conn.prepareStatement(sql);pstmt.setInt(1, 25); // 設置參數rs = pstmt.executeQuery();// 4. 處理結果while (rs.next()) {int id = rs.getInt("id");String name = rs.getString("name");int age = rs.getInt("age");System.out.println("ID: " + id + ", 姓名: " + name + ", 年齡: " + age);}// 5. 執行插入(示例)String insertSql = "INSERT INTO users (name, age) VALUES (?, ?)";pstmt = conn.prepareStatement(insertSql);pstmt.setString(1, "王五");pstmt.setInt(2, 28);int rows = pstmt.executeUpdate();System.out.println("插入了 " + rows + " 行數據");} catch (Exception e) {e.printStackTrace();} finally {// 6. 關閉資源(后開先關)try { if (rs != null) rs.close(); } catch (SQLException e) { e.printStackTrace(); }try { if (pstmt != null) pstmt.close(); } catch (SQLException e) { e.printStackTrace(); }try { if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); }}}
}
注意:實際開發中推薦使用 MyBatis、JPA 等框架簡化 JDBC 操作。
總結
本文涵蓋了 MySQL 從安裝到高級特性的核心知識點,從基礎的增刪改查,到復雜的查詢優化、事務管理,再到 Java 客戶端操作,形成了完整的知識體系。實踐中需注意數據一致性(通過約束和事務)、查詢性能(通過索引和合理設計),并結合框架提高開發效率。
掌握這些內容,你將能應對大部分 MySQL 開發場景,后續可深入學習分庫分表、性能調優等高級主題。