回答
這個問題有兩個不同的方面。
- 目標:你想實現的是更新給定的行。任何允許你達到這一點的方法都是好的;換句話說,如果任何唯一性約束下未列出的唯一鍵,主鍵或任何其他列的組合都沒有問題,那麼您可以使用它。
- 表演:與其他任何查詢一樣,您真的想要快速且直截了當。這是什麼意思?這意味着你必須在你的where子句中選擇效率最高的過濾器。您可以通過測量此:
1 /你正在使用的索引的大小:選擇最小的一個(例如柱尺寸)
2 /索引你的列的NOT NULL屬性正在使用:(如果您的引擎允許在可空列上使用唯一索引)最好選擇放置在不可空列上的索引。
3 /索引的表空間:你也可以看到,如果有一個指數,而不是另一個特殊的存儲,這將提高性能(安裝索引...)
4 /列類型:通常小數字比文本更快解析(道歉沒有來源,小心)
我現在想不到更多,但我敢肯定其他人將完成列表。
乾杯。
「獨一無二的鑰匙」我假設你的意思是「商業鑰匙」。如果您的數據庫與某些外部來源鬆散地同步,那麼業務密鑰可以很好地用作存儲過程的參數。
比方說,您收到來自其他公司的平面文件,以訂購產品,激活服務,啓動流程等。他們可能不知道主鍵,並且可能按名稱請求:(公司X,服務Y,激活),您根據唯一公司名稱,唯一服務名稱,唯一狀態調用您的存儲過程。當然,你可能會說遠程系統應該使用ID,但有時你不能控制它。
另一個示例:在應用程序級別執行復制。這兩個數據塊之間的序列可能不同步,因此通過業務密鑰來引用遠程記錄會更安全。
我想是的,這是唯一識別記錄的字段。我們知道表的主鍵,所以它不會很難得到,並且似乎也簡化了過程調用。我想知道這是否會影響我們使用ORM的能力。我知道一些ORM可以通過一個唯一的鍵來完成,但他們似乎更喜歡主鍵。 – StoneJedi
我這樣看:pk id本身沒有意義。它充當記錄(參考)的唯一標識符。它使事情變得更容易。由唯一(COUNTRY,STATE)定義的銷售區域可以具有TERRITORY_ID作爲參考(pk)。它只在內部有意義。在外部,國家/地區對是如何參考的(「誰是US-FL領地的代表?」)只要事物是獨立的,pk是最簡單和有意義的,但是在交易時它可以很快破裂與外部系統和數據源。然後,業務密鑰更適合服務apis。 – Glenn
- 1. Indexeddb - 通過索引鍵更新記錄
- 2. 更新唯一的非主鍵
- 3. sequelize更新記錄的主鍵值
- 4. 更新查詢以獲取沒有唯一鍵的新記錄?
- 5. 更新記錄的外鍵字段基於新插入的記錄的主鍵
- 6. 替換MySQL中的現有記錄或創建沒有主鍵或唯一字段的新記錄
- 7. Lumen:通過json主體更新記錄
- 8. 如果新記錄違反morphia中的唯一鍵約束,則用新記錄更新原始記錄?
- 9. 多列主鍵或唯一約束?
- 10. Cassandra - 通過主鍵更新所有記錄,輸入錯誤不匹配
- 11. 更新主鍵
- 12. Django的兩個外鍵唯一記錄
- 13. 外鍵不主鍵更新?
- 14. 更新一列有主鍵
- 15. MySQL的分區 - 主鍵和唯一記錄的錯誤
- 16. 使用主鍵或唯一索引標記名稱?
- 17. django中的主鍵和唯一鍵
- 18. 外鍵可以唯一主鍵
- 19. SQL。唯一和主鍵
- 20. 主鍵的唯一網址
- 21. 主鍵與唯一約束?
- 22. 具有相同唯一列的表的主鍵或外鍵
- 23. 通過唯一鍵提升unordered_multimap循環
- 24. SQL檢索最新記錄,按唯一外鍵分組
- 25. 通過Codeigniter更新記錄
- 26. 唯一索引或唯一鍵?
- 27. EF。更新。唯一鍵約束
- 28. 使用唯一鍵更新多個行
- 29. 根據主鍵插入或更新
- 30. 實體框架:如何通過主鍵刪除記錄?
爲什麼標記爲Oracle和T-SQL?什麼是'WorkStudyID'?主鍵_is_是唯一的。答案是有效的,「取決於」_和_「它們總是一樣好」_因此投票結束。 PS我經常不知道程序中的PK。 – Ben
請給我一個不是唯一的主鍵 – SQLMason