MySql 一次性插入多条记录 与 记录重复处理
博客专区 > kadifu 的博客 > 博客详情
MySql 一次性插入多条记录 与 记录重复处理
kadifu 发表于3年前
MySql 一次性插入多条记录 与 记录重复处理
  • 发表于 3年前
  • 阅读 73
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: 在做项目的过程中,很多时候我们要向数据库中插入多条记录。这里有两个问题: 一、如何快速插入记录? 二、插入的记录数据中已经存在该怎么处理? 我是新手,在这里把自己常用的方法写出来,与大家共勉!

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

  • 开始的做法:

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 语句判断该记录是否已经存在。

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

共有 人打赏支持
粉丝 0
博文 7
码字总数 1568
×
kadifu
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: