🚪 MySQL 入门篇(零基础版)
数据库是什么 · 表/行/列 · SQL 增删改查全语法 · 和 Java 怎么配合
1. 数据库是什么?为什么不用 Excel 存数据?
🗂️ 类比——学校档案室:
数据库 = 学校档案室(专门存学生档案的地方)
表 = 一本档案册(学生信息表、成绩表、课程表)
行 = 档案册里的一条记录(一个学生的所有信息)
列 = 记录里的一个字段(姓名、学号、年龄)
SQL = 查询口令("把学号 2023001 的档案调出来")
数据库 = 学校档案室(专门存学生档案的地方)
表 = 一本档案册(学生信息表、成绩表、课程表)
行 = 档案册里的一条记录(一个学生的所有信息)
列 = 记录里的一个字段(姓名、学号、年龄)
SQL = 查询口令("把学号 2023001 的档案调出来")
为什么不用 Excel:
- 并发:网站 1000 人同时操作一个 Excel?崩了。数据库专门为并发设计
- 安全:权限控制(谁能读谁能写)、事务(转账不丢钱)
- 大数据量:百万行数据秒级查询,Excel 卡死
- 持久化:程序重启数据还在(存在磁盘上,配合内存缓存加速)
MySQL:最流行的开源关系型数据库。数据库、表、行、列——这就是"关系型"(像表格)的意思。
🎯 记住
- 数据库 = 档案室;表 = 档案册;行 = 记录;列 = 字段
- MySQL = 关系型数据库(表格形态),Java 后端标配
- 程序把数据存在数据库里,重启不丢
2. 怎么建一张表?(CREATE TABLE)
学生表:CREATE TABLE
CREATE TABLE student (
id INT PRIMARY KEY AUTO_INCREMENT, -- 主键,自动增长(1,2,3...)
name VARCHAR(50) NOT NULL, -- 姓名,最长 50 字符,不能为空
age INT, -- 年龄
email VARCHAR(100)
);
-- 常用类型:INT 整数、VARCHAR(n) 变长字符串、DOUBLE 小数、
-- DATE 日期、DATETIME 日期时间、TEXT 长文本
-- 约束:PRIMARY KEY 主键(唯一标识)、NOT NULL 不能为空、
-- UNIQUE 唯一、DEFAULT 默认值
🎯 记住
- 主键 = 每行的身份证号(必须唯一);AUTO_INCREMENT 自动 +1
- VARCHAR(n) 是字符串(n 是长度);IDEA/客户端里鼠标点点也能建表
- 表名小写 + 下划线:user_info(Java 里对应 UserInfo 类)
3. 增删改查(CRUD)——SQL 的核心四板斧
增:INSERT INTO
INSERT INTO student (name, age, email)
VALUES ('小明', 18, 'xiaoming@xx.com');
-- id 不用写,自动增长。字符串要加单引号!
查:SELECT(最常用)
SELECT * FROM student; -- 查所有行所有列
SELECT name, age FROM student; -- 只查指定列
SELECT * FROM student WHERE age > 18; -- 条件过滤(WHERE)
SELECT * FROM student ORDER BY age DESC; -- 按年龄降序(ASC 升序)
SELECT * FROM student LIMIT 10; -- 只取前 10 条(分页用)
SELECT COUNT(*) FROM student; -- 统计行数
-- WHERE 条件组合:AND(且) OR(或) IN、LIKE
SELECT * FROM student
WHERE age >= 18 AND name LIKE '张%'; -- 18 岁以上且姓张
改:UPDATE / 删:DELETE
UPDATE student SET age = 19 WHERE id = 1;
-- ⚠️ 必须带 WHERE!不带 WHERE 会把整表都改了!
DELETE FROM student WHERE id = 1;
-- ⚠️ 同样必须带 WHERE,否则清空整张表(真事,血的教训)
🎯 记忆口诀
- 增 INSERT、删 DELETE、改 UPDATE、查 SELECT——背下这 4 个动词
- WHERE = 条件(定位哪几行);UPDATE/DELETE 忘写 WHERE = 灾难
- 字符串值单引号 'xxx';SQL 语句末尾分号 ;
4. Java 程序怎么操作数据库?(JDBC → MyBatis)
JDBC:Java 操作数据库的"原始接口"(手动连、手动写 SQL、手动处理结果)。
JDBC 最简流程(理解即可,现在都用 MyBatis)
try (Connection conn = DriverManager.getConnection(url, user, pwd);
PreparedStatement ps = conn.prepareStatement(
"SELECT * FROM student WHERE id = ?")) {
ps.setInt(1, 1); // ? 占位符传参(防 SQL 注入)
ResultSet rs = ps.executeQuery();
while (rs.next()) System.out.println(rs.getString("name"));
}
MyBatis(现在的主流):帮你把"SQL 和 Java 对象"自动对应——SQL 写在一个 XML/注解里,结果自动变成对象,不用手写 ResultSet 那套。
MyBatis 接口 + SQL(感受一下)
public interface StudentMapper {
@Select("SELECT * FROM student WHERE id = #{id}")
Student findById(int id); // 结果自动变成 Student 对象
}