跳到主要内容

任务五 修改数据

知识点​

1. UPDATE语句的基本语法格式是什么?​

答:UPDATE语句的基本语法格式:

UPDATE 表名
SET 字段名1 = 值1, 字段名2 = 值2, ...
[WHERE 条件表达式];

UPDATE语句通过SET子句指定要修改的字段和新值,通过WHERE子句限定修改范围。如果不使用WHERE子句,则会修改表中所有记录。

2. UPDATE语句中WHERE子句的作用是什么?​

答:WHERE子句用于限定修改的范围,只有满足条件的记录才会被修改。如果不加WHERE子句,UPDATE语句会修改表中所有记录,这是非常危险的操作。

例如:UPDATE student SET sage = 21 WHERE sno = '2023001'; 只修改学号为2023001的学生年龄。 而 UPDATE student SET sage = 21; 会将所有学生的年龄都改为21。

3. 如何同时修改多个字段的值?​

答:在SET子句中用逗号分隔多个 字段名 = 值 的赋值表达式。例如:

UPDATE student
SET sname = '李四', sage = 22, sdept = '数学系'
WHERE sno = '2023001';

同时修改了该学生的姓名、年龄和系部三个字段。

4. UPDATE语句中如何使用表达式修改字段值?​

答:SET子句中的值可以是表达式,基于当前字段值进行计算。例如:

-- 所有学生年龄加1
UPDATE student SET sage = sage + 1;
-- 计算机系学生成绩乘以1.1(提高10%)
UPDATE sc SET grade = grade * 1.1
WHERE sno IN (SELECT sno FROM student WHERE sdept = '计算机系');

5. UPDATE语句中可以将字段值设为NULL吗?​

答:可以,前提是该字段允许为NULL(即未设置NOT NULL约束)。例如:UPDATE student SET sphone = NULL WHERE sno = '2023001'; 将该学生的电话号码设为空值。

6. 如何使用子查询作为UPDATE的条件?​

答:可以在WHERE子句中使用子查询来限定修改范围。例如:

-- 将选修了001号课程的学生成绩加5分
UPDATE sc SET grade = grade + 5
WHERE sno IN (SELECT sno FROM sc WHERE cno = '001');

7. UPDATE语句中SET子句的执行顺序是什么?​

答:SET子句中多个赋值表达式的执行顺序是从左到右依次执行。后面的赋值表达式可以引用前面已修改的字段值。例如:UPDATE t SET a = 10, b = a + 5; 执行后 a=10, b=15(b引用的是修改后a的值)。

8. 多表连接的UPDATE语句如何使用?​

答:MySQL支持在UPDATE语句中使用JOIN来基于多表条件修改数据。语法格式:

UPDATE 表1
[INNER|LEFT|RIGHT] JOIN 表2 ON 表1.字段 = 表2.字段
SET 表1.字段 = 值
[WHERE 条件];

例如:UPDATE student INNER JOIN sc ON student.sno = sc.sno SET sc.grade = 0 WHERE student.sdept = '数学系'; 将数学系学生的选课成绩清零。

9. UPDATE语句修改数据时需要注意什么?​

答:

  • 务必使用WHERE子句:不加WHERE会修改全部记录,应先用SELECT验证条件范围
  • 备份重要数据:修改前可以先备份表数据
  • 事务保护:在事务中执行UPDATE,确认无误后再COMMIT,可ROLLBACK回滚
  • 注意约束:修改后的值不能违反主键、唯一、外键、CHECK等约束

10. 如何限制UPDATE修改的行数?​

答:使用LIMIT子句可以限制修改的行数。例如:UPDATE student SET sage = sage + 1 ORDER BY sno LIMIT 10; 只修改按学号排序的前10条记录的年龄。ORDER BY与LIMIT配合使用可以控制具体修改哪些行。