任务五 修改数据
知识点
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配合使用可以控制具体修改哪些行。