我正在使用C ++和MySQL。
我想要保存到数据库的数据对象。他们需要有一个唯一的ID用于识别目的。问题是,如何获得这个唯一的ID?
以下是我提出的建议:
1)使用MySQL的auto_increment功能。但是如何获得身份证呢?我知道MySQL提供了这个“SELECT LAST_INSERT_ID()”功能,但这将是一个竞争条件,因为两个对象可以相互快速地插入。此外,没有任何其他东西可以使对象可辨别。可以使用完全相同的数据同时创建两个对象。
2)在C ++端生成UID。也没有骰子。有多个程序可以写入和读取数据库,这些程序彼此不了解。
3)插入MAX(uid)+1作为uid值。但是,我基本上遇到了与1)相同的问题,因为我们仍然有竞争条件。
现在我很难过。我假设这个问题一定是其他人遇到的问题,但到目前为止,我没有找到任何答案。
有什么想法吗?
答案 0 :(得分:0)
查询:
SELECT LAST_INSERT_ID()
将返回在特定连接上插入的最后一个ID,而不是全局。所以没有竞争条件,除非你自己的代码是多线程的,在这种情况下你想要用某种类型的MT锁包围INSERT和SELECT。