MySQL 根據(jù)條件多值更新的實(shí)現(xiàn)
MySQL多條件批量更新核心語(yǔ)法:
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 整體過(guò)濾條件;
示例場(chǎng)景:更新商品庫(kù)存和價(jià)格
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';
高效寫(xiě)法技巧:
- 批量更新邏輯
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;
關(guān)鍵注意事項(xiàng):
- 條件優(yōu)先級(jí):WHEN子句按書(shū)寫(xiě)順序匹配
- 必須包含ELSE:防止意外覆蓋數(shù)據(jù),建議保留原值
- 性能優(yōu)化:WHERE子句需使用索引字段
- 事務(wù)處理:大批量更新建議分批次執(zhí)行
- 多表關(guān)聯(lián):可用JOIN實(shí)現(xiàn)跨表?xiàng)l件更新
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';
擴(kuò)展方案:使用IF函數(shù)簡(jiǎn)化二元判斷
UPDATE employees SET salary = IF(performance > 90, salary * 1.2, salary), bonus = IF(join_year < 2020, bonus + 5000, bonus) WHERE department = 'Engineering';
建議根據(jù)實(shí)際數(shù)據(jù)量添加事務(wù)控制(BEGIN/COMMIT)和分頁(yè)更新(LIMIT),避免長(zhǎng)時(shí)間鎖表。
到此這篇關(guān)于MySQL 根據(jù)條件多值更新的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)MySQL 多值更新內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL數(shù)據(jù)表索引命名規(guī)范的實(shí)現(xiàn)示例
索引是提高查詢(xún)性能的重要工具,本文主要介紹了MySQL數(shù)據(jù)表索引命名規(guī)范的實(shí)現(xiàn)示例,包括不同類(lèi)型索引的命名方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-05-05MySQL與PHP的基礎(chǔ)與應(yīng)用專(zhuān)題之表連接
MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),由瑞典MySQL?AB?公司開(kāi)發(fā),屬于?Oracle?旗下產(chǎn)品。MySQL?是最流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)之一,本系列將帶你掌握php與mysql的基礎(chǔ)應(yīng)用,本篇表連接開(kāi)始2022-02-02MySQL實(shí)現(xiàn)類(lèi)似Oracle序列的方案
今天小編就為大家分享一篇關(guān)于MySQL實(shí)現(xiàn)類(lèi)似Oracle序列的方案,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03MySQL InnoDB和MyISAM數(shù)據(jù)引擎的差別分析
InnoDB和MyISAM是在使用MySQL最常用的兩個(gè)表類(lèi)型,各有優(yōu)缺點(diǎn),視具體應(yīng)用而定。基本的差別為:MyISAM類(lèi)型不支持事務(wù)處理等高級(jí)處理,而InnoDB類(lèi)型支持2011-05-05mysql實(shí)用技巧之比較兩個(gè)表是否有不同數(shù)據(jù)的方法分析
這篇文章主要介紹了mysql實(shí)用技巧之比較兩個(gè)表是否有不同數(shù)據(jù)的方法,結(jié)合實(shí)例形式分析了mysql數(shù)據(jù)表比較的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下2019-12-12如何使用MySQL?Explain?分析?SQL?執(zhí)行計(jì)劃
MySQL?提供的?EXPLAIN?工具能夠幫助我們深入了解查詢(xún)語(yǔ)句的執(zhí)行過(guò)程、索引使用情況以及潛在的性能瓶頸,本文將詳細(xì)介紹如何使用?EXPLAIN?分析?SQL?執(zhí)行計(jì)劃,并探討其中各個(gè)重要字段的含義以及優(yōu)化建議,感興趣的朋友一起看看吧2025-04-04MySQL用作備份還原的導(dǎo)入和導(dǎo)出命令用法整理
這篇文章主要介紹了MySQL用作備份還原的導(dǎo)入和導(dǎo)出命令用法整理,包括mysqldump的命令的使用以及l(fā)oad data相關(guān)命令,需要的朋友可以參考下2015-12-12