MySQL logo

CRUD 是数据库操作的四大基本功:Create(创建)、Read(读取)、Update(更新)、Delete(删除)。

先创建一个示例表以便操作:

CREATE TABLE students (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    age TINYINT UNSIGNED,
    class VARCHAR(20),
    score DECIMAL(5,2),
    created_at DATETIME DEFAULT NOW()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

一、INSERT — 插入数据

插入单条记录

INSERT INTO students (name, age, class, score) 
VALUES ('张三', 20, '计算机1班', 95.5);

插入多条记录

INSERT INTO students (name, age, class, score) VALUES
('李四', 21, '计算机1班', 88.0),
('王五', 19, '计算机2班', 92.5),
('赵六', 22, '软件工程1班', 78.0),
('孙七', 20, '软件工程1班', 85.5);

插入时指定字段(推荐)

-- 明确指定字段名,更安全、可读性更好
INSERT INTO students SET 
    name = '周八',
    age = 21,
    class = '计算机2班',
    score = 90.0;
提示 推荐始终指定字段名,这样即使表结构发生变化,SQL 语句也不会出错。

二、SELECT — 查询数据

查询所有

SELECT * FROM students;

查询指定字段

SELECT name, age, score FROM students;

条件查询 WHERE

-- 等于
SELECT * FROM students WHERE class = '计算机1班';

-- 大于
SELECT * FROM students WHERE score >= 90;

-- 范围 BETWEEN
SELECT * FROM students WHERE score BETWEEN 80 AND 90;

-- IN 列表
SELECT * FROM students WHERE class IN ('计算机1班', '软件工程1班');

-- LIKE 模糊匹配
SELECT * FROM students WHERE name LIKE '张%';

排序 ORDER BY

-- 升序(默认)
SELECT * FROM students ORDER BY score;

-- 降序
SELECT * FROM students ORDER BY score DESC;

-- 多字段排序
SELECT * FROM students ORDER BY class ASC, score DESC;

限制结果 LIMIT

-- 取前3条
SELECT * FROM students ORDER BY score DESC LIMIT 3;

-- 分页:跳过2条,取3条(第2页)
SELECT * FROM students ORDER BY id LIMIT 2, 3;

三、UPDATE — 更新数据

注意 更新操作务必加 WHERE,否则更新全表!
-- 更新单条
UPDATE students SET score = 96.0 WHERE name = '张三';

-- 更新多条
UPDATE students SET score = score + 5 WHERE class = '计算机1班';

-- 多字段更新
UPDATE students 
SET age = 21, score = 90.0 
WHERE name = '李四';

安全更新技巧

-- 先 SELECT 确认
SELECT * FROM students WHERE id = 1;

-- 再 UPDATE
UPDATE students SET score = 100 WHERE id = 1;

-- 使用 LIMIT 限制影响行数
UPDATE students SET score = 60 WHERE score < 60 LIMIT 1;

四、DELETE — 删除数据

注意 删除操作务必加 WHERE,否则清空全表!
-- 删除单条
DELETE FROM students WHERE id = 5;

-- 条件删除
DELETE FROM students WHERE score < 60;

-- 清空表(重置自增ID)
TRUNCATE TABLE students;

DELETE vs TRUNCATE vs DROP

操作删除数据保留结构重置自增ID可回滚
DELETE√ 条件删除×
TRUNCATE√ 全部删除×
DROP××

五、综合实战:学生成绩管理系统

-- 1. 插入测试数据
INSERT INTO students (name, age, class, score) VALUES
('小明', 20, '计算机1班', 91.0),
('小红', 19, '计算机1班', 87.5),
('小刚', 21, '软件工程2班', 76.0),
('小丽', 20, '软件工程2班', 95.0);

-- 2. 查询各班平均分
SELECT class, AVG(score) as avg_score, COUNT(*) as student_count
FROM students
GROUP BY class;

-- 3. 查询最高分
SELECT name, score FROM students ORDER BY score DESC LIMIT 1;

-- 4. 给不及格的加分
UPDATE students SET score = 60 WHERE score < 60;

-- 5. 删除成绩为空的学生
DELETE FROM students WHERE score IS NULL;

六、注意事项

安全第一

规则说明
UPDATE 先 SELECT确认 WHERE 条件正确再更新
生产环境加 LIMIT 1防止误操作影响大量数据
开启事务重要操作使用 BEGIN + COMMIT
备份先行批量操作前先备份

使用事务保护数据

BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;
-- 如果中间出错,执行 ROLLBACK 回滚

本篇小结

√ 掌握了 INSERT 插入数据的三种方式
√ 学会了 SELECT 查询的各种技巧(条件、排序、分页)
√ 理解了 UPDATE 和 DELETE 的安全操作规范
√ 知道了事务的基本使用场景

下一篇我们将学习 WHERE 条件、ORDER BY 排序、GROUP BY 分组 等查询进阶技巧!