鍍金池/ 問答/數(shù)據(jù)庫  網(wǎng)絡(luò)安全/ sql數(shù)據(jù)庫中,update能否實(shí)現(xiàn)像insert一樣的批量操作?

sql數(shù)據(jù)庫中,update能否實(shí)現(xiàn)像insert一樣的批量操作?

因?yàn)樽罱偸巧婕暗?批量update操作,不知道能否批量操作,只能在循環(huán)中一個(gè)一個(gè)的進(jìn)行update,
所以想問下 sql數(shù)據(jù)庫是否存在一種sql語句使得update能像insert一樣批量修改數(shù)據(jù)。

例如:
賬戶表account_info: id,姓名name,余額balance

INSERT INTO account_info(name,balance) values('小紅',0),('小明',10),('小白',15)

update是否也有類似的語句,比如我有一個(gè)數(shù)組

[
    {name: '小紅', sum: 5},
    {name: '小明', sum: -8},
    {name: '小白', sum: -10}
]

名字和金額一一對應(yīng)起來,進(jìn)行一次性的批量更新。使得數(shù)據(jù)庫中數(shù)據(jù)變?yōu)?

[
    {id:1, name: '小紅', balance: 5},
    {id:2, name: '小明', balance: 2},
    {id:3, name: '小白', balance: 5}
]

不確定是否有這種方式。 所以提問一下。

如有知道,歡迎回答。
不知道得話,可以收藏一下,萬一有人回答了呢。

回答
編輯回答
淡墨

-- 希望對你們有幫助 --

UPDATE account_info
  SET SUM = CASE NAME
    WHEN '小紅' THEN 5
    WHEN '小明' THEN 2
    WHEN '小白' THEN 5
  END
WHERE id IN (1,2,3);
2018年1月23日 03:17
編輯回答
心上人

update一般支持from。如果你要更新balance的變化量保存在balance_change表中,那么就可以(postgresql):

update account set balance = account.balance + balance_change.balance
from balance_change
where account.name = balance_change.name
2018年8月27日 06:13
編輯回答
六扇門

你這個(gè)需求就有問題,update本來就是更新值,插入的時(shí)候可以張三、李四、王五一次插入很多條數(shù)據(jù),更新的時(shí)候你還能把張三的名字同時(shí)改成李四和王五?
不過如果更新的值是計(jì)算出來的話,比如balance統(tǒng)一加一,倒是可以一起更新,但你這組數(shù)據(jù)看不出有什么規(guī)律

2017年7月24日 18:10
編輯回答
有點(diǎn)壞

如果用的是java開發(fā),jdbc驅(qū)動(dòng)有batch模式,專門用來執(zhí)行批量的insert/update語句。

其他語言的話直接搜索一下batch mode吧,我找到一個(gè)相關(guān)的文章,請參考。
http://thedebuggers.com/mysql...

2017年12月3日 18:18