)
1. 初识DML数据库的编辑工具箱想象你面前有一本厚厚的花名册需要不断记录新同学信息、更新学生成绩、修正错误条目。在数据库世界里这套操作就叫DMLData Manipulation Language。它不像创建表结构的DDL那么严肃更像是日常使用的编辑三件套INSERT像钢笔新增记录、UPDATE像涂改液修改数据、DELETE像碎纸机删除数据。我在管理学生信息系统时90%的日常工作都靠这三个操作完成。先看个典型的学生表结构CREATE TABLE students ( student_id VARCHAR(10) PRIMARY KEY, name VARCHAR(20) NOT NULL, department VARCHAR(30), class VARCHAR(10), gender CHAR(1), birthday DATE, credits INT DEFAULT 0 );这个表就像我们的数字花名册接下来所有操作都围绕它展开。新手常犯的错误是直接上手写SQL其实应该先搞清楚三个关键问题操作对象是谁这里是students表要影响哪些字段比如只更新学分还是修改多项信息条件范围是什么修改单条记录还是批量处理2. 新增数据INSERT的三种实用姿势2.1 标准插入新生入学登记每学期迎新时最常用的就是完整插入-- 插入马明的完整信息 INSERT INTO students VALUES (2023001, 马明, 计算机系, CS-101, M, 2000-05-12, 32);这里有个坑要注意字段顺序必须严格匹配表结构定义。我有次把生日和学分顺序写反导致系统记录了个出生在32年的学生闹了大笑话。更安全的写法是显式指定字段INSERT INTO students (student_id, name, department, class, gender, birthday, credits) VALUES (2023002, 李红, 外语系, FL-201, F, 2001-03-08, 28);2.2 缺省插入信息不全时的处理有时新生材料不全比如转学生学分尚未核定-- 只插入已知信息学分使用默认值0 INSERT INTO students (student_id, name, department, gender) VALUES (2023003, 张伟, 物理系, M);这时要注意非空字段如name必须包含未指定的字段要么允许NULL要么有默认值主键student_id绝对不能遗漏2.3 批量导入迎新季的高效操作开学时要处理上百条记录逐条INSERT会疯掉。我常用的两种批量方法方法一VALUES列表INSERT INTO students VALUES (2023004, 王芳, 数学系, MA-102, F, 2000-11-21, 30), (2023005, 赵强, 化学系, CH-101, M, 1999-09-03, 34), (2023006, 刘洋, 生物系, BIO-201, M, 2000-07-14, 28);方法二SELECT导入-- 从临时表导入数据 INSERT INTO students SELECT * FROM new_students_temp WHERE status verified;批量操作时要注意事务处理建议加上BEGIN TRANSACTION; -- 批量操作... COMMIT; -- 出错时执行ROLLBACK3. 修改数据UPDATE的精准手术刀3.1 单记录修改学生信息修正发现马明的班级录入错误UPDATE students SET class CS-102 WHERE student_id 2023001;这里有个血泪教训忘记WHERE条件会全表更新有次我误操作导致全校学生都被改成计算机系幸好有备份。建议先写WHERE条件再写SET部分。3.2 批量更新学分调整实战期末时给计算机系学生统一加2学分UPDATE students SET credits credits 2 WHERE department 计算机系;处理NULL值要特别小心-- 先处理NULL值再计算MySQL写法 UPDATE students SET credits IFNULL(credits, 0) 2 WHERE department 数学系;3.3 多字段更新学生转系处理张伟从物理系转到电子工程系同时班级变更UPDATE students SET department 电子工程系, class EE-301, credits credits - 5 -- 转系扣除5学分 WHERE student_id 2023003;4. 删除数据DELETE的安全操作指南4.1 精准删除学生退学处理学号2023006的学生退学DELETE FROM students WHERE student_id 2023006;重要原则删除前先用SELECT确认范围重要数据先备份再删除考虑使用软删除添加is_deleted字段4.2 条件删除批量清理数据删除所有已毕业学生假设毕业年份为2023-- 先创建备份 CREATE TABLE graduated_students_2023 AS SELECT * FROM students WHERE class LIKE %-23; -- 再执行删除 DELETE FROM students WHERE class LIKE %-23;4.3 全表删除谨慎使用的核按钮清空临时测试表-- 危险操作清空整个表 TRUNCATE TABLE test_students;TRUNCATE与DELETE的区别TRUNCATE不可回滚TRUNCATE重置自增IDTRUNCATE不触发DELETE触发器5. 实战技巧避坑经验分享事务处理是生命线BEGIN; UPDATE accounts SET balance balance - 100 WHERE user_id U1001; UPDATE students SET status paid WHERE student_id 2023001; COMMIT; -- 任一语句失败都会自动回滚性能优化小技巧大批量INSERT时关闭索引UPDATE前先EXPLAIN查看执行计划定期用ANALYZE TABLE更新统计信息安全备份策略-- 创建表结构副本 CREATE TABLE students_backup LIKE students; -- 复制数据 INSERT INTO students_backup SELECT * FROM students; -- 或使用导出命令 mysqldump -u root -p school students students_backup.sql有次系统故障我就是靠每小时一次的增量备份恢复了关键数据。现在我的工作准则就是修改前先备份删除前双确认。