mysql 批量replace into_replace into 批量更新

1、.replace into 批量更新

$sql = replace into test_tbl (id,dr) values (1,'2'),(2,'3'),...(x,'y');

test_tbl 为表名

id 对应的主键或者判断的唯一值,最好是主键,这样数据库检索较快

dr 对应这的字段,有多个字段可以在后面加上

2、insert into ...on duplicate key update批量更新

$sql = insert into test_tbl (id,dr) values (1,'2'),(2,'3'),...(x,'y') on duplicate key update dr=values(dr);

该方法只update重复记录,不会改变其他字段

3、创建临时表,先更新临时表,然后从临时表中update

create temporary table tmp(id int(4) primary key,dr varchar(50));

insert into tmp values (0,'gone'), (1,'xx'),...(m,'yy');

update test_tbl, tmp set test_tbl.dr=tmp.dr where test_tbl.id=tmp.id;

注意:这种方法需要用户有temporary 表的create 权限。

这方法涉及到两个数据表的操作,也有可能造成大压力

4、使用mysql 自带的语句构建批量更新

mysql 实现批量 可以用点小技巧来实现:

UPDATE yoiurtable

SET dingdan= CASEid

WHEN1 THEN 3WHEN2 THEN 4WHEN3 THEN 5

ENDWHERE id IN (1,2,3)

这句sql 的意思是,更新dingdan 字段,如果id=1 则dingdan 的值为3,如果id=2 则dingdan 的值为4…… where部分不影响代码的执行,但是会提高sql执行的效率。确保sql语句仅执行需要修改的行数,这里只有3条数据进行更新,而where子句确保只有3行数据执行。

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

UPDATE categories

SET dingdan= CASEid

WHEN1 THEN 3WHEN2 THEN 4WHEN3 THEN 5

END,title= CASEid

WHEN1 THEN 'New Title 1'WHEN2 THEN 'New Title 2'WHEN3 THEN 'New Title 3'

ENDWHERE id IN (1,2,3)

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

该方法就是在数据进行处理时适合使用,能够让人清晰处理过程

对于数据库操作来说,最好的还是原生的sql语句执行效果最好,并且没有多次连接数据库的操作才好,所以优先的推荐还是方法2,insert into ...on duplicate key update

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值