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

最快的插入方式,如果不存在,则在MySQL中获取id

最快的插入方式是使用INSERT INTO语句,如果不存在,则在MySQL中获取id可以使用以下方法:

  1. 使用LAST_INSERT_ID()函数:

在执行INSERT INTO语句后,可以使用LAST_INSERT_ID()函数获取插入行的自增id。

代码语言:txt
复制
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);

SELECT LAST_INSERT_ID();
  1. 使用SELECT MAX(id):

在执行INSERT INTO语句前,可以使用SELECT MAX(id)查询最大的id,然后加1作为新的id。

代码语言:txt
复制
SELECT MAX(id) + 1 INTO @new_id FROM table_name;

INSERT INTO table_name (id, column1, column2, ...)
VALUES (@new_id, value1, value2, ...);
  1. 使用INSERT INTO ... ON DUPLICATE KEY UPDATE:

在执行INSERT INTO语句时,如果发现已经存在相同的id,则使用ON DUPLICATE KEY UPDATE子句更新该行。

代码语言:txt
复制
INSERT INTO table_name (id, column1, column2, ...)
VALUES (id_value, value1, value2, ...)
ON DUPLICATE KEY UPDATE
column1 = VALUES(column1),
column2 = VALUES(column2),
...;

这些方法可以在MySQL中实现最快的插入方式,并且可以在不存在的情况下获取id。

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

相关·内容

MyBatis一次性批量插入几千条数据,为什么性能很差?

问题引入 近日,项目中有一个耗时较长Job存在CPU占用过高问题,经排查发现,主要时间消耗在往MyBatis批量插入数据。...Docs也提到过这个trick,如果要优化插入速度时,可以将许多小型操作组合到一个大型操作。...所以,如果非要使用 foreach 方式来进行批量插入的话,可以考虑减少一条 insert 语句中 values 个数,最好能达到上面曲线最底部值,使速度最快。...而实际上,MyBatis文档写批量插入时候,是推荐使用另外一种方法。...总结 如果MyBatis需要进行批量插入,推荐使用 ExecutorType.BATCH 插入方式如果非要使用 插入的话,需要将每次插入记录控制在 20~50 左右。

3.3K20

MyBatis批量插入几千条数据,请慎用Foreach

Docs][]也提到过这个trick,如果要优化插入速度时,可以将许多小型操作组合到一个大型操作。...所以,如果非要使用 foreach 方式来进行批量插入的话,可以考虑减少一条 insert 语句中 values 个数,最好能达到上面曲线最底部值,使速度最快。...一般按[经验][Link 6]来说,一次性插20~50行数量是比较合适,时间消耗也能接受。 重点来了。上面讲的是,如果非要用方式来插入,可以提升性能方式。...而实际上,MyBatis文档写批量插入时候,是推荐使用另外一种方法。...总结一下,如果MyBatis需要进行批量插入,推荐使用 ExecutorType.BATCH 插入方式如果非要使用插入的话,需要将每次插入记录控制在 20~50 左右。

26710
  • 求求你们了,MyBatis 批量插入别再乱用 foreach 了,5000 条数据花了 14 分钟。。

    存在CPU占用过高问题,经排查发现,主要时间消耗在往MyBatis批量插入数据。...Docs也提到过这个trick,如果要优化插入速度时,可以将许多小型操作组合到一个大型操作。...所以,如果非要使用 foreach 方式来进行批量插入的话,可以考虑减少一条 insert 语句中 values 个数,最好能达到上面曲线最底部值,使速度最快。...总结一下,如果MyBatis需要进行批量插入,推荐使用 ExecutorType.BATCH 插入方式如果非要使用 插入的话,需要将每次插入记录控制在 20~50 左右。...提供近 3W 行代码 SpringBoot 示例,以及超 4W 行代码电商微服务项目。 获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。 文章有帮助的话,在看,转发吧。

    44440

    MyBatis 批量插入几千条数据,请慎用Foreach

    近日,项目中有一个耗时较长Job存在CPU占用过高问题,经排查发现,主要时间消耗在往MyBatis批量插入数据。mapper configuration是用foreach循环做,差不多是这样。...Docs也提到过这个trick,如果要优化插入速度时,可以将许多小型操作组合到一个大型操作。...所以,如果非要使用 foreach 方式来进行批量插入的话,可以考虑减少一条 insert 语句中 values 个数,最好能达到上面曲线最底部值,使速度最快。...而实际上,MyBatis文档写批量插入时候,是推荐使用另外一种方法。...总结一下,如果MyBatis需要进行批量插入,推荐使用 ExecutorType.BATCH 插入方式如果非要使用 插入的话,需要将每次插入记录控制在 20~50 左右。

    1.2K10

    求求你们了,MyBatis 批量插入别再乱用 foreach 了,5000 条数据花了 14 分钟。。

    点击关注公众号,Java干货及时送达 近日,项目中有一个耗时较长Job存在CPU占用过高问题,经排查发现,主要时间消耗在往MyBatis批量插入数据。...Docs也提到过这个trick,如果要优化插入速度时,可以将许多小型操作组合到一个大型操作。...所以,如果非要使用 foreach 方式来进行批量插入的话,可以考虑减少一条 insert 语句中 values 个数,最好能达到上面曲线最底部值,使速度最快。...而实际上,MyBatis文档写批量插入时候,是推荐使用另外一种方法。...总结一下,如果MyBatis需要进行批量插入,推荐使用 ExecutorType.BATCH 插入方式如果非要使用 插入的话,需要将每次插入记录控制在 20~50 左右。

    99621

    求求你们了,MyBatis 批量插入别再乱用 foreach 了,5000 条数据花了 14 分钟。。

    近日,项目中有一个耗时较长Job存在CPU占用过高问题,经排查发现,主要时间消耗在往MyBatis批量插入数据。mapper configuration是用foreach循环做,差不多是这样。...Docs也提到过这个trick,如果要优化插入速度时,可以将许多小型操作组合到一个大型操作。...所以,如果非要使用 foreach 方式来进行批量插入的话,可以考虑减少一条 insert 语句中 values 个数,最好能达到上面曲线最底部值,使速度最快。...而实际上,MyBatis文档写批量插入时候,是推荐使用另外一种方法。...总结一下,如果MyBatis需要进行批量插入,推荐使用 ExecutorType.BATCH 插入方式如果非要使用插入的话,需要将每次插入记录控制在 20~50 左右。

    1.5K20

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

    MySQL自增ID,居然大部分人都搞错了?》作业题,有少量答对的人,但原理讲得不透,今天简单说下作业题中答案,以及相关知识点。...(2)如果报错,为什么呢? (3)如果不报错,得到数据是什么呢? 知其然,知其所以然。先系统性讲讲相关知识点,InnoDB自增键,插入,如何插入,以及插入之后发生了什么?...画外音:本文均以MySQL5.6,InnoDB引擎为例。 什么是插入? MySQL有一系列语句,可以往数据库新增数据,称作泛插入语句(insert-like statement)。...不同插入方式,对自增键影响是不一样。 画外音:自增键,是指auto_increment,大家应该都用得很多。 有几种插入方式?...画外音: (1)不包含递归子查询; (2)不包含insert … on duplicate key update… ; 例如,对于作业题中数据表: insert into t1(id, name)

    37320

    Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day17】—— 数据库4

    车票 面试题1:MySQL你用过INSERT插入方式都有哪几种? 1、普通插入语句 2、插入或更新 3、插入或替换 4、插入或忽略 面试题2:见过大量数据同时插入场景么?有哪些处理方式?...本篇从三个MySQL常见实际问题出发,来复习一下我们使用SQL时隐藏那些坑。   上车!正规车!关门,拿钉子钉上! 面试题1:MySQL你用过INSERT插入方式都有哪几种?   ...'%max_allowed_packet%';   修改此变量值:MySQL安装目录下my.ini(windows)或/etc/mysql.cnf(linux) 文件[mysqld]段...真是外行看热闹,内行看门道,这是程序员都能 Get 笑点,说明程序没有正确从数据库获取到我姓名,然后把空值格式化为了 null。...每日小结   今天我们复习了面试MySQL数据库中三个常见实战问题,你做到心中有数了么?对了,如果朋友也在准备面试,请将这个系列扔给他,如果他认真对待,肯定会感谢你!!

    1.2K20

    Guava Cache

    根据科普中国定义,缓存就是数据交换缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存查找需要数据,如果找到了则直接执行,找不到的话则从内存找。...换句话说,缓存就是以空间换时间,大部分应用在各种IO,数据库查询等耗时较长应用当中。 缓存原理 当获取数据时,程序将先从一个存储在内存数据结构获取数据。...如果数据不存在则在磁盘或者数据库获取数据并存入到数据结构当中。之后程序需要再次获取数据时,则会先查询这个数据结构。从内存获取数据时间明显小于通过IO获取数据,这个数据结构就是缓存实现。...由于特定工作流程,使用者必须在创建Cache或者获取数据时指定不存在数据时应当怎么获取数据。...LoadingCache loadingCache; //loadingCache public void initLoadingCache() { //指定一个如果数据不存在获取数据方法

    61530

    table_rows查询优化

    作为一个有担当敢于挑战dba,你们应该勇于说no,我觉得类似的需求不可避免但不应该是影响数据库性能因素,如果连这个都摆不平公司还能指望你干什么。...在innodb存储引擎count(*)函数是先从内存读取表数据到内存缓冲区,然后全表扫描获得记录行数。但是这种方式过于简单、直接暴力,对于小表查询比较合适,对于频繁大表查询就不适用了。...我们通常不是说走主键索引是最快,难道这个原则在这里不适用还是优化器出现bug。...如果你也想精确查询表行数,又想查询时间能尽可能短,这个时候我们就要想到max()和min()函数了,通常我们统计最大值和最小值都是很快返回结果。...3、我们知道MySQL自带一个统计信息,平时我们show命令之类都来源数据库统计表。如果我们Dev告诉我们,只需要模糊查询知晓表数据行数呢?

    45910

    MySQL数据库,索引数据结构及基本原理

    查询方式: 主键索引区:PI(关联保存时数据地址)按主键查询,普通索引区:si(关联 id 地址,然后再到达上面的地址)。...3.)所有的非终端结点可以看成是索引部分,结点中仅含其子树最大(或最小)关键字。 4.)B+ 树,数据对象插入和删除仅在叶节点上进行。...2)哈希索引 简要说下,类似于数据结构简单实现 HASH 表(散列表)一样,当我们在 mysql 中用哈希索引时,主要就是通过 Hash 算法(常见 Hash 算法有直接定址法、平方取中法、折叠法...、除数取余法、随机数法),将数据库字段数据转换成定长 Hash 值,与这条数据行指针一并存入 Hash 表对应位置;如果发生 Hash 碰撞(两个不同关键字 Hash 值相同),则在对应 Hash...本质都是:通过不断地缩小想要获取数据范围来筛选出最终想要结果,同时把随机事件变成顺序事件,也就是说,有了这种索引机制,我们可以总是用同一种查找方式来锁定数据。

    90510

    MyISAM按照插入顺序在磁盘上存储数据

    MyISAM按照插入顺序在磁盘上存储数据 聚族索引优点 可以把相关数据保存在一起。例如实现电子邮件时,可以根据用户ID来聚集数据,这样只需要从磁盘读取少数数据页就能获取某个用户全部邮件。...如果没有使用聚族索引,则每封邮件都可能导致一次磁盘I/O; 数据访问更快。聚族索引将索引和数据保存在同一个B-Tree,因此从聚族索引获取数据通常比在非聚族索引查找更快。...否则在插入新行时,可能需要大量移动数据行和“页分裂”问题。 为什么对主键加索引?...索引与加锁 InnoDB行锁是通过给索引上索引项加锁来实现,这一点MySQL与Oracle不同,后者是通过在数据块对相应数据行加锁来实现。...索引对于InnoDB非常重要,因为它可以让查询锁更少元组。 这点十分重要,InnoDB直到事务提交时才会解锁。如果查询不能使用索引,MySQL会进行全表扫描,并锁住每一个元组,不管是否真正需要。

    81400

    SpringBoot高级篇JdbcTemplate之数据插入使用姿势详解

    配置相关 使用SpringBoot进行db操作引入几个依赖,就可以愉快玩耍了,这里db使用mysql,对应pom依赖如 ...参数替换方式插入 这种插入方式,sql使用占位符?...插入并返回主键id 这个属于比较常见需求了,我希望获取插入数据主键id,用于后续业务使用; 这时就需要用KeyHolder /** * 新增数据,并返回主键id * * @return *...批量插入并返回主键id 上面还漏了一个批量插入时,也需要返回主键id,改怎么办? 直接看JdbcTemplate接口,并没有发现类似单个插入获取主键方式,是不是意味着没法实现呢?...,如果你想使用批量插入,并获取主键id,目前我没有找到可以直接使用接口,如果有这方面的需求,可以参考下我上面的使用姿势

    3.8K21

    mongoDB 文档插入

    在关系数据库,我们需要先定义表,然后才能将记录插入到文档,而在mongoDB,由于无需预定义模式,因此,在集合不存在情形下,直接insert就会生成新集合。...如果已经存在,则会在现有的集合内增加新文档。而且插入文档可以与集合上其他文档使用不同键或键值类型。本文主要描述mongoDB文档插入,供大家参考。...插入多个文档到一个集合(3.2版本有效),可选参数为w, wtimeout db.collection.insert(obj) 传统插入方式...对于文档插入操作,如果当前集合不存在,则自动创建该集合,否则直接插入文档 mongoDB中所有的插入操作都属于单个文档级别的原子性操作,即相当于关系型数据库行级锁 mongoDB在文档插入时候...,如果未显示指定_id列,则会自动添加该列(使用ObjectIds),并将该列作为该集合主键列 二、插入单个文档 //演示版本 db.version() 3.2.9 db.users.insertOne

    96530

    MySQL数据库操作教程

    其中数字长度或者是否有符号位都必须相同 但是,若是字符长度,则可以不同 */ --4.外键列和参照列必须创建索引,如果外键列不存在索引。!MySQL将自动创建索引!...外键约束参照操作及功能: 1.CASCADE:从父表删除或更新且自动删除或更新子表匹配行 2.SET NULL:从父表删除或更新行,并设置子表外键列为NULL (ps.如果使用该选项,...其中数字长度或者是否有符号位都必须相同 但是,若是字符长度,则可以不同 */ --4.外键列和参照列必须创建索引,如果外键列不存在索引。!MySQL将自动创建索引!...外键约束参照操作及功能: 1.CASCADE:从父表删除或更新且自动删除或更新子表匹配行 2.SET NULL:从父表删除或更新行,并设置子表外键列为NULL (ps.如果使用该选项,...在WHERE表达式,可以使用MySQL支持函数或运算符。 []括号内为可省略字符 查找就属于非常常见操作了。

    4.8K10

    Mysql MERGE引擎简介

    应用场景 如果需要把日志纪录不停录入MySQL数据库,并且每天、每周或者每个月都创建一个单一表,而且要时常进行来自多个表合计查询,MERGE表这时会非常简单有效。 三. ...3)INSERT_METHOD=LAST INSERT_METHOD指明插入方式,取值可以是:0 不允许插入;FIRST 插入到UNION第一个表; LAST 插入到UNION最后一个表。...Cookie问答 1)建表时UNION指明子表如果存在相同主键记录会怎么样? 相同主键记录会同时存在于MERGE,就像第三节例子所示。...比如第三节例子,如果执行 select * from t where id=1; 只会得到结果 +----+--------+ | id | log    | +----+--------...如果需要把日志纪录不停录入MySQL数据库,并且每天、每周或者每个月都创建一个单一表,而且要时常进行来自多个表合计查询,MERGE表这时会非常简单有效。

    1.2K10

    Spring Boot 2.X(七):Spring Cache 使用

    核心思想:当我们调用一个方法时会把该方法参数和返回结果最为一个键值对存放在缓存,等下次利用同样参数来调用该方法时将不会再执行,而是直接从缓存获取结果进行返回。 Cache注解 1....@Cacheable 根据方法对其返回结果进行缓存,下次请求时,如果缓存存在,则直接读取缓存数据返回;如果缓存不存在,则执行方法,并把返回结果存入缓存。一般用在查询方法上。...@CachePut 使用该注解标志方法,每次都会执行,并将结果存入指定缓存。其他方法可以直接从响应缓存读取缓存数据,而不需要再去查询数据库。一般用在新增方法上。...如果指定为 true,则方法调用后将立即清空所有的缓存 beforeInvocation 是否在方法执行前就清空,默认为 false。如果指定为 true,则在方法执行前就会清空缓存 4....,直接读取缓存值;如果缓存不存在,则调用目标方法,并将结果放入缓存 public UserEntity getOne(Long id) { System.out.println(

    88941

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

    如何防止MySQL重复插入数据,这篇文章会告诉你 我们这边可以根据插入方式进行规避: 1. insert ignore insert ignore 会自动忽略数据库已经存在数据(根据主键或者唯一索引判断...再次查看数据库就会发现仅插入id为4数据,由于数据库存在id为3数据所以被忽略。...如何防止MySQL重复插入数据,这篇文章会告诉你 2. replace into replace into 首先尝试插入数据到表, 1....如果发现表已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新数据。 2. 否则,直接插入新数据。...='那谁', age=23, address='甘肃省'; 首先我们将表数据恢复,然后在进行插入操作时,发现id为3数据发生了改变,进行了更新操作。

    94130
    领券