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. 外键约束:更新主键需考虑外键关系

点赞(2)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)