2012-02-21 94 views
0

是否有一些等價於PHP mysql_insert_id來獲取最後插入的UUID()主鍵? (我總是得到0.它適用於auto_inc整數雖然)PHP的mysql_insert_id()爲MySQL的UUID()主鍵?

+1

不幸的是,我不覺得有什麼。另外,請停止使用mysql_ *函數,而是使用mysqli_ *函數或PDO對象。 – 2012-02-21 14:33:40

+0

好吧,除了支持傳統的PHP安裝...有沒有PDO的東西呢? – ina 2012-02-21 14:40:20

+0

我們在說什麼「傳統」? [Mysqli](http://us.php.net/manual/en/book.mysqli.php)得到了很好的支持。 – 2012-02-21 17:18:21

回答

0

不,last_insert_id()只檢索最後生成的auto_increment字段。您必須先執行select uuid(),然後使用該uuid進行插入。

但是,請注意,uuids不能保證是唯一的 - 它們不太可能發生碰撞。如果你確實需要唯一性,那麼使用auto_increment--它們將永遠不會在任何單個表中重用。

+1

我曾經想過,當你分裂到不同的服務器時,auto_increment會失敗,因此使用UUID的? – ina 2012-02-21 15:58:09

+0

@ina是的,如果切換分區,分片(無論它是否與不同的服務器)可能導致auto_increment失敗。但是,當你對一個表進行分區(「分片」)時,你的PK有效地變成了auto_increment值以及你正在分區的任何列。 – 2012-02-21 17:06:15

+0

我仍然試圖理解爲什麼許多系統爲用戶的主ID使用UUID。我原以爲這是因爲他們認爲數據庫會跨越不同的服務器,而UUID中的mac-address有助於確定數據在哪個服務器上。但是,如果一個ID保證是唯一的並且可以擴展,爲什麼要使用UUID。 – ina 2012-02-24 03:25:08

0

我發現這個很短的,簡單的解決方案:

set @id=UUID(); 
insert into <table>(<col1>,<col2>) values (@id,'another value'); 
select @id;