MySQL批量更新相同字段的方法,用于不同值的多个记录

MySQL批量更新相同字段的方法,用于不同值的多个记录
首先,MySQL更新了一个数据字段,这是通常写的。
更新表设置这个行业'value'where other_field 'other_value= =;
您还可以在其中指定要更新的记录:
更新表设置这个行业= 'value'where other_field在('other_values);
注意这里的other_values '是一个逗号(,)分隔的字符串,如1,2,3

如果更新了一些数据,并且每个记录的值都是不同的,那么很多人都会写这个:
foreach(美元值myvalue id =美元美元){
为SQL = 更新表设置这个行业=美元myvalue id是$id;
mysql_query($ SQL);
}
它是一个循环的更新记录。一个记录是更新,性能不好,很容易引起阻塞。

那么,是否可以使用SQL语句进行批处理更新呢

MySQL没有提供直接的方法来实现批处理更新,但它可以用一点技巧来完成。
更新表
设置这个行业=事件ID
当1 then'myvalue1
当2'myvalue2'then
当3 then'myvalue3
结束
在other_field('other_values)
如果在条件查询的ID记录不在受案范围,这个行业将被设置为空。

如果更新了多个值,只需要稍加修改即可。
更新表
集myfield1 =事件ID
当1 then'myvalue11
当2 then'myvalue12
当3 then'myvalue13
结束,
myfield2 =事件ID
当1 then'myvalue21
当2 then'myvalue22
当3 then'myvalue23
结束
在ID(1,2,3)
这里,以PHP为例来构建这两个MySQL语句:

1。为不同的值更新多个单字段,MySQL模式

ids_values美元=阵列(
1=11,
2=22,
3=33,
4=44,
5=55,
6=66,
7=77,
8=88,
);

ID =崩溃美元(',',array_keys($ ids_values));
为SQL = 更新表设置这个行业=事件ID;
foreach(ids_values美元美元美元ID = > myvalue){
为SQL = sprintf(当%d %d美元后,美元的ID,自我价值);
}
在id($ id);
sql $。;
输出:
更新表设置这个行业=事件ID 1时11时22时2 3, 33 33 4 4 44 44 5 5 55 55 6。
2。更新不同值的多个领域,PDO模式

$data =阵列(阵列('id' = 1,'myfield1val ' = 11,'myfield2val ' = 111),数组('id' = 2,'myfield1val ' = 22,'myfield2val ' = 222));
where_in_ids美元=崩溃(',',array_map(功能($ V){ returnid_
update_sql美元=更新表;
$params =阵();

update_sql美元= ' myfield1 =事件ID;
foreach($美元=美元关键数据项){
update_sql美元=时:id_ 。美元关键。然后myfield1val_ 。$键;
$params {:id_ 。美元关键} = { 'id' } $项;
$params {:myfield1val_ 。美元关键} = { } 'myfield1val美元的项目;
}
update_sql美元=结束;

update_sql美元myfield2 =事件ID=;
foreach($美元=美元关键数据项){
update_sql美元=时:id_ 。美元关键。然后myfield2val_ 。$键;
$params {:id_ 。美元关键} = { 'id' } $项;
$params {:myfield1va2_ 。美元关键} = { } 'myfield2val美元的项目;
}
update_sql美元=结束;

update_sql美元=在ID(where_in_ids美元。;
echo $ update_sql。;
var_dump($params);
输出:
更新表设置myfield1 =,ID的时候:id_0然后:myfield1val_0时:myfield1val_0:myfield1val_0,myfield1,= =:以下两方面。

数组(大小= 6)
int:id_0= > 1
int:myfield1val_0= > 11
int:id_1= > 2
int:myfield1val_1= > 22
int:myfield1va2_0= > 111
int:myfield1va2_1= > 222
其他三批更新

1。替换为批处理更新
替换表(ID,这个行业的价值(1),'value1),(2,'value2),(3,'value3);
2。插入…关于重复密钥更新批处理
插入表(ID,myfield1,myfield2)值(1,'value11 ','value21),(2,'value12 ','value22),(3,'value12)。
三.临时表
如果表滴存在` tmptable `;
创建临时表tmptable(ID int(4)主键,这个行业的varchar(50));
插入tmptable值(1,'value1),(2,'value2),(3,'value3);
更新表,tmptable集mytable.myfield = tmptable.myfield哪里mytable.id = tmptable.id;
{替换为}和插入到}更新都依赖于主键或唯一值,并可能导致新记录操作的结构隐患。
替换操作本质上是第一次删除,然后为重复记录插入,如果更新的字段没有完全丢失,则设置默认值。
{ }只不过是更新重复的记录,而更改的字段只能遵循公式值。
临时表模式要求用户具有临时表的创建权限。
替换和插入具有最佳性能。当他们大的时候,他们是最好的。{结构具有普遍性,无结构性风险。
总结

以上就是本文的全部内容。希望本文的内容能给大家的学习或工作带来一定的帮助。如果有任何疑问,你可以留言。

tag:批量更新字段用于方法多个

相关内容