高并发下获取mysql自增主键id的解决方案

看,未来 看,未来     2023-03-02     215

关键词:

方案一:

跟我来:
1、开一个存储过程(不为啥,最近喜欢)
2、开一个事务(要上锁了)
3、某张表中有某行无关数据,或者就直接再你要用的这张表里吧,省的跳来跳去的。
4、给那行数据上行锁
5、插入自增数据行
6、获取自增数据行,max足矣,这个操作时间复杂度是 O(1) 的
7、提交事务

这个方案我试了,但是在C++操作MySQL时我不知道要怎么拿第二个结果集,查了一小时,自己也尝试了好久,也没找到能解决的把办法,于是我又想了第二个办法。

方案二:

业务锁。对那个业务上锁。大家不要闻锁色变,其实上锁解锁真没多少开销,开销大的是锁竞争。
而且上面那个方案也要上锁,只不过一个锁是在业务层面,一个是在数据库层面。但是数据库锁住了,业务不也得跟着锁着嘛。


接下来就闲扯了。
一般用在啥场景呢?像注册,这种需要自动生成账号类的场景用自增主键,因为自增主键我也不是很喜欢,主键还是要有自己的意义的。不过这类业务,如果由用户自己输入账号,亦或是系统自己随机生成,都没有自增来的快,毕竟林子大了,就容易主键冲突。

网上也有不少帖子写了一大堆的解决方案,也讲了存储过程,但是很少看到有解释为什么要存储过程的。
上面那个解决方案一,精髓就在第四步。

mysql自增主键怎么用(代码片段)

导航自增主键怎么设置MySQL是怎么保存自增主键的自增主键的修改机制造成自增主键不连续的几种情形自增主键和UUID及随机ID比较自增主键的好处自增主键的坏处UUID及随机ID参考文章自增主键怎么设置通常,自增主键的设置... 查看详情

mysql自增主键怎么用(代码片段)

导航自增主键怎么设置MySQL是怎么保存自增主键的自增主键的修改机制造成自增主键不连续的几种情形自增主键和UUID及随机ID比较自增主键的好处自增主键的坏处UUID及随机ID参考文章自增主键怎么设置通常,自增主键的设置... 查看详情

mysql对自增主键id进行重新排序

参考技术A一、不清空数据原理:删除原有的自增ID,重新建立新的自增ID。二、如果曾经的数据都不需要的话,可以直接清空所有数据,并将自增字段恢复从1开始计数 查看详情

mysql中的自增主键id自增到最大,使用完id会发生什么,怎么办?(代码片段)

...达到最大值场景二:测试自增ID即将达到最大值总结解决方案扩展扩展1:修改字段的数据类型,建议使用modify用法扩展2:Altertable的底层原理背景之前的学习和实践上了解到的是:SQL插入异常,主键冲突错... 查看详情

mysql中的自增主键id自增到最大,使用完id会发生什么,怎么办?(代码片段)

...达到最大值场景二:测试自增ID即将达到最大值总结解决方案扩展扩展1:修改字段的数据类型,建议使用modify用法扩展2:Altertable的底层原理背景之前的学习和实践上了解到的是:SQL插入异常,主键冲突错... 查看详情

如何使用 Hibernate 在 MySQL 中获取自增主键值

】如何使用Hibernate在MySQL中获取自增主键值【英文标题】:Howtogettheauto-incrementprimarykeyvalueinMySQLusingHibernate【发布时间】:2011-09-1420:15:03【问题描述】:我正在使用Hibernate访问MySQL,并且我有一个带有自动增量主键的表。每次我在... 查看详情

mybatis获取插入自增主键

只需在插入语句上配置:    useGeneratedKeys="true"    keyProperty="id"<insert id="insertSelectiveMemberAcc" useGeneratedKeys="true" keyProperty="id"  查看详情

postgresql自增主键的用法以及在mybatis中的使用(代码片段)

...产品进行数据库由MySql迁移至PostgreSQL过程中,在MySql自增主键到PostgreSQL自增主键的迁移适配中,历经了一点曲折,最终通过跳坑和出坑的过程也算解决了问题,特此记录,给遇到类似的同学做过经验总结。什... 查看详情

day903.自增主键不能保证连续递增-mysql实战(代码片段)

自增主键不能保证连续递增Hi,我是阿昌,今天学习记录的是关于自增主键不能保证连续递增的内容。MySql保证了主键是自增,但不相对连续;帮助开发人员快速识别每个行的唯一性,并提高查询效率。自增主... 查看详情

mysql中的自增主键id自增到最大,使用完id会发生什么,怎么办?(代码片段)

...达到最大值场景二:测试自增ID即将达到最大值总结解决方案扩展扩展1:修改字段的数据类型,建议使用modify用法扩展2:Altertable的底层原理背景之前的学习和实践上了解到的是:SQL插入异常,主键冲突错... 查看详情

使用mybatis插入自增主键id的数据后返回自增的id

...到用户注册的功能需要用到用户ID,但是用户ID是数据库自增生成的,这种情况上网查询后使用下面的方式配置mybatis的insert语句可以解决:1<insertid="insert"keyProperty="id"useGeneratedKeys="true"?parameterType="com.demo.domain.User">?2insertintoUser... 查看详情

mysql使用onduplicatekeyupdate时导致主键不连续自增

...是会有一个影响:默认情况下,每次更新都会更新该表的自增主键ID,如果更新频率很快,会导致主键ID自增的很快,过段时间就超过数字类型的的范围了解决这个问题,有两种方式:(实际目前的方式就是把自增主键ID设置为bigin... 查看详情

被问懵了:mysql自增主键一定是连续的吗?(代码片段)

...唯一索引c,普通字段d)如果你的业务设计依赖于自增主键的连续性,这个设计假设自增主键是连续的。但实际上,这样的假设是错的,因为自增主键不能保证连续递增。一、自增值的属性特征:1.自增主... 查看详情

如何获取数据表中自增主键的值

一、MySql数据库  当向数据库中插入一条数据的时候,默认是拿不到自增主键的值的,需要设置如下两个属性才可以拿到主键值!  设置userGeneratedKeys属性值为true:使用自动增长的主键。使用keyProperty设置把主键值设置给哪一... 查看详情

面试官竟然问我订单id是怎么生成的?难道不是mysql自增主键?

一个美女面试官坐到我的对面,发光logo的MacBook也挡不住她那圆润可爱的脸庞。程序媛本就稀有,美女面试官更是难寻。具体长什么样呢?就像下面这样:这么温柔可爱的面试官,应该不会为难我吧。嗯,应该是的,毕竟我这么... 查看详情

关于sql优化,你需要掌握这些

1、一张表,里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把Mysql重启,再insert一条记录,这条记录的ID是18还是15?(1)如果表的类型是MyISAM,那么是18因为MyISAM表会把自增主键的最大ID记录到数据文件里,... 查看详情

mysql如何设置自增主键

参考技术A1.主键语法①创建时:createtablesc(studentnoint,courseidint,scoreint,primarykey(studentno));②修改时:ALTERTABLEtable_nameADDCONSTRAINTpk_namePRIMARYKEY(列名);前提是原先没有设置主键。2.外键语法①创建时:createtablesc(studentnoint,courseidint,scoreint,... 查看详情

mybatis(mapper映射文件)

   <!--parameterType:参数类型,可以省略,获取自增主键的值:mysql支持自增主键,自增主键值的获取,mybatis也是利用statement.getGenreatedKeys();useGeneratedKeys="true";使用自增主键获取主键值策略keyProperty;指定对应的主... 查看详情