数据库ID需要提前获取


场景: 批量插入一些数据之后需要获取每一个数据对应的自增id。此时无论是mybatis还是mybatisplus生成的mapper都没有提供这样可以批量插入同时还能获取到批量插入数据后对应的逐渐id的。那在这种情况下,我们可能会再查询一遍数据库,把刚才插入的数据在查出来,比如按照时间限定、按照某些唯一的数据标识进行过滤查询出来,但这样又显得很麻烦和多余。

例如 插入的数据是 (“a”,“aone”),(“b”,“two”) 期望获取到的是 (1,“a”,“aone”),(2,“b”,“two”)。但是我们往往获取到的是 [1,2] 但并不能知道1对应的是a ,2对应的是b .因为 mysql 并没有保证批量插入的时候返回的id是按照书写的顺序返回的。万一是乱着的,那我们就会获取到错误的数据。

我同事今天想到一个解决方案,我觉得值得记录一下。那就是摒弃自增id,转而自定义主键或者使用一个自定义的唯一键来进行关联。也就是说,我们在插入数据库的时候就提前生成一个唯一的标记。比如用一个uuid 。这样其他表关联和使用的时候就不在使用主键id .而是使用这个uuid 了。
比如 (“a”,“aone”),(“b”,“two”) 就直接再入库的时候就写成 (“一”,“a”,“aone”),(“二”,“b”,“two”) 后面就都用 “一”,“二” 进行关联了。


评论