数据库,事务,字段递增。插入新数据时先查询某个字段最新的值,然后递增

黄贤达 发布于 2020/07/13 10:36
阅读 255
收藏 0

各位大佬,数据库插入新数据时某个字段(假设叫A字段)需要系统自动生成,则需要先查询数据库中A字段最新的生成的值,然后递增。例如查询到A字段最新的值是2020071301,则此次插入的值是2020071302,下次插入的值是2020071303,以此类推。我现在遇到的问题是:在并发的情况下查询到A字段最新的值,然后递增,再插入的过程中,怎么保证这个A字段生成的值唯一,谢谢各位大佬

加载中
0
foker_b
foker_b

在一个进程中么,可以将查询和插入这部分用synchronized锁起来;

多个进程中可以将生成值的操作交给redis, incr key, redis单线程,数值递增是原子操作,不存在id重复问题

黄贤达
谢谢:grin:
0
15------07
15------07

不是高并发的情况下可以使用 insert …… select 语法,高并发就另说了

0
魔力猫
魔力猫

Oracle这种支持序列的数据库,用序列。或者也可以在程序里面实现,只要确认,每次调用的原子性和递增就是。多机环境,每个实例增加一个实例本身的标记。

0
小学君

1、Java方法加synchronized;

2、记录加锁,for update;

3、改用Redis原子加

0
f
freezingsky

如果你非在DB操作,DB建立一个序号生成的表,每次操作,加行锁,然后本地每次拿 ,都拿出一个范围区间的序号就可以了

0
sprouting
sprouting

感觉这个是埋坑操作,直接DB操作不合适吧,我记得数据库这个自增是有限制的,到了多少就不能自增了,还是外部传入比较好,在redis中生成,一直取redis中的

0
wangshunya
wangshunya

要么加锁,要么适用update table_name set a = a+ 1 这种方式

OSCHINA
登录后可查看更多优质内容
返回顶部
顶部