首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

on duplicate key update id=last_insert_id(id) -插入真的发生了吗?

on duplicate key update id=last_insert_id(id) 是一条MySQL语句,用于在插入数据时,如果发生主键冲突(即插入的数据已存在),则执行更新操作。

具体来说,当执行插入操作时,如果插入的数据的主键与已存在的数据的主键冲突,MySQL会执行更新操作,将已存在的数据更新为插入的数据。同时,last_insert_id(id)函数会返回最后插入的自增ID值。

这条语句的作用是确保插入数据的唯一性,并且在发生冲突时执行更新操作。通过使用last_insert_id函数,可以获取到最后插入的自增ID值,方便后续操作。

这条语句的优势在于简化了开发过程,避免了手动判断数据是否存在的步骤,并且提供了一种便捷的方式来处理插入冲突。

应用场景:

  • 在需要插入大量数据的情况下,可以使用这条语句来避免重复插入数据,提高插入效率。
  • 当需要更新已存在数据的某些字段时,可以使用这条语句来实现更新操作。

腾讯云相关产品和产品介绍链接地址: 腾讯云提供了多种云数据库产品,其中包括云数据库MySQL、云数据库MariaDB等。这些产品提供了高可用、高性能、安全可靠的数据库服务,适用于各种规模的应用场景。

  • 云数据库MySQL:https://cloud.tencent.com/product/cdb_mysql
  • 云数据库MariaDB:https://cloud.tencent.com/product/cdb_mariadb

请注意,以上链接仅为示例,实际使用时应根据具体需求选择适合的产品。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ON DUPLICATE KEY UPDATE

ON DUPLICATE KEY UPDATE语句。        ...KEY UPDATE c=c+1; UPDATE table SET c=c+1 WHERE a=1;        ON DUPLICATE KEY UPDATE后面可以放多个字段,用英文逗号分割...使用ON DUPLICATE KEY UPDATE,最终如果插入了一个新行,则受影响的行数是1,如果修改了已存在的一行数据,则受影响的行数是2,如果值不变,则受影响行数是0。        ...可以在ON DUPLICATE KEY UPDATE后面使用VALUES(字段名)函数来表示即将插入的值,如果需要插入或更新多条数据,并且更新的字段需要根据其它字段来运算时,可以使用如下语句: INSERT...ON DUPLICATE KEY UPDATE新增或修改t数据后,可以通过last_insert_id()方法返回最后自动生成的值,如果是多条,实际测试是返回第一条数据自增的值。

1.7K00

插入时,究竟发生了什么?(非开车,纯技术交流)

画外音: (1)不包含递归的子查询; (2)不包含insert … on duplicate key update… ; 例如,对于作业题中的数据表: insert into t1(id, name)...以及,作业题中的如下SQL: insert into t1(name) values("shenjian"),("aaa"),("bbb") on duplicate key update count=...insert … on duplicate key update … 这种情况是最最复杂的,它可能导致,系统生成的自增值,在更新阶段用不上。...接下来: on duplicate key update ... 结果有一行插入冲突,实际是更新,导致224这个自增值并没有用上,于是就出现了奇怪的“自增值不连续”的怪异现象。...架构师之路-分享技术思路 相关文章: 《架构师之路,21年干货精选》 插入时,发生了什么,搞透了吗?谢转。

36720

深入分析Mybatis 使用useGeneratedKeys获取自增主键

也会经常使用on duplicate key update,来进行insertOrUpdate,来避免先query 在insert/update。用起来很爽,但是经常踩坑,还不知为何。...KEY UPDATE status = 0 不知道大家能不能发现其中的问题 分析 问题有两个 返回值result的判断错误 使用 on duplicate key 批量update...犯这种错主要在于想当然,不看文档 看下官网文档写的很清楚 With ON DUPLICATE KEY UPDATE, the affected-rows value per row is 1 if the...实现的原理主要就是数据库端返回一个 LAST_INSERT_ID。这个跟 auto_increment_id强相关。 我们看下autoincrementid的定义。...批量插入的时候只会返回一个id,这个id值是第一个插入行的AUTO_INCREMENT值。

2.2K10

ON DUPLICATE KEY UPDATE Statement

