昨天评审代码时,一群大佬看到有同事的代码里使用了mysql的on duplicate key update语法实现了对数据的save or update,说这个语法有严重的性能和其他隐患问题,必须改成先查询一次分出新增集合和修改集合,再分别进行批量新增和批量修改的方式进行,并对批量修改时使用...
经常使用ON DUPLICATE KEY UPDATE来插入数据或者更新已存在的记录(不推荐,如性能问题),今天联调时发现使用到 MySQL 一个INSERT ... ON DUPLICATE KEY UPDATE的语法,明明只更新了两条记录,返回的影响行数竟然是 4,导致判断更新记录数出了问题,把 SQL 拿到 Navicat 上执行也是如此。 问题 原因 很奇怪,于是去网上搜...
ON DUPLICATE key update是根据索引字段是否重复来判断是否执行,如果重复则执行update,否则则执行insert。 优先级主键>唯一索引 当主键重复时则执行update 当主键不重复,唯一索引重复时也执行update 当主键和唯一索引值都不重复才执行insert PS:特殊情况,当主键重复执行update时,如果此时唯一索引字段与其他字段也重复则会...
(2) 注意语法on duplicate key update后面应为需要更新字段,不需要更新的字段不用罗列; (3) 相较于replace into(insert加强版,不存在时insert,存在时先delete后insert)虽然也能达到批量更新目的,但因为删除和添加需要重复维护索引,所以大批量比on duplicate key update性能要差,小量可忽略,自选为主。 foreach中(...
ON DUPLICATE KEY UPDATE name = '张三' -- 第二次执行,主键相同 INSERT INTO test_unique_key ( `id`, `NAME`, `term_id`, `class_id`, `course_id` ) VALUES ( '17b2ee26583000163e0b2e12010c2011', '您好Duplicate', '17b2ee26583000163e0b2e12010c2012', '17b2ee26583000163e0b2e12010c20010'...
1、测试on duplicate key update(是根据主键或唯一键如果有对应键则更新,没有对应键就插入,所以使用起来不会删除正常数据) mysql> insert into tbl_insert_tmp values(1,100,'a'),(2,200,'b'),(3,300,'c'); Query OK, 3 rows affected (0.01 sec) ...
on duplicate key update del_status= 0,age=values(age), hobby = values(hobby) 在向mysql中插入数据的时候,如果主键重复了,则执行更新语句。 固定字段的值可以直接写,比如删除状态del_status 默认就是0 非删除状态 需要根据传入的参数动态改变的字段,可以使用values(字段名)...
ON DUPLICATE KEY UPDATE 可以达到以下目的: 向数据库中插入一条记录: 若该数据的主键值/ UNIQUE KEY 已经在表中存在,则执行更新操作, 即UPDATE 后面的操作。 否则插入一条新的记录。 示例: Step1 . 创建表,插入测试数据 SET FOREIGN_KEY_CHECKS=0; ...
ON DUPLICATE KEY UPDATE语法的目的是为了解决重复性,当数据库存在某个记录时,执行这条语句会更新它,而不存在这条记录时,会插入它。 如何判断记录是否存在 如果插入的记录存在主键或唯一索引(例如:上例中name便是唯一索引),且表中存在该记录,那么就会认为该条记录存在,则便是更新语句。 2. ON DUPLICATE KEY UPDA...
昨天评审代码时,大佬同事看到我代码里使用了 mysql 的 on duplicate key update 语法实现了对数据的 save or update,说这个语法有严重的性能和其他隐患问题,让我必须改成先查询一次分出新增集合和修改集合,再分别进行批量新增和批量修改的方式进行,并对批量修改时使用 case when 的方式实现。