回答
這對於後來發現特定行有用。如果您有其他值保證每行都是唯一的,則您不一定需要額外的ID列,因爲您可以使用另一列作爲主(唯一)鍵。
但是,自增ID列的好處是,它是
一)獨特的每一行,並
二)永遠不會改變。
以StackOverflow爲例。每個問題都有一個ID(這是一個6886017),並在URL中使用ID和標題。因此,可以很容易地得到兩個相同標題的問題,因爲他們的ID仍然是唯一的。你甚至可以改變一個問題的標題,舊的鏈接仍然可以工作,因爲StackOverflow真正關注的是URL的ID部分,而不是標題部分。
這很方便(WHERE id = 123
,而不是WHERE name = 'blah' and somethingelse = 'foo'
),除此之外,整數指數通常是非常高效的,例如,字符串索引。除此之外
但通常當你從數據庫中獲得某些東西時,你想通過名稱或其他相關字段來完成。 ID看起來像「內部」 – Laura
@勞拉:它在某些方面是系統的「內部」,但它是系統內部的_you're_ building;不是數據庫本身的內部。即MySQL不關心你是否使用ID列,但它對你自己來說擁有一個唯一的ID很有用 – Flambino
如果你想通過名字/任何東西來獲得一列,那麼在該列上放一個索引。但是例如拿一張存儲用戶真實姓名的表格。兩名用戶具有相同的名字並不是不太可能。所以你需要這個ID來以一種獨特的方式來識別它們。 – ThiefMaster
但它並不是必需的,但它非常值得推薦。這是保持行唯一索引非常有用,更新,刪除等
下面是一些有用的信息: http://en.wikipedia.org/wiki/Unique_key
當您使用關係數據庫時,您需要能夠唯一標識每一行。在很多情況下,您可以選擇一個或多個模式數據列來爲您唯一標識一行。這就是所謂的natural key
。如果你沒有簡單的方法來識別每一行,那麼你可以引入你自己的專欄,唯一目的是做這個識別。這就是所謂的synthetic key
,這就是你所詢問的具有自動增量的id列。
只要您有其他方法來識別每一行,就不需要它。有可能存在彼此不可區分的行,但這會大大降低關係數據庫範例的價值。也不一定是自動遞增的數字。通常使用唯一的id字符串,例如UUID。
「ID」表示標識符。在關係數據庫設計中,關係中的元組(行)可以由關鍵字唯一標識,並且每個關係必須至少有一個關鍵字。
沒有鍵的表格會允許重複的行,這會導致模糊不清,結果不準確以及正確識別行意欲描述的真實世界實體的問題。因此,密鑰是任何數據庫表的數據完整性的重要方面。
但請注意,密鑰確實而不是必須是單列,也不一定是「自動遞增」。這些功能與爲桌子選擇好的按鍵無關。
我只能添加一個表,其只有*鍵是一個id號允許重複數據而不允許重複行。根據應用的不同,這可能是所有可能世界中最糟糕的。 –
@Catcall,取決於你的意思是「身份證號碼」。很多東西都是用數字標識的。 「身份證號碼」可能意味着一個自然的關鍵以及一個代理人。 – sqlvogel
好點。我應該說,「只有密鑰是人工ID號碼的表格允許重複數據,而不允許重複行。」 (我試着保留術語*代理鍵*來描述代替自然鍵的鍵,我並不總是成功的。) –
- 1. 每個java程序都需要每個jvm運行嗎?
- 2. Java中的每個程序都需要一個類嗎?
- 3. 每個新視圖都需要一個新的layoutparams嗎?
- 4. 每個請求都需要執行SetAuthCookie
- 5. 每個派生表都需要一個別名
- 6. 每個模型都需要MVC數據庫表嗎?
- 7. CakePHP:每個控制器都需要數據庫表嗎?
- 8. Begin Tran每次都需要一個新名字嗎?
- 9. Rails - 每個單一ID或一切的表都是單個表?
- 10. SQL幫助 - 每個產品需要一行,每個屬性不需要一行?
- 11. ListView - 每個項目都有一個ID?
- 12. 應該每個視圖都有一個ID嗎?
- 13. 切換錶行,但每個錶行都受到一個ID的影響
- 14. 每個fmxl文件(場景)都需要一個自己的控制器嗎?
- 15. 每個目錄都需要一個ashx處理程序文件嗎?
- 16. Ruby on Rails 3中的每個角色都需要一個控制器嗎?
- 17. 需要幫助瞭解一個PHP示例,而每個人都需要
- 18. 需要1行從列表中的每個ID
- 19. 每個單元格都需要有一個Section - Parse和Swift
- 20. 我需要一個畫廊的幫助,每個人都有jCarousel
- 21. Ruby。但每個人都需要添加一個獨特的類
- 22. 每個環境都需要新的Facebook應用程序嗎?
- 23. 每個頁面上的InitializeCulture()都需要嗎?
- 24. ZeroMQ上的每個隊列都需要自己的端口嗎?
- 25. PHP MVC - 每個頁面都需要自己的類嗎?
- 26. MEF - 每個導入都需要導出嗎?
- 27. 每個'ftplugin/name.vim`都需要定義`b:undo_ftplugin`嗎?
- 28. JavaScript類 - 每個用途都需要「this.varname」嗎?
- 29. 每個線程都不需要它自己的JVM副本嗎?
- 30. 每個中斷處理程序都需要自旋鎖嗎?
+1強調它是唯一標識符 –