mysql有則更新 批量 mysql 批量更新

2021-10-19 19:37:49 字數 1753 閱讀 2089

private function parseupdate($data, $field,$table)

$sql = " update set ";

//$keys = array_keys(current($data));print_r($keys);die;

/* foreach ($keys as $column) )";

如何用一條sql語句實現批量更新?mysql並沒有提供直接的方法來實現批量更新,但是可以用點小技巧來實現。

複製** **如下:

update mytable set

myfield = case id

when 1 then 'value'

when 2 then 'value'

when 3 then 'value'

endwhere id in (1,2,3);

這裡使用了case when 這個小技巧來實現批量更新。

舉個例子:

複製** **如下:

update categories set

display_order = case id

when 1 then 3

when 2 then 4

when 3 then 5

endwhere id in (1,2,3);

這句sql的意思是,更新display_order 字段,如果id=1 則display_order 的值為3,如果id=2 則 display_order 的值為4,如果id=3 則 display_order 的值為5。

即是將條件語句寫在了一起。

這裡的where部分不影響**的執行,但是會提高sql執行的效率。確保sql語句僅執行需要修改的行數,這裡只有3條資料進行更新,而where子句確保只有3行資料執行。

如果更新多個值的話,只需要稍加修改:

複製** **如下:

update categories set

display_order = case id

when 1 then 3

when 2 then 4

when 3 then 5

end,

title = case id

when 1 then 'new title 1'

when 2 then 'new title 2'

when 3 then 'new title 3'

endwhere id in (1,2,3);

到這裡,已經完成一條mysql語句更新多條記錄了。但是要在業務中運用,需要結合服務端語言,這裡以php為例,構造這條mysql語句:

複製** **如下:

$display_order = array(

1 => 4,

2 => 1,

3 => 2,

4 => 3,

5 => 9,

6 => 5,

7 => 8,

8 => 9

$ids = implode(',', array_keys($display_order));

$sql = "update categories set display_order = case id ";

foreach ($display_order as $id => $ordinal) {

$sql .= sprintf("when %d then %d ", $id, $ordinal);

$sql .= "end where id in ($ids)";

echo $sql;

mybatis使用批量更新以及有則更新無則插入

如下 update integer updaterobotlist param list listlist 說明 使用註解方式使用xml標籤需要加標籤,foreach作用是一次dao操作執行多條sql 類似於這樣 update users set name 小黑 where id 1 update ...

mysql 批量更新 MySQL批量更新

我有2個表 mysql data details accounts invoices 理想情況下,每個data details都應具有accounts invoices id.data details有乙個帶有accounts invoices主鍵的外來鍵 由於某種原因,有data details記...

mybatis mysql 有則更新,無則插入

建立表 在這裡插入drop table if exists virtualmachines create table virtualmachines name varchar 100 not null comment 虛擬機器名稱 status varchar 100 default null co...