最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL中批量更新數(shù)據(jù)的幾種常用方法

 更新時(shí)間:2025年10月17日 09:42:46   作者:學(xué)亮編程手記  
本文總結(jié)了MySQL批量更新數(shù)據(jù)的多種方法及優(yōu)化建議,推薦使用CASE WHEN語句,強(qiáng)調(diào)索引、分批處理與事務(wù)控制,提醒注意備份和環(huán)境驗(yàn)證,選擇方法需根據(jù)實(shí)際需求與性能要求,需要的朋友可以參考下

本文介紹MySQL中批量更新數(shù)據(jù)的幾種常用方法:

1. 使用 CASE WHEN 語句(推薦)

UPDATE users 
SET 
    status = CASE id 
        WHEN 1 THEN 'active'
        WHEN 2 THEN 'inactive'
        WHEN 3 THEN 'pending'
    END,
    updated_at = CASE id 
        WHEN 1 THEN '2024-01-01'
        WHEN 2 THEN '2024-01-02'
        WHEN 3 THEN '2024-01-03'
    END
WHERE id IN (1, 2, 3);

2. 使用多個(gè) WHEN THEN 條件

UPDATE products 
SET 
    price = CASE 
        WHEN id = 1 THEN 19.99
        WHEN id = 2 THEN 29.99
        WHEN id = 3 THEN 39.99
        ELSE price
    END,
    stock = CASE 
        WHEN id = 1 THEN 100
        WHEN id = 2 THEN 50
        WHEN id = 3 THEN 200
        ELSE stock
    END
WHERE id IN (1, 2, 3);

3. 使用 VALUES 和 JOIN 方式

UPDATE orders o
JOIN (
    SELECT 1 as id, 'shipped' as status, '2024-01-01' as ship_date
    UNION ALL
    SELECT 2, 'processing', '2024-01-02'
    UNION ALL
    SELECT 3, 'delivered', '2024-01-03'
) AS temp ON o.id = temp.id
SET 
    o.status = temp.status,
    o.ship_date = temp.ship_date,
    o.updated_at = NOW();

4. 使用臨時(shí)表方式

-- 創(chuàng)建臨時(shí)表
CREATE TEMPORARY TABLE temp_updates (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100)
);

-- 插入要更新的數(shù)據(jù)
INSERT INTO temp_updates VALUES 
(1, '張三', 'zhangsan@email.com'),
(2, '李四', 'lisi@email.com'),
(3, '王五', 'wangwu@email.com');

-- 執(zhí)行批量更新
UPDATE users u
JOIN temp_updates t ON u.id = t.id
SET 
    u.name = t.name,
    u.email = t.email,
    u.updated_at = NOW();

-- 刪除臨時(shí)表
DROP TEMPORARY TABLE temp_updates;

5. 使用 INSERT … ON DUPLICATE KEY UPDATE

適用于主鍵或唯一索引沖突時(shí)的更新:

INSERT INTO users (id, name, email, status, updated_at) 
VALUES 
(1, '張三', 'zhangsan@email.com', 'active', NOW()),
(2, '李四', 'lisi@email.com', 'inactive', NOW()),
(3, '王五', 'wangwu@email.com', 'active', NOW())
ON DUPLICATE KEY UPDATE 
    name = VALUES(name),
    email = VALUES(email),
    status = VALUES(status),
    updated_at = NOW();

6. 批量更新相同值

-- 更新所有符合條件的記錄為相同值
UPDATE products 
SET 
    category = 'electronics',
    updated_at = NOW()
WHERE id IN (1, 2, 3, 4, 5);

-- 基于條件的批量更新
UPDATE employees 
SET 
    salary = salary * 1.1,  -- 漲薪10%
    last_raise_date = NOW()
WHERE department = 'Engineering' 
AND performance_rating >= 4;

7. 使用存儲(chǔ)過程進(jìn)行復(fù)雜批量更新

DELIMITER //

CREATE PROCEDURE BatchUpdateUsers()
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE user_id INT;
    DECLARE user_status VARCHAR(20);
    DECLARE cur CURSOR FOR SELECT id, status FROM users WHERE status = 'pending';
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    
    OPEN cur;
    
    read_loop: LOOP
        FETCH cur INTO user_id, user_status;
        IF done THEN
            LEAVE read_loop;
        END IF;
        
        -- 根據(jù)業(yè)務(wù)邏輯更新
        UPDATE users 
        SET status = 'processed', processed_at = NOW() 
        WHERE id = user_id;
        
    END LOOP;
    
    CLOSE cur;
END //

DELIMITER ;

-- 調(diào)用存儲(chǔ)過程
CALL BatchUpdateUsers();

性能優(yōu)化建議

  1. 添加索引:在 WHERE 條件的字段上添加索引
  2. 分批處理:大量數(shù)據(jù)時(shí)建議分批更新
  3. 事務(wù)控制:使用事務(wù)確保數(shù)據(jù)一致性
START TRANSACTION;

UPDATE large_table 
SET status = 'updated'
WHERE id BETWEEN 1 AND 10000;

UPDATE large_table 
SET status = 'updated'
WHERE id BETWEEN 10001 AND 20000;

COMMIT;

注意事項(xiàng)

  • 批量更新前建議先備份數(shù)據(jù)
  • 在生產(chǎn)環(huán)境執(zhí)行前先在測(cè)試環(huán)境驗(yàn)證
  • 注意 WHERE 條件,避免誤更新
  • 大量數(shù)據(jù)更新時(shí)考慮在業(yè)務(wù)低峰期執(zhí)行

選擇哪種方法取決于具體需求、數(shù)據(jù)量和性能要求。CASE WHEN 方式通常是最常用且性能較好的選擇。

到此這篇關(guān)于MySQL中批量更新數(shù)據(jù)的幾種常用方法的文章就介紹到這了,更多相關(guān)MySQL批量更新數(shù)據(jù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL如何為字段添加默認(rèn)時(shí)間淺析

    MySQL如何為字段添加默認(rèn)時(shí)間淺析

    這篇文章主要給大家介紹了關(guān)于MySQL如何為字段添加默認(rèn)時(shí)間的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • mysql優(yōu)化的重要參數(shù) key_buffer_size table_cache

    mysql優(yōu)化的重要參數(shù) key_buffer_size table_cache

    MySQL服務(wù)器端的參數(shù)有很多,但是對(duì)于大多數(shù)初學(xué)者來說,眾多的參數(shù)往往使得我們不知所措,但是哪些參數(shù)是需要我們調(diào)整的,哪些對(duì)服務(wù)器的性能影響最大呢
    2016-05-05
  • MySQL數(shù)據(jù)庫如何查看表占用空間大小

    MySQL數(shù)據(jù)庫如何查看表占用空間大小

    由于數(shù)據(jù)太大了,所以MYSQL需要瘦身,那前提就是需要知道每個(gè)表占用的空間大小,這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫如何查看表占用空間大小的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • MySQL 查詢結(jié)果以百分比顯示簡單實(shí)現(xiàn)

    MySQL 查詢結(jié)果以百分比顯示簡單實(shí)現(xiàn)

    用到了MySQL字符串處理中的兩個(gè)函數(shù)concat()和left()實(shí)現(xiàn)查詢結(jié)果以百分比顯示,具體示例代碼如下,感興趣的朋友可以學(xué)習(xí)下
    2013-07-07
  • mysql查看用戶授權(quán)信息的具體方法

    mysql查看用戶授權(quán)信息的具體方法

    在本篇文章里小編給大家整理的是一篇關(guān)于mysql查看用戶授權(quán)信息的具體方法,有需要的朋友們可以參考下。
    2020-08-08
  • MySQL 使用SQL語句修改表名的實(shí)現(xiàn)

    MySQL 使用SQL語句修改表名的實(shí)現(xiàn)

    這篇文章主要介紹了MySQL 使用SQL語句修改表名的實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • MySQL sql_mode修改不生效的原因及解決

    MySQL sql_mode修改不生效的原因及解決

    這篇文章主要介紹了MySQL sql_mode修改不生效的原因及解決,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下
    2021-05-05
  • MySQL主從架構(gòu)中的Seconds_Behind_Master指標(biāo)問題解析

    MySQL主從架構(gòu)中的Seconds_Behind_Master指標(biāo)問題解析

    Seconds_Behind_Master 是 MySQL 提供的一個(gè)延遲指標(biāo),但其計(jì)算方式?jīng)Q定了它并不能完全反映真實(shí)延遲,本文給大家介紹MySQL主從架構(gòu)中的Seconds_Behind_Master指標(biāo)問題,感興趣的朋友跟隨小編一起看看吧
    2025-09-09
  • mysql主從復(fù)制讀寫分離的配置方法詳解

    mysql主從復(fù)制讀寫分離的配置方法詳解

    一般來說mysql都是通過 主從復(fù)制(Master-Slave)的方式來同步數(shù)據(jù),再通過讀寫分離(MySQL-Proxy)來提升數(shù)據(jù)庫的并發(fā)負(fù)載能力 這樣的方案來進(jìn)行部署與實(shí)施的。
    2018-04-04
  • mysql的MVCC多版本并發(fā)控制的實(shí)現(xiàn)

    mysql的MVCC多版本并發(fā)控制的實(shí)現(xiàn)

    這篇文章主要介紹了mysql的MVCC多版本并發(fā)控制的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04

最新評(píng)論

通州区| 南康市| 连城县| 凤翔县| 横山县| 芮城县| 喀什市| 天全县| 界首市| 合阳县| 井冈山市| 榕江县| 临江市| 青神县| 饶河县| 拉萨市| 南和县| 东阳市| 綦江县| 武隆县| 龙胜| 奈曼旗| 赤水市| 重庆市| 湖南省| 益阳市| 沂水县| 吉安市| 乌海市| 常州市| 十堰市| 龙南县| 本溪市| 毕节市| 新郑市| 平顶山市| 东兰县| 合水县| 类乌齐县| 台北县| 永安市|