回答
的UUID的主要缺點是,你必須事先創建他們,如果你想重提爲進一步使用記錄之後(即:將在從屬外鍵表子記錄):
INSERT INTO table (uuidfield, someotherfield) VALUES (uuid(), 'test'));
將不會讓您看到新的UUID值是什麼,並且由於您沒有使用常規的auto_incremented主鍵,因此無法使用last_insert_id()
來檢索它。你必須做一個過程分爲兩個步驟:
SELECT @newuid := uuid();
INSERT INTO table (uuidfield, someotherfield) VALUES (@newuid, 'test');
INSERT INTO childtable ..... VALUES (@newuid, ....);
這是一個好點,沒有想到這個。即使它是相關的,如果我們正在討論同時向兩個或更多表添加某些內容,而不是添加到單個表。 – 2010-04-19 15:22:11
這是真的,但使用UUID的主要好處是您可以在任何地方創建它們。如果插入記錄時需要UUID,只需在客戶端生成它,然後將其明確包含在INSERT語句中,而不是讓數據庫生成它。 – 2013-07-20 18:03:31
PRO我能想到的是,您的ID將是唯一的,不僅在您的表中,而且在您的數據庫的每個其他表上。而且,它在世界上任何數據庫的任何表格中都應該是唯一的。
如果您的表語義需要該功能,則使用UUID。否則,只需使用簡單的INT ID(更快,更容易處理,更小)。
UUID的缺點是它體積較大,因此搜索速度稍慢。每個即席查詢很難輸入一個很長的十六進制字符串。它解決了您可能沒有的需求,即多服務器唯一性。
順便說一下,INT(n)
在MySQL中始終是32位整數,(n)
參數與允許值的大小或範圍無關。這只是一個顯示寬度提示。
如果您需要一個整數的值範圍大於32位提供的值,請使用BIGINT
。
從我的角度來看,使用UUID MySQL中的主鍵是壞主意,如果我們談論大型數據庫(和大量刀片)。
MySQL始終將主鍵創建爲集羣,並且沒有將其關閉的選項。
考慮到這一點,當您使用非順序標識符(UUID)插入大量記錄時,數據庫會被分段,並且每個新插入操作都會花費更多時間。
建議:使用帶有GUID的PostgreSQL/MS-SQL/Oracle。對於MySQL使用整數(bigints)。
- 1. varchar()主鍵或int主鍵?
- 2. 主鍵 - 用於UUID主鍵的VARBINARY或BLOB或VARCHAR
- 3. Java Mysql Ordering varchar as int
- 4. 我應該在MySQL中使用int或char作爲id的/ uuid(主鍵)嗎?
- 5. MySQL UUID主鍵 - 由PHP或MySQL生成?
- 6. VarChar(36)或Char(36)的SQL Server GUID?
- 7. cakephp mysql,autoincrement id或varchar作爲主鍵
- 8. MySQL的主鍵和VARCHAR(255)
- 9. MySQL Workbench爲主鍵自動生成UUID
- 10. mysql中的varchar和複合主鍵?
- 11. PHP的mysql_insert_id()爲MySQL的UUID()主鍵?
- 12. 主鍵UUID觸發器
- 13. CakePHP ACL與UUID主鍵
- 14. CHAR()或VARCHAR()作爲ISAM mySQL表中的主鍵?
- 15. SqlCommand VarChar或Int?
- 16. 使用UUID作爲主鍵的Laravel 4
- 17. MySQL - 帶INT的Comparsion VARCHAR
- 18. mysql order varchar field as integer
- 19. UUID主鍵和Memcached
- 20. 外鍵引用的主鍵可以是mysql中的varchar(255)嗎?
- 21. Casting varchar as date
- 22. 自定義UUID的主鍵
- 23. 實現作爲主鍵的UUID
- 24. 作爲主鍵不工作的UUID Laravel
- 25. 將varchar轉換爲mysql中的int
- 26. 在MySQL(VARCHAR)與IN(INT)
- 27. 除了int以外的MySql主鍵
- 28. Android:使用UUID作爲SQLite的主鍵
- 29. MySQL AS關鍵字
- 30. MySQL TEXT或VARCHAR
爲什麼使用UUID? – Sarfraz 2010-04-18 21:12:18