回答
如果您可以在序列中容忍的差距,你可以使用任何的建議,在其他的答案,您還可以使用Oracle SEQUENCE
,IDENTITY
在MS SQL Server的IBM DB2或自增字段。
但是,如果您絕對需要避免差距,即使在併發環境中,情況也會突然變得不那麼簡單。實質上,你必須確定「候選者」的價值,然後嘗試插入它,然後準備好重試整個過程,如果一個併發事務插入它之前。
順便說一句,你可以使用code
作爲主鍵,並完全放棄Id
?
當然!我正在考慮丟棄Id,因爲Code是唯一的,永遠不會改變,但是它的確主鍵將使用varchar而不是int。那是問題嗎?還有代碼沒有固定長度,即「IPAD」「IPHONE」「ANDROID」 – 001
@ 001在你的問題中,你說:「你怎麼給你的代碼貼上序號(1,2,3,4。 ...... N)?「*。所以我的理解是'code'是一個順序INT,而不是VARCHAR。也許你應該編輯你的問題,並使其更清楚? –
@ 001試圖回答你的評論:你在這裏有兩個關鍵:一個自然('code')和一個代理('id')。這兩種策略(保持代理與不保留它)有優點和缺點,但這是沒有地方列出所有。對於一些提示,請參閱我的其他答案底部的項目符號點:http://stackoverflow.com/questions/7665735/how-do-i-organize-such-database-in-sqlite/7668726#7668726 –
在MySQL中,你可以描述字段(即列)爲「自動遞增」,這將在向表格中插入新聞行時更新您的code
字段。我相信這對許多SQL系統(如果不是全部的話)都很常見。查看over here瞭解MySQL操作的描述。
在postgreSQL中,列類型是串行(或bigserial)來完成同樣的事情。然後,在插入時,將串行列留出,並且數據庫引擎將自動爲您增量,因爲Pete的優秀鏈接表示。
我們大多數人不會構建使用id號的表(通常是順序的)以及另外一個也是順序的代碼。沒有意義。
如果代碼是一個連續的唯一編號,則刪除id列並將代碼設置爲主鍵。
我正在考慮刪除Id,因爲Code是唯一的,永遠不會改變,但是它的確如此,主鍵將使用varchar而不是int。那是問題嗎?另外,代碼沒有固定的長度,即「IPAD」「IPHONE」「ANDROID」 – 001
「代碼」是一個相當短的VARCHAR()應該無關緊要。如果你使用一個ID號碼,你將永遠不得不使用一個連接;使用「代碼」你永遠不需要加入。我會讓「代碼」成爲主鍵。其他人會有其他意見。如果您確實要保留身份證號碼,請確保您聲明的「身份證號碼」列是唯一的。 –
- 1. 組合查找表 - 數據庫設計
- 2. 數據庫設計 - 多查找/枚舉表或一個大表?
- 3. 數據庫設計查詢
- 4. 數據庫設計審查
- 5. 數據庫設計查詢
- 6. 設計數據庫
- 7. 數據庫設計
- 8. 數據庫設計
- 9. 使用查找數據進行數據庫設計
- 10. 數據庫表格設計
- 11. 設計數據庫:表
- 12. 數據庫表格設計
- 13. 數據庫表設計
- 14. 多表數據庫設計
- 15. 數據庫表設計
- 16. Mysql數據庫表設計
- 17. 設計數據庫表
- 18. 數據庫表設計
- 19. 查找數據庫表
- 20. 數據庫設計
- 21. 設計數據庫
- 22. 數據庫設計中的外鍵 - 數據庫設計
- 23. 數據庫設計
- 24. 數據庫設計
- 25. 數據庫設計?
- 26. 數據庫設計
- 27. 數據庫設計
- 28. 數據庫設計
- 29. 設計數據庫
- 30. MySQL數據庫設計
你能解釋一下你正在嘗試做什麼嗎?您是否在尋找**代碼**作爲每個記錄的順序唯一ID? – Kirk