联系QQ 284710375
首页 > 技术分享 > MySQL
收藏

MySQL一条SQL语句实现批量更新数据2019-08-16 10:58:48

大潇博客 原创文章,转载请标明出处

在MySQL中如何实现一条SQL语句实现批量更新,MySQL没有提供直接的方法实现批量更新,但我们可以通过一些小技巧来实现


假设有一张雇员表

create table emp(

id int primary key auto_increment, /*编号*/

name varchar(60) not null,/*姓名*/

sex varchar(30) not null,/*性别*/

salary int(8) not null/*薪水*/

);


添加几条数据

insert into emp values(1,"刘一","女",5000);

insert into emp values(2,"陈二","女",6000);

insert into emp values(3,"张三","男",8000);

insert into emp values(4,"李四","男",8000);

insert into emp values(5,"王五","男",7000);


现在要给他们涨薪水,已知每个人的编号,女生每人涨300,男生每人涨五百


这里使用case when这个小技巧来实现批量更新,语法为:

UPDATE mytable SET 

myfield = CASE id 

        WHEN 1 THEN 'value1'

        WHEN 2 THEN 'value2'

        WHEN 3 THEN 'value3'

END 

WHERE id IN (1,2,3);

上面语句大概意思是,更新mytable表的myfield字段,如果id=1则myfield的值为value1,如果id=2则myfield的值为value2,如果id=3则myfield的值为value3


这里的where部分不影响代码的执行,但是会提高sql执行的效率。

确保sql语句仅执行需要修改的行数,这里只有3条数据进行更新,而where子句确保只有3行数据执行。


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

UPDATE mytable SET 

myfield1 = CASE id 

        WHEN 1 THEN 'value1'

        WHEN 2 THEN 'value2'

        WHEN 3 THEN 'value3'

END,

myfield2 = CASE id 

        WHEN 1 THEN 'value4'

        WHEN 2 THEN 'value5'

        WHEN 3 THEN 'value6'

END 

WHERE id IN (1,2,3);


由此便可写出上文需求的SQL语句了

update emp set

salary = case id

when 1 then 5300

when 2 then 6300

when 3 then 8500

when 4 then 8500

when 5 then 7500

end

where id in (1,2,3,4,5);



到这里,已经完成一条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;


打赏

阅读排行

大家都在搜

博客维护不易,感谢你的肯定
扫码打赏,建议金额1-10元
  • 15601023311