1. 数据库是什么?为什么不用 Excel 存数据?

🗂️ 类比——学校档案室:
数据库 = 学校档案室(专门存学生档案的地方)
表 = 一本档案册(学生信息表、成绩表、课程表)
行 = 档案册里的一条记录(一个学生的所有信息)
列 = 记录里的一个字段(姓名、学号、年龄)
SQL = 查询口令("把学号 2023001 的档案调出来")

为什么不用 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 对象
}

🎯 学习路径

  • 本篇:理解数据库 + 会写基础 SQL ✅ → 安装 MySQL 自己敲一遍 CRUD
  • 索引原理:为什么查询快/慢(B+ 树)→ SQL 优化(EXPLAIN)
  • 事务与 MVCC:转账怎么保证不丢钱 → 锁:并发怎么防错
  • 日志体系、分库分表:进阶
  • 动手项目:MyBatis + Spring Boot 写一个"学生管理"增删改查,SQL 就熟了

🎤 常见面试追问

  1. 什么是数据库?关系型和非关系型的区别?——数据库 = 存数据并支持快速查询的系统。关系型(MySQL/PostgreSQL)用表格、支持 SQL、事务强;非关系型(Redis/MongoDB)更灵活更快,事务弱。业务数据用关系型,缓存用非关系型。
  2. SQL 和 NoSQL 怎么选?——要事务/复杂查询/关联 → SQL;海量 KV/高并发/灵活结构 → NoSQL。两者常组合(MySQL + Redis)。
  3. 为什么 UPDATE 忘写 WHERE 是灾难?——不带 WHERE 会更新整张表的所有行(DELETE 同理会清空)。生产事故高发原因,操作前先 SELECT 确认。

📖 名词解释(本页术语)

术语 大白话解释
数据库(Database)专门存数据、支持并发访问和安全查询的软件。程序的数据都放在这里,重启不丢。
表 / 行 / 列表 = 档案册(一类数据);行 = 一条记录;列 = 一个字段(姓名/年龄…)。
SQL操作数据库的语言。四大动词:SELECT(查)/ INSERT(增)/ UPDATE(改)/ DELETE(删)。
主键(PRIMARY KEY)每行记录的唯一标识(id),不允许重复和为空,AUTO_INCREMENT 自动增长。
WHERE条件过滤子句:只操作符合条件的行。UPDATE/DELETE 忘写它 = 全表遭殃。
ORDER BY / LIMIT排序(ASC 升/DESC 降)和取前 N 条(分页用)。
JDBCJava 操作数据库的标准接口(连接/执行 SQL/取结果),MyBatis 是对它的封装。
MyBatisJava 的持久层 / SQL 映射框架(半自动 ORM):把 SQL 和 Java 方法绑定,查询结果自动变对象。区别于 Hibernate 这类全自动 ORM——SQL 仍由你写。
⚠️ 本页面由 AI 生成,内容仅供参考,请以官方文档和实际源码为准。