zoukankan      html  css  js  c++  java
  • mysql ignore、replace、on duplicate key update

    1. 场景一:有一张表设置了name字段为唯一索引,在插入的时候,可能插入一条,也可能同时插入几条数据,但是由于name设置了唯一索引,所以如果批量插入的数据有name值重复,就会导致所有的插入失败。如果选择一条一条插入,可以进行判断表中是否已经存在相同的name值,但是消耗数据库资源,性能低。这个时候,可以选择 insert ignore into table (name,other_key) values ('xx', 'yy') ('ss', 'ff') 或者replace into 或者  on duplicate  name  update。具体的用法可以查询手册。ignore会忽略和已存在的记录相同的数据,不插入。replace into  会删除旧的记录,插入新的记录。
    2. 记录一个yii 项目中使用ignore的例子
      1 $table = Nutrient::tableName();  // 表:nutrient,  name是唯一索引,  表中的字段在SQL语句中不需要加引号,待插入的值如果有特殊符号可以使用双引号括起来,使用单引号好像不行会冲突因为mysql会自动给value值加上单引号。这里双引号需要转义
      2             $sql = "INSERT IGNORE INTO {$table} (name, rl, las, gai, dbz, su, mei, zf, ys, tei, shhf, wsfc, meng, ssxw, wsse, xin, wssa, dgc, tong, lb, jia, ling, shc, la, xi, type) VALUES ";
      3 // 待插入的数据有多条,并且可能有的name是数据表已存在的,所以使用ignore关键字。避免数据库报错,导致插入新数据失败。
      4             foreach ($dataFromApi['data'] as $k => $v) {
      5                 // 把 values 的值拼接上,执行一次插入操作,使用model需要多次链接数据库。
      6                 $sql .= "("{$v['name']}",{$v['rl']},{$v['las']},{$v['gai']},{$v['dbz']},{$v['su']},{$v['mei']},{$v['zf']},{$v['ys']},{$v['tei']},{$v['shhf']},{$v['wsfc']},{$v['meng']},{$v['ssxw']},{$v['wsse']},{$v['xin']},{$v['wssa']},{$v['dgc']},{$v['tong']},{$v['lb']},{$v['jia']},{$v['ling']},{$v['shc']},{$v['la']},{$v['xi']},"{$v['type']}"),";
      7             }
      8             $sql = rtrim($sql, ',');
      9             $insert = Yii::$app->db1->createCommand($sql)->execute();
  • 相关阅读:
    Accept Xcode/iOS License to run git
    Public Key Retrieval is not allowed
    No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer
    HttpURLConnection调用Restful接口
    关于线程同步(7种同步方式)
    面试(初级)
    面试题(高级)
    RedisTemplate和StringRedisTemplate的区别 RedisTemplate几种序列化方式比较
    Redis 3.2.1集群 —— Redis-trib.rb工具详解(含原理)
    Redis 3.2.1集群 —— CLUSTER MEET ip port
  • 原文地址:https://www.cnblogs.com/bneglect/p/12577579.html
Copyright © 2011-2022 走看看