mysql语句:批量更新多条记录的不同值
来源:互联网 发布:六安职业技术学院网络 编辑:程序博客网 时间:2024/06/02 12:42
mysql更新语句很简单,更新一条数据的某个字段,一般这样写:
1
UPDATE
mytable
SET
myfield =
'value'
WHERE
other_field =
'other_value'
;
如果更新同一字段为同一个值,mysql也很简单,修改下where即可:
1
UPDATE
mytable
SET
myfield =
'value'
WHERE
other_field
in
(
'other_values'
);
这里注意 ‘other_values’ 是一个逗号(,)分隔的字符串,如:1,2,3
那如果更新多条数据为不同的值,可能很多人会这样写:
1
2
3
4
foreach
(
$display_order
as
$id
=>
$ordinal
) {
$sql
=
"UPDATE categories SET display_order = $ordinal WHERE id = $id"
;
mysql_query(
$sql
);
}
即是循环一条一条的更新记录。一条记录update一次,这样性能很差,也很容易造成阻塞。
那么能不能一条sql语句实现批量更新呢?mysql并没有提供直接的方法来实现批量更新,但是可以用点小技巧来实现。
1
2
3
4
5
6
7
UPDATE
mytable
SET
myfield =
CASE
id
WHEN
1
THEN
'value'
WHEN
2
THEN
'value'
WHEN
3
THEN
'value'
END
WHERE
id
IN
(1,2,3)
这里使用了case when 这个小技巧来实现批量更新。
举个例子:
1
2
3
4
5
6
7
UPDATE
categories
SET
display_order =
CASE
id
WHEN
1
THEN
3
WHEN
2
THEN
4
WHEN
3
THEN
5
END
WHERE
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行数据执行。
如果更新多个值的话,只需要稍加修改:
1
2
3
4
5
6
7
8
9
10
11
12
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'
END
WHERE
id
IN
(1,2,3)
到这里,已经完成一条mysql语句更新多条记录了。
但是要在业务中运用,需要结合服务端语言,这里以php为例,构造这条mysql语句:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$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
;
这个例子,有8条记录进行更新。代码也很容易理解,你学会了吗?
0 0
- mysql语句:批量更新多条记录的不同值
- mysql语句:批量更新多条记录的不同值
- mysql语句:批量更新多条记录的不同值
- mysql语句:批量更新多条记录的不同值
- mysql语句:批量更新多条记录的不同值
- mysql语句:批量更新多条记录的不同值
- mysql语句:批量更新多条记录的不同
- MySql 批量更新多条记录的不同值
- mysql 批量更新与批量更新多条记录的不同值
- mysql进阶(十四) 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- mysql 批量更新与批量更新多条记录的不同值实现方法
- 软件质量的三个层次
- Hibernate下DB2分页算法分析
- 014-背包问题-动态规划-《算法设计技巧与分析》M.H.A学习笔记
- Java NIO ServerSocketChannel
- Leetcode Letter Combinations of a Phone Number
- mysql语句:批量更新多条记录的不同值
- mysql数据库 优化技巧
- Leetcode Roman to Integer
- 常用有用的快捷键
- 45、JavaScript的运动----链式运动----回调函数fn参数的添加
- 剑指offer|数字在排序数组中出现的次数
- 服务端入门《六》(gdb 调试例子)
- 第五章 处理器拦截器详解——跟着开涛学SpringMVC
- FP-growth算法流程