如何在没有并发问题的情况下实现第二个非唯一标识符?

balp4ylt  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(308)

给定这个mysql表 references 哪里 uid 是主键和唯一键:

uid |reference_id | foreign_id
1   | 1           | 123  
2   | 1           | 234
3   | 2           | 345
4   | 2           | 456
5   | 2           | 567

我的计划是使用 reference_id 作为标识一组引用的一种非唯一标识符。我还想在每次插入新组时增加它。
由于这个字段不是唯一的或自动递增的新插入,我必须检查最后使用的 reference_id ,递增该值,并使用新发现的id插入。当insert计算下一个id时,这当然会有很大的并发性问题 reference_id 同时。
有人知道如何解决这个问题吗?我考虑过表锁定,但考虑到我使用的db engine不可知论/dbal,我不确定这是否可行。

bvjxkvbb

bvjxkvbb1#

此信息应位于另一个表中,并带有自动递增键。像这样:

create table batches (
    batch_id int auto_increment primary key,
    dt datetime
    . . .   -- other information, such as the creation date
);

然后插入的内容将如下所示:

insert into batches (datetime)
    values (now());

set @id = last_insert_id();

insert to references (uid, batch_id, foreign_id)
    values (?, @id, ?), . . .;

相关问题