mysql 批量更新多条记录(且不同值)的实现方法

mysql更新语句很简单,更新多条数据的某个字段为相同值,一般这样写:

UPDATE table_name SET field = ‘value‘ WHERE condition;

更新多条数据为不同值,你可以:

foreach ($display_order as $id => $ordinal) {
    $sql = "UPDATE categories SET display_order = $ordinal WHERE id = $id";
    mysql_query($sql);
}

这样一条条进行,虽然性能差,还容易阻塞。

你也可以用一些SQL的小技巧:

UPDATE table_name
    SET field = CASE id
        WHEN 1 THEN ‘value‘
        WHEN 2 THEN ‘value‘
        WHEN 3 THEN ‘value‘
    END
WHERE id IN (1,2,3);

然而这样在记录量很大的情况下仍然性能很差,然后我们考虑使用:

REPLACE INTO table_name (id,data) VALUES (1,‘2‘),(2,‘3‘),...(x,‘y‘);
INSERT INTO table_name (id,data) VALUES (1,‘2‘),(2,‘3‘),...(x,‘y‘) ON DUPLICATE KEY UPDATE data=VALUES(data);

REPLACE INTO  操作本质是对重复的记录先 DELETE 后 INSERT,如果更新的字段不全会将缺失的字段置为缺省值;INSERT INTO 则是只更新重复记录,不会改变其它字段。

如果这样性能仍显不足,我们还可以通过创建临时表来再次提速:

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;

创建临时表,更新临时表,从临时表更新。

时间: 2024-10-29 10:46:52

mysql 批量更新多条记录(且不同值)的实现方法的相关文章

mysql语句:批量更新多条记录的不同值[转]

mysql语句:批量更新多条记录的不同值[转] mysql语句:批量更新多条记录的不同值 mysql更新语句很简单,更新一条数据的某个字段,一般这样写: 1 UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value'; 如果更新同一字段为同一个值,mysql也很简单,修改下where即可: 1 UPDATE mytable SET myfield = 'value' WHERE other_field in ('o

mysql进阶 十四 批量更新与批量更新多条记录的不同值实现方法

mysql 批量更新与批量更新多条记录的不同值实现方法 在mysql中批量更新我们可能使用update,replace into来操作,下面详细介绍mysql批量更新与性能. 批量更新 mysql更新语句很简单,更新一条数据的某个字段,一般这样写: UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value'; 如果更新同一字段为同一个值,mysql也很简单,修改下where即可: UPDATE mytable SE

mysql 批量更新与批量更新多条记录的不同值实现方法

在mysql中批量更新我们可能使用update,replace into来操作,下面来给各位详细介绍mysql 批量更新与性能吧! mysql更新语句很简单,更新一条数据的某个字段,一般这样写: 复制代码代码如下: UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value'; 如果更新同一字段为同一个值,mysql也很简单,修改下where即可: 复制代码代码如下: UPDATE mytable SET myfie

mysql语句:批量更新多条记录的不同

mysql更新语句很简单,更新一条数据的某个字段,一般这样写: UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value'; 如果更新同一字段为同一个值,mysql也很简单,修改下where即可: UPDATE mytable SET myfield = 'value' WHERE other_field in ('other_values'); 这里注意 ‘other_values’ 是一个逗号(,)分隔的字符串

mysql 批量更新

bs_user 表,我们叫他 bu表, 字段user_id,len_id, think_wellUser 表,我们简称为tw表,中的user_id ,len_id 其中tw表的user_id 是bu表user_id的子集.bu表的len_id有乱码,tw表len_id没有乱码, 需求是将bu乱码的len_id,更新 采用如下sql语句, update bs_user,think_wellUserset bs_user.len_id=think_wellUser.len_idwhere bs_us

一条insert语句批量插入多条记录 AND 多条件游标更新 变CASE WHEN更新法提高速度

一条insert语句批量插入多条记录 常见的insert语句,向数据库中,一条语句只能插入一条数据: insert into persons (id_p, lastname , firstName, city ) values(204,'haha' , 'deng' , 'shenzhen'); (如上,仅插入了一条记录) 怎样一次insert插入多条记录呢? 使用示例: insert into persons (id_p, lastname , firstName, city ) values

使用SQL语句逐条更新每条记录

declare @i int declare @j int declare @phone varchar(20) set @j=1 select @i=count(*) from LatestLocation DECLARE L_cursor CURSOR FOR SELECT Phone FROM LatestLocation OPEN L_cursor while @j<[email protected] begin FETCH NEXT FROM L_cursor into @phone

php实现只保留mysql中最新1000条记录

这篇文章主要介绍了php实现只保留mysql中最新1000条记录的方法和相关示例及数据库结构,十分的全面,有需要的小伙伴可以参考下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 <?php mysql_connect("localhost","root","root"); mysql_select_db("test"); //保留最新的1000条记录 $

多线程并发更新同一条记录

有一个任务表,每个任务有n个事项要并发处理, 每个事项完成时需要更新已完成数,即finished+1,当n个事项全部处理完成即整个任务完成时需要做任务的统计工作. 数据库通过行级锁来保证并发更新准确性,测试代码如下: public class Concurrency {          /**执行更新语句,根据commitImmediately决定是否立即提交*/     public static int executeUpdate(String sql, boolean commitImm