ON DUPLICATE KEY UPDATE语句 就像mysql官方文档中提到的那样,我们如果将a列设为UNIQUE唯一索引或者主键时,并且当前表已经存在了a=1的数据,对于这种情况,下面两条sql的结果是相等的...当然如果不满足上方条件,则会新增一条数据 INSERT INTO t1 (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1; UPDATE...KEY UPDATE c=c,b=b; 如果使用 mysql_real_connect()来连接mysql,修改的值没有变化时,还是返回1 并且如果我们触发了自增,也可以使用 LAST_INSERT_ID...DUPLICATE KEY UPDATE c=9; 从 MySQL 8.0.20开始,不推荐使用 VALUES ()来引用新的行和列,并且在将来的 MySQL 版本中可能会删除。...ON DUPLICATE KEY UPDATE c = m+n; 就先写这么多吧

74130

注意啦!mysql 唯一键冲突与解决冲突时的死锁风险

解决这个报错问题方法通常有以下三种: replace into insert on duplicate key update insert ignore into 3. replace into 3.1...执行转换后的操作 这里提到的转换模式有两种: 如果发生 duplicate key 冲突的索引是最后一个唯一索引,且没有外键引用,且不存在 delete trigger,使用 UPDATE ROW 的方式来解决冲突...insert into test (`value`, `idxvalue`, `ukvalue`) values (3, 6, 5) on duplicate key update value = 3,...死锁问题 既然 replace into 发生死锁的原因是 delete + insert 两步操作中插入意向锁与另一事务等待的临键锁循环等待造成的,那么,在发生唯一键冲突时只有一步 update 操作的...insert on duplicate update 语句是不是就不会发生死锁了呢?

3.9K41

MySQL插入重复后进行覆盖更新

', 1); 会发现出现报错,id_card=50001已经存在,不允许重复插入 那么我们只要在后面加上ON DUPLICATE KEY UPDATE语句,就可以完成重复之后的处理,如下 INSERT...', 1); ON DUPLICATE KEY UPDATE old_name = `name`, `name` = VALUES(`name`), update_time = now(); ON DUPLICATE...KEY UPDATE语句后面跟随着的就是发生重复之后的处理,这边的语句意味着 old_name = name,将曾用名设置为名字 name = VALUES(name),将名字设置为插入的新名字...,VALUES(column)代表插入的数据 update_time = now(),将更新时间设置为当前时间 ---- 这边额外再提示一个点,如果主键是使用自增序列的,使用触发ON DUPLICATE...KEY UPDATE语句后,序列会自动往后移动。

43820

如何防止MySQL重复插入数据,这篇文章会告诉你

,然后进行插入操作后发现id为3的数据发生了改变同时新增了id为4的数据。...如何防止MySQL重复插入数据,这篇文章会告诉你 3. insert on duplicate key update insert on duplicate key update 如果在insert into...语句的末尾指定了on duplicate key update + 字段更新,则会在出现重复数据(根据主键或者唯一索引判断)的时候按照后面字段更新的描述对该信息进行更新操作。...插入SQL如下: insert into person (id,name,age,address) values(3,'那谁',23,'甘肃省') on duplicate key update name...='那谁', age=23, address='甘肃省'; 首先我们将表中数据恢复,然后在进行插入操作时,发现id为3的数据发生了改变,进行了更新操作。

92330

mysql insert duplicate key update 死锁分析

背景 数据入库这块有离线和实时两套入库系统,写同一个db的同一批mysql表,两边用的都是insert into table on duplicate key update这种方式。...原因分析&解决方案 这里面分两种情况,一种是带主键的insert duplicate key update,一种是没有主键带唯一索引的insert duplicate key update。...1、带主键的insert duplicate key update 实时入库的batch大小是1w,离线入库的batch大小也是1w,为了提高入库效率 ,两边都开启了事务。...这种情况比较简单,处理方式有两种: 1、减少batch大小,减少了同一批数据中包含相同数据的概率,也就减少了死锁发生的概率 2、入库前对sql按照id排序,即使出现相同数据,只要保证顺序相同就不会出现死锁...如果插入数据时带上主键,那么就不会产生next-key锁,会退化到第一种情况(带主键的insert duplicate key update)。

4K11

MySQL 批量插入:如何不插入重复数据?

知识这个东西,看来真的要温故而知新,一直不用,都要忘记了 业务很简单:需要批量插入一些数据,数据来源可能是其他数据库的表,也可能是一个外部excel的导入 那么问题来了,是不是每次插入之前都要查一遍...~ 2、on duplicate key update 当primary或者unique重复时,则执行update语句,如update后为无用语句,如id=id,则同1功能相同,但错误不会被忽略掉。...例如,为了实现name重复的数据插入不报错,可使用一下语句: INSERT INTO user (name) VALUES ('telami') ON duplicate KEY UPDATE id =...id 这种方法有个前提条件,就是,需要插入的约束,需要是主键或者唯一约束(在你的业务中那个要作为唯一的判断就将那个字段设置为唯一约束也就是unique key)。...}, #{item.username}, #{item.mobileNumber} ) ON duplicate KEY UPDATE id = id 这里用的是

3.6K20

insert...on duplicate key update语法

基于这个问题,同事提出了insert...on duplicate key update这个办法,而我的第一反应是replace方法,因为我之前从来没用过insert...on duplicate key...: 1、首先创建一个包含id,name,age的表,其中id是主键; 2、在这个表中插入一条id=1的记录; 3、使用insert...on duplicate key update语法插入一条id=...,name,age) values (1,'yyz',18) on duplicate key update age=18; Query OK, 2 rows affected (0.00 sec)...=1的那条记录执行了: update test_1 set age=18 where id=1; 这就是insert...on duplicate key update语法的作用,可以分析到,当发生主键冲突的时候...当表中的某些字段中包含默认值的时候,replace操作插入不完全字段的记录,会导致其他字段直接使用默认值,而insert...on duplicate key update操作会保留该条记录的原有值。

2.5K40
领券