计算机应用

导航

第15周 数据更新(插入、修改、删除)

第15周 · 数据更新(插入、修改、删除)

前面学的 SELECT 只读不改。这周学 DML 三类写操作INSERT 加数据、UPDATE 改数据、DELETE 删数据。它们能改变数据,所以安全是第一原则


一、知识点:三类写操作

语句 作用
INSERT 插入(增加)行
UPDATE 修改(更新)已有行
DELETE 删除行

对比:DROP/TRUNCATE 是删"表/结构",这周 DELETE 只删"行"。


二、操作教程:INSERT 插入数据

-- 指定列插入(推荐:列名明确,顺序不乱)
INSERT INTO student (sname, sage, sdept)
VALUES ('张三', 19, '计算机系');

-- 一次插多行
INSERT INTO student (sname, sage, sdept) VALUES
  ('李四', 20, '软件工程系'),
  ('王五', 18, '计算机系');

-- 不写自增列 sid,系统自动生成

列名和数据要一一对应。自增列、有默认值的列可省略。


三、操作教程:INSERT … SELECT 从查询结果插入

把查询结果直接写进另一张表(常用于备份、筛选建表):

-- 建新表 stu_cs,把"计算机系"学生插进去
CREATE TABLE stu_cs (sid INT, sname VARCHAR(20));

INSERT INTO stu_cs (sid, sname)
SELECT sid, sname FROM student WHERE sdept = '计算机系';

INSERT ... SELECT 要求后面 SELECT 的列数、顺序、类型与目标表一致。


四、操作教程:UPDATE 修改数据

-- 把 sid=2024001 且 cid=1 的成绩加 5 分
UPDATE sc
SET grade = grade + 5
WHERE sid = 2024001 AND cid = 1;

要点: - SET 列 = 新值,多个列用逗号:SET a=1, b=2。 - WHERE 指定改哪些行,漏写 WHERE 会改全表所有行(灾难!)。


五、操作教程:DELETE 删除数据

-- 删除 sid=2024002 的所有选课记录
DELETE FROM sc WHERE sid = 2024002;

不带 WHERE 的 DELETE FROM 表 会删除整张表所有行,务必谨慎。


六、知识点:DELETE 与 TRUNCATE 的区别

对比 DELETE TRUNCATE
能否带 WHERE 能(删部分行) 不能(只能清空整表)
是否可回滚 在事务中可回滚 一般不可回滚
触发触发器 不会
效率 逐行删,慢 直接重置,快
自增计数器 保留 重置为初始值
DELETE FROM sc WHERE sid = 2024002;   -- 删指定行
TRUNCATE TABLE sc;                      -- 清空整表(保留结构)

七、安全铁律(务必记住)

  1. 改/删前先 SELECT 确认影响哪些行:把 UPDATE/DELETEWHERE 先拿到 SELECT 跑一遍,看行数对不对。
  2. 务必带 WHERE:除非你真的要动全表。
  3. 操作前备份CREATE TABLE 备份 AS SELECT * FROM 原表;
  4. 生产环境建议在事务里做(BEGIN; → 检查 → COMMIT; / 出错 ROLLBACK;),可后悔。

八、综合实操:作业三题

-- 题1:成绩 +5
UPDATE sc SET grade = grade + 5 WHERE sid = 2024001 AND cid = 1;

-- 题2:删除某生选课
DELETE FROM sc WHERE sid = 2024002;

-- 题3:筛选建表并插入
CREATE TABLE stu_cs (sid INT, sname VARCHAR(20));
INSERT INTO stu_cs (sid, sname)
SELECT sid, sname FROM student WHERE sdept = '计算机系';

九、易混点排查表

现象 解决方法
误把全表改了 UPDATE/DELETE 漏 WHERE;先 SELECT 确认、操作前备份
UPDATE 报语法错 SET 用单等号 =;多列用逗号分隔
DELETE 和 DROP 混淆 DELETE 删行、DROP 删表;别用错
INSERT 列数不匹配 列名与 VALUES 数量/顺序必须一致
自增列插不进 自增列可省略不写,系统自动生成
TRUNCATE 后自增从头 TRUNCATE 重置计数器;要保留用 DELETE

十、小测验(自测)

  1. 把某学生某门课成绩加 5 分的 UPDATE 怎么写?为什么必须带 WHERE?
  2. DELETE FROM sc WHERE sid=2024002;TRUNCATE TABLE sc; 的区别?
  3. INSERT ... SELECT 有什么要求(列数/类型)?举例说明用途。
  4. 执行危险 UPDATE/DELETE 前,应该先做什么来防误伤?

【声明】本文由 AI 辅助生成,仅供 MySQL 数据库教学参考,如有疑误以教材为准。

posted on 2026-08-29 10:26  eagle福  阅读(3)  评论(0)    收藏  举报