MySql 一次性插入多条记录 与 记录重复处理

一、如何一次插入多条记录

  • 开始的做法:

foreach ($data as $user) {
    $sql = " INSERT INTO `user` (`uid`,`uname`) VALUES (".$user['id'].",".$user['uname'].")";
    mysql_query($sql);
}

这种方法执行多条语句,请求数据库次数也就多,效率比较低。

  • 现在做法:

$sql = " INSERT INTO `user` (`uid`,`uname`) VALUES ";
foreach ($data as $user) {
    $sql .= "(".$user['id'].",".$user['uname']."),";
}
//去掉最后一个逗号
$sql = rtrim($sql, ',');
mysql_query($sql);

这样做只需请求一次数据库,效率相对较高。

二、避免插入重复记录

需要将多个field设置Unique,以便确定唯一性。

  • 使用 replace

REPLACE INTO 
org_tag_game 
( 
    tid, 
    gindex, 
    score, 
    status, 
    recmmend, 
    play_time, 
    add_count 
) 
VALUES 
    %s;

  • 使用 ignore

INSERT IGNORE INTO 
org_tag_game 
( 
    tid, 
    gindex, 
    score, 
    status, 
    recmmend, 
    play_time, 
    add_count 
) 
VALUES 
    %s;

以上两种方法都是碰到有重复记录时跳过。

  • 使用  ON DUPLICATE KEY UPDATE

INSERT INTO 
    org_tag_game 
( 
    tid, 
    gindex, 
    score, 
    status, 
    recmmend, 
    play_time, 
    add_count 
) 
VALUES 
( 
    %d, 
    %d, 
    %d, 
    1, 
    0, 
    0, 
    1 
) 
ON DUPLICATE KEY UPDATE 
    status = 1, 
    add_count = add_count + 1 
;

此方法碰到相同记录时,会执行性 ON DUPLICATE KEY UPDATE 后面的语句。

当然,还有另外一种方法就是,每次插入记录,先执行 select 语句判断该记录是否已经存在。

大家可以根据自己的需求来采取相应的方法。 

你可能感兴趣的:(update,on,replace,key,ignore,DUPLICATE,一次插入多条记录,如何处理重复数据)