UPDATE 语句是 MySQL 中用于修改表中数据的重要命令,下面我将全面介绍其使用方法及注意事项。
基本语法
UPDATE <表名>
SET 字段1=值1 [, 字段2=值2...]
[WHERE 条件]
[ORDER BY 字段]
[LIMIT 行数];
关键组成部分
1. SET 子句:指定要更新的列及其新值
2. WHERE 子句:确定哪些行将被更新(可选但强烈建议使用)
3. ORDER BY 子句:控制更新顺序(可选)
4. LIMIT 子句:限制更新的行数(可选)
实际应用示例
1. 更新所有行
将所有课程的学分设为4
UPDATE tb_courses_new SET course_grade = 4;
注意:没有WHERE子句会更新整个表!
2. 条件更新
更新特定ID的课程名称和学分
UPDATE tb_courses_new SET course_name = 'DB', course_grade = 3.5 WHERE course_id = 2;
3. 多字段更新
同时更新多个字段
UPDATE employees SET salary = salary * 1.1, last_raise_date = CURRENT_DATE WHERE department = 'Engineering';
4. 使用表达式更新
基于现有值的计算更新
UPDATE products SET price = price * 0.9 -- 打9折 WHERE stock > 100;
5. 带ORDER BY和LIMIT的更新
只更新最早注册的10个用户
UPDATE users SET status = 'inactive' ORDER BY registration_date LIMIT 10;
高级用法
1. 使用子查询更新
根据另一张表的数据更新
UPDATE orders o SET o.status = 'shipped' WHERE o.order_id IN ( SELECT order_id FROM shipments WHERE shipped_date IS NOT NULL );
2. 多表关联更新
更新关联表的数据
UPDATE customers c JOIN orders o ON c.customer_id = o.customer_id SET c.last_order_date = o.order_date WHERE o.order_date > c.last_order_date;
3. 使用CASE条件更新
根据条件不同值更新
UPDATE students SET grade = CASE WHEN score >= 90 THEN 'A' WHEN score >= 80 THEN 'B' WHEN score >= 70 THEN 'C' ELSE 'D' END;
注意事项
1. WHERE子句重要性:除非确实需要更新所有行,否则永远使用WHERE子句
2. 事务使用:大批量更新前开启事务,便于错误时回滚
START TRANSACTION;
UPDATE ...;
COMMIT; -- 或 ROLLBACK;
3. 备份数据:执行重要更新前先备份表数据
4. 性能考虑:
大表更新时添加LIMIT分批处理
为WHERE条件中的字段建立索引
5. 返回值解读:
"Rows matched":符合WHERE条件的行数
"Changed":实际发生改变的行数
常见错误避免
1. 忘记WHERE子句:导致全表更新
2. 不完整条件:WHERE条件不准确导致更新错误行
3. 数据类型不匹配:确保SET值与列数据类型兼容
4. 外键约束:更新主键需考虑外键关系
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程