首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

mybatis插入数据后返回主键ID详解

1.场景介绍: ​ 开发过程中我们经常性的会用到许多的中间表,用于数据之间的对应和关联.这个时候我们关联最多的就是ID,我们在一张表中插入数据后级联增加到关联表中.我们熟知的mybatis在插入数据后返回的是插入成功的条数...2.插入数据返回主键ID方法(一) 在映射器中配置获取记录主键值 xml映射: 在xml中定义useGeneratedKeys为true,返回主键id的值,keyProperty和keyColumn...-- 插入数据:返回记录主键id值 --> ...= " + student.getId()); // 执行添加操作之后通过Java对象获取主键属性值 添加批量记录时返回主键ID 如果希望执行批量添加并返回各记录主键字段值,只能在xml映射器中实现,...-- 批量添加数据,并返回主键字段 --> insert into

12.1K30

Mybatis使用generatedKey在插入数据时返回id始终为1,id实际返回到原对象当中的问题排查

今天在使用数据库的时候,遇到一个场景,即在插入数据完成后需要返回此数据对应的主键id,但是在使用Mybatis中的generatedKey且确认各项配置均正确无误的情况下,每次插入成功后,返回的都是...1,而不是最新的Id。...int表示的是插入操作受影响的行数,而不是指的增长id,那么返回的id到底去哪里了呢?...通过下面的Debugg我们知道id返回到testGenKey的原对象中去了。 举例示范配置 数据库示例表  generator的配置文件 <?...null : sex.trim(); } } 测试及Debugg 编写测试方法测试插入 插入成功后观察对应的变量对应的值 总结:调用Insert后插入操作之后,所得到增长Id被赋值到原对象当中

1.6K10

id用完怎么办

我们知道mysql中存在很多id,然后不断增长,由于只要给id定义了这个数的字节长度,那么他就有了上限,比如无符号整型(unsigned int)是4个字节,因此他的上限是2^32-1, 表定义增值...8个字节的bigint unsigned InnoDB系统row_id 如果你创建的InnoDB表没有指定主键,那么InnoDB会给你创建一个不可见的,长度为6字节的row_id,InnoD维护了一个...dict_sys.row_id,所有无主键的InnoDB表,每插入一行数据,就会把这个值赋值给row_id,然后把dict_sys_row_id的值加1....,但是如果global_query_id达到上限之后,就会继续从0开始计算,理论上还是会出现同一个binlog有相同的xid,又因为global_querey_id定义为8个字节,的上限是2^64-...thread_id 线程id是我们最常见的一种id,我使用show processlist的第一列计数就是thread_id, thread_id的逻辑很好理解,系统保存一个全局变量thread_id_conuter

1.1K20

MySQL replace into导致的id问题

// MySQL replace into导致的id问题 // 今天线上遇到一个问题,挺有意思,这里记录一下希望对大家有所帮助。...某个表中,只有一条记录,发生高可用切换之后,id的值发生了变化,主从的id值不一致,导致数据写入报主键冲突的错误。...=3,age=3这条记录,然后插入id=6,age=3这条记录,增值变为7....此时如果主从库发生切换,那么新插入到从库中的id=6的值就会发生主键冲突了,显示插入不进去,这是我们不想看到的。 那么为什么从库上的增值和主库不一致呢?...,从库的id比主库的小,当主从发生切换的时候,这个问题就比较严重了,有些数据写入的时候,就会报错了。

7.1K20

MySQL 主键 ID 会用完吗?

MySQL 主键 ID 会用完吗?...首先我们一般创建 MySQL 数据表的时候,大部分情况下会创建一个主键ID 的字段,可能你的建表语句如下: CREATE TABLE IF NOT EXISTS `tb`( `id` INT...所以 在 MySQL 中 ID 是会用完的。那么问题来了,加入他的 ID 用完会发生什么事呢? 我们来验证下。...如果会那么久需要创建 8 字节的 INT 类型了,他的值最大是 2^64-1 那么问题又来了,你说 我有些业务是不需要主键 、不需要编号,我不创建这个字段,就好了,这样想恭喜你 回答错误....总结: ID 用完 会报主键冲突、数据插入失败。 不指定主键、默认创建的 row_id 会 覆盖原有的数据。

9.5K20

MongoDB 实现 ID 的最佳实践

但有时使用 ID 可能更符合某些应用场景的需求,例如:兼容现有系统某些系统需要将数据迁移到 MongoDB 时,如果原来使用的是 ID 作为主键,在迁移过去之后需要保持主键的特点。...这在需要手动输入或与用户交流时特别有用,因为 ID 比 ObjectId 更短、更易读。虽然 MongoDB 不支持 ID 的功能,但我们仍然可以使用其他方式来实现此功能。...假设在 seq_value 后,由于某种意外(例如向 posts 集合插入文档时出错)导致插入失败,那么此次的 seq_value 就不会成功保存到 posts 集合中,从而使序列号出现空洞。...通过使用事务,我们可以确保整个操作的原子性:要么所有相关操作(包括 seq_value 的和文档的插入)都成功执行,要么在发生任何问题时回滚所有更改。...小结本文详细探讨了在 MongoDB 中实现 ID 序号的方法。

21641

MySQL ID的几个小问题

MySQL 重启后ID从哪儿开始 例如当前表中有ID为1,2,3三条记录,把3删除,重启MySQL,新插入记录的ID从哪儿开始? 很多人会认为从4开始,实际是从3开始。...手动插入ID后,下次插入增值是多少 例如当前的ID为4,新插入记录时,手动指定ID为10,下次使用增方式插入时,ID是 11。...ID增值 = 当前最大ID + 1 在插入新记录时,就已经计算得出了新的ID值 实验 创建表 tb2,ID: create table tb2(id int unsigned auto_increment...增值用完后怎么办 无符号 int 的最大值为 4294967295,增值达到此值后,就不变了,新插入记录时就会报错: Duplicate entry '4294967295' for key 'PRIMARY...删除最大ID值对ID值没有影响,但MySQL重启之后有影响,不会使用之前的ID值,而是使用最大ID+1,因为ID值是存在内存中,重启后需要重新计算。 ID用完后就不变了。

7.8K21

id用完了怎么办

id用完了怎么办 阅读本文大概需要2分钟 1. 表定义id 我们通常会把主键设置成id,主键id的最大值是 (bigint unsigned)。...如果主键id用完了的话,再次插入的时候会报错 Duplicate entry for key 'PRIMARY' 2....InnoDB系统row_id 如果创建的表使用InnoDB引擎,但是没有指定主键的话。InnoDB会创建一个不可见,长度为6个字节的row_id。...InnoDB维护了一个全局变量dict_sys.row_id,所有无主键的InnoDB表,每插入一行数据,会将当前时刻的dict_sys.row_id 赋值给row_id,然后1。...row_id 的上限是 ,row_id 达到上限后,会归0,然后重新循环,则新插入的数据会覆盖之前的数据(如果row_id一致)。 3. InnoDB trx_id trx_id, 事务id

1K20
领券