1
我正在使用C++和MySQL。MySQL中用于数据对象的UID
我有我想要坚持到数据库的数据对象。他们需要有一个唯一的ID用于识别目的。问题是,如何获得这个唯一的ID?
这里是我想出了:
1)使用MySQL的AUTO_INCREMENT功能。但是如何获得ID呢?我知道MySQL提供了这个“SELECT LAST_INSERT_ID()”功能,但这将是一个竞争条件,因为两个对象可以相互快速插入。此外,没有其他东西可以辨别对象。使用完全相同的数据可以同时创建两个对象。
2)在C++端生成UID。没有骰子。有多个程序会写入数据库并从数据库中读取,这些程序彼此不知道。
3)插入MAX(uid)+1作为uid值。但是,我基本上有和1)一样的问题,因为我们仍然存在竞争条件。
现在我很难过。我假设这个问题一定是其他人遇到的问题,但到目前为止,我没有找到任何答案。
任何想法?
无论如何你可能需要锁。如果我没有记错,大多数语言中的大多数数据库库一般都不是线程安全的,不必介意'LAST_INSERT_ID'上的潜在竞争条件。 – 2010-06-02 09:28:43
@Dave mySQL确实提供了一个线程安全客户端库 - 请参阅http://dev.mysql.com/doc/refman/5.0/fr/myodbc-unix-thread-safe.html。当然,你仍然需要锁来避免竞争状态。 – 2010-06-02 09:33:15
非常感谢! – 2010-06-02 09:35:48