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 开发场景,后续可深入学习分库分表、性能调优等高级主题。