mysql 的常用批次更新

love-hai發表於2024-05-06

批次更新

in

update tableName set columnName = value where columnName in (value1, value2, value3);
有侷限性,限制了更新的屬性值必須一致。如果不一致,需要分開寫多個update語句。

insert into... on duplicate key update

insert into tableName (columnName1, columnName2) values (value1, value2) on duplicate key update columnName1 = value1, columnName2 = value2;
根據 唯一索引或者primary key 來進行更新,如果存在則更新,不存在則插入。

replace into tableName (columnName1, columnName2) values (value1, value2);

如果value的欄位不全,會將缺失的欄位置為預設值。
究其原因,replace into 操作的本質是對重複的記錄先 delete 後 insert,所以如果更新的欄位不全會將缺失的欄位置為預設值;而 insert into 只是update重複記錄,不會改變其它欄位。

set...case...when...where

-- 沒有where條件,會更新所有的記錄,可以使用default()函式來設定預設值
update tb_user
set password = case
    when user_name = 'xxx' then 'xxxpassword'
    when user_name = 'hhh' then 'hhhpassword'
    else default(password)
    end,
    age = case
    when user_name = 'xxx' then 18
    when user_name = 'hhh' then 20
    else default(age)
    end
-- 有where條件,只更新符合條件的記錄
update tb_user
set password = case
    when user_name = 'xxx' then 'xxxpassword'
    when user_name = 'hhh' then 'hhhpassword'
    else default(password)
    end,
    age = case
    when user_name = 'xxx' then 18
    when user_name = 'hhh' then 20
    else default(age)
    end
where user_name in ('xxx', 'hhh')

相關文章