1. 引言增删改查CRUD是数据库操作中最基础、最核心的四个动作分别对应 SQL 中的INSERT新增、SELECT查询、UPDATE修改和DELETE删除。本文将从语法结构、常用写法、注意事项和实战示例四个维度系统讲解 MySQL 中增删改查的完整用法。2. 准备工作在开始讲解之前先创建一个示例表后续所有示例都基于这张表展开。CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT COMMENT 主键, name VARCHAR(50) NOT NULL COMMENT 姓名, age INT COMMENT 年龄, class_name VARCHAR(50) COMMENT 班级, score DECIMAL(5,2) COMMENT 成绩, created_at DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT 创建时间 ) ENGINEInnoDB DEFAULT CHARSETutf8mb4;3. 新增数据INSERT3.1 基本语法INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...);3.2 常用写法写法一指定列插入只给部分列赋值未指定的列使用默认值。INSERT INTO student (name, age, class_name, score) VALUES (张三, 18, 高三(1)班, 92.5);写法二省略列名此时必须按表结构顺序给所有列赋值。INSERT INTO student VALUES (NULL, 李四, 19, 高三(2)班, 88.0, NOW());写法三一次插入多行用逗号分隔多组值减少 SQL 执行次数。INSERT INTO student (name, age, class_name, score) VALUES (王五, 17, 高三(3)班, 95.0), (赵六, 18, 高三(1)班, 87.5), (孙七, 19, 高三(2)班, 90.0);写法四INSERT ... SET可读性更强适合字段较少的场景。INSERT INTO student SET name 周八, age 18, class_name 高三(4)班, score 89.0;3.3 注意事项字符串和日期类型必须加单引号数字类型不需要。自增主键AUTO_INCREMENT可以传 NULL 或省略由数据库自动生成。插入的数据必须满足字段约束如 NOT NULL 字段不能为空。使用INSERT IGNORE可忽略因主键或唯一索引冲突导致的错误。使用ON DUPLICATE KEY UPDATE可在冲突时改为更新操作。4. 查询数据SELECT4.1 基本语法SELECT 列1, 列2, ... FROM 表名 [WHERE 条件] [ORDER BY 排序] [LIMIT 限制];4.2 常用写法查询全部列使用星号通配符。SELECT * FROM student;查询指定列只返回需要的字段减少数据传输量。SELECT name, age, score FROM student;带条件查询使用 WHERE 过滤记录。SELECT name, score FROM student WHERE score 90;多条件组合使用 AND、OR、NOT 连接多个条件。SELECT * FROM student WHERE class_name 高三(1)班 AND age 18;模糊查询使用 LIKE 配合通配符%任意多个字符和_单个字符。SELECT * FROM student WHERE name LIKE 张%;范围查询使用 BETWEEN ... AND 或 IN。SELECT * FROM student WHERE score BETWEEN 85 AND 95; SELECT * FROM student WHERE class_name IN (高三(1)班, 高三(2)班);排序使用 ORDER BY 指定排序字段和方向。SELECT * FROM student ORDER BY score DESC; -- 成绩从高到低 SELECT * FROM student ORDER BY class_name ASC, score DESC; -- 多字段排序分页查询使用 LIMIT 限制返回行数offset 表示跳过多少行。SELECT * FROM student LIMIT 5; -- 返回前 5 行 SELECT * FROM student LIMIT 5, 10; -- 跳过 5 行返回 10 行第 6 到第 15 行去重查询使用 DISTINCT 去除重复值。SELECT DISTINCT class_name FROM student;聚合查询配合 COUNT、SUM、AVG、MAX、MIN 使用。SELECT COUNT(*) AS total_count FROM student; SELECT AVG(score) AS avg_score, MAX(score) AS max_score FROM student;分组查询使用 GROUP BY 按字段分组常与聚合函数配合。SELECT class_name, COUNT(*) AS cnt, AVG(score) AS avg_score FROM student GROUP BY class_name HAVING AVG(score) 88;4.3 注意事项WHERE 用于分组前过滤HAVING 用于分组后过滤。LIKE 模糊查询以%开头时无法利用索引数据量大时性能较差。ORDER BY 默认升序ASC降序需显式指定 DESC。LIMIT 的 offset 从 0 开始计数。5. 修改数据UPDATE5.1 基本语法UPDATE 表名 SET 列1 值1, 列2 值2, ... [WHERE 条件];5.2 常用写法修改单条记录通过主键精确定位。UPDATE student SET score 96.0 WHERE id 1;批量修改通过条件匹配多条记录。UPDATE student SET class_name 高三(1)班 WHERE age 18;同时修改多个字段用逗号分隔多个赋值。UPDATE student SET age 19, score 91.0 WHERE name 张三;基于原值更新在原有值基础上做运算。UPDATE student SET score score 2 WHERE class_name 高三(3)班;5.3 注意事项务必带 WHERE 条件否则会更新表中所有记录这是最常见的误操作。UPDATE 语句执行后可通过ROW_COUNT()获取受影响的行数。更新操作会触发数据库的行锁大批量更新时注意锁等待和事务控制。建议在事务中执行 UPDATE配合 COMMIT 和 ROLLBACK 保证数据安全。6. 删除数据DELETE6.1 基本语法DELETE FROM 表名 [WHERE 条件];6.2 常用写法删除单条记录按主键删除。DELETE FROM student WHERE id 1;按条件批量删除。DELETE FROM student WHERE score 60;清空整张表删除所有记录。DELETE FROM student;使用 TRUNCATE 清空表速度更快但无法回滚且会重置自增主键。TRUNCATE TABLE student;6.3 DELETE 与 TRUNCATE 的区别对比项DELETETRUNCATE是否可加 WHERE可以按条件删除不可以只能全表清空是否可回滚在事务内可回滚不可回滚执行速度较慢逐行删除很快直接释放数据页自增主键保留当前计数重置为初始值触发器会触发 DELETE 触发器不会触发6.4 注意事项务必带 WHERE 条件否则会清空整张表。删除操作不可逆建议先 SELECT 确认要删除的数据范围。生产环境删除数据前建议先备份或使用软删除增加 is_deleted 字段。7. 综合实战示例下面用一个完整的业务场景串联四个操作新增学生、查询成绩、修改分数、删除不合格记录。-- 1. 新增三名学生 INSERT INTO student (name, age, class_name, score) VALUES (张三, 18, 高三(1)班, 92.5), (李四, 19, 高三(2)班, 88.0), (王五, 17, 高三(3)班, 95.0); -- 2. 查询所有成绩大于等于 90 的学生 SELECT name, class_name, score FROM student WHERE score 90; -- 3. 将张三的成绩加 2 分 UPDATE student SET score score 2 WHERE name 张三; -- 4. 删除成绩低于 60 的学生 DELETE FROM student WHERE score 60; -- 5. 查看最终结果 SELECT * FROM student ORDER BY score DESC;8. 总结MySQL 的增删改查是数据库操作的基石掌握好这四类语句的语法和细节是后续学习复杂查询、事务、索引优化和存储过程的前提。日常开发中要特别注意INSERT 注意字段约束SELECT 注意查询效率UPDATE 和 DELETE 务必带 WHERE 条件并在关键操作前做好数据备份。
