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