MySQL 根据条件多值更新的实现!
MySQL 根据条件多值更新的实现!
本文主要介绍了MySQL 根据条件多值更新的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
MySQL多条件批量更新核心语法:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
UPDATE 表名 SET 字段1 = CASE WHEN 条件1 THEN 值1 WHEN 条件2 THEN 值2 ELSE 字段1 END , 字段2 = CASE WHEN 条件1 THEN 值3 WHEN 条件2 THEN 值4 ELSE 字段2 END WHERE 整体过滤条件; |
示例场景:更新商品库存和价格
1
2
3
4
5
6
7
8
9
10
11
12
13
|
UPDATE products SET stock = CASE WHEN category_id = 5 AND price > 100 THEN stock - 10 WHEN create_date < '2024-01-01' THEN stock + 5 ELSE stock END , price = CASE WHEN category_id = 5 THEN price * 0.9 WHEN stock > 1000 THEN price * 0.8 ELSE price END WHERE status = 'active' ; |
高效写法技巧:
- 批量更新逻辑
1
2
3
4
5
6
7
8
9
10
11
12
13
|
UPDATE users SET vip_level = CASE WHEN score >= 1000 THEN 'Diamond' WHEN score >= 500 THEN 'Gold' ELSE vip_level END , discount = CASE WHEN score >= 1000 THEN 0.7 WHEN score >= 500 THEN 0.8 ELSE discount END WHERE registration_year = 2024; |
关键注意事项:
- 条件优先级:WHEN子句按书写顺序匹配
- 必须包含ELSE:防止意外覆盖数据,建议保留原值
- 性能优化:WHERE子句需使用索引字段
- 事务处理:大批量更新建议分批次执行
- 多表关联:可用JOIN实现跨表条件更新
1
2
3
4
5
6
7
8
9
|
UPDATE orders o JOIN payments p ON o.id = p.order_id SET o.status = CASE WHEN p.paid = 1 THEN 'completed' ELSE 'pending' END , p.processed_at = NOW() WHERE o.create_date > '2024-06-01' ; |
扩展方案:使用IF函数简化二元判断
1
2
3
4
5
|
UPDATE employees SET salary = IF(performance > 90, salary * 1.2, salary), bonus = IF(join_year < 2020, bonus + 5000, bonus) WHERE department = 'Engineering' ; |
建议根据实际数据量添加事务控制(BEGIN/COMMIT)和分页更新(LIMIT),避免长时间锁表。
到此这篇关于MySQL 根据条件多值更新的实现的文章就介绍到这了。
学习资料见知识星球。
以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。
快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利!
更多技巧, www.excelbook.cn
欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;
1、价值上万元的专业的PPT报告模板。
2、专业案例分析和解读笔记。
3、实用的Excel、Word、PPT技巧。
4、VIP讨论群,共享资源。
5、优惠的会员商品。
6、一次付费只需129元,即可下载本站文章涉及的文件和软件。
共有 0 条评论