我打算在我的網站上使用自動遞增的用戶ID。由於用戶數據將被拆分成多個表,我想知道在事務中自動遞增值的可靠性如何,即在註冊時在事務的表中插入一些初始值時,只需讓自動遞增器設置所有表中的ID還是應插入到一個表中,將插入的ID取入單獨的查詢中,並在隨後的插入中使用它,從而導致數據庫負載更高,僅用於創建用戶?交易中AUTO_INCREMENT的可靠性如何?
回答
每次嘗試插入內容時,都會保留自動增量字段。
1:1:2個步驟的插入件更多或更少的前進保留下一個可用的自動增量鍵
2:與該保留的鍵
執行插入現在,如果事務回滾,唯一永遠不會回滾的是自動增量預留,導致自動增量列中出現空隙。正因爲如此,如果你試圖預測100%的自動增量是什麼,那麼這是不可能的。我知道auto_increment沒有其他問題,並且在幾乎所有情況下,依靠mysql的功能比嘗試手動執行某些操作更可靠。
如果您的插入是在非常受控制的條件下發生的,例如沒有併發事務,並且沒有任何事情會回滾,那麼您可能是安全的。否則,答案可能取決於您正在使用的存儲引擎。您應該預計auto_increment
導致least if you are using InnoDB的編號出現空白。
更一般地,每一個DB我知道有差距的auto_increment
的機會(或同等)值。原因是,如果不是這樣,插入新行的任何事務將不得不阻止對該表的所有其他插入。這是因爲如果第一個事務尚未提交或回退,無法知道下一個值將會是什麼,則無法插入第二行。如果你允許差距,那麼你只是假設第一個事務將會提交,如果它發生回滾,那麼你有一個缺口,但這不是問題。
如果您關注的是用戶創建操作高負荷,您可能能夠通過實現該功能的存儲過程,以使事情更迅捷;通過這種方式,您可以避免每次查詢返回到應用程序。
請注意,差距絕不是問題。 –
@ÁlvaroG.Vicario:我認爲他們是,如果你試圖預測產生了什麼數字,這似乎是問題所在。 –
- 1. 可靠的字典和交易提交
- 2. Microsoft.Expression.Encoder.MediaItem的可靠性如何?
- 3. HTTP_REFERER的可靠性如何?
- 4. HtmlUnitDriver的可靠性如何?
- 5. PivotViewer:交易卡可見性
- 6. 可靠的MSDTC促進交易分佈式測試?
- 7. 使用UIKit KVO的可靠性如何可靠
- 8. 可靠與否PDO lastInsertId()在使用交易
- 9. 的可靠性如何像/index.php/seo_path
- 10. 主從複製的可靠性如何?
- 11. 如何評估軟件的可靠性?
- 12. ASP.NET Validator的可靠性如何?
- 13. [CALayer animationForKey:]的可靠性如何?
- 14. 的可靠性如何在MDN
- 15. AndroidBillingLibrary的可靠性
- 16. C2DM的可靠性
- 17. SqlDependency可靠性?
- 18. Xeround可靠性
- 19. 流可靠性
- 20. Qpid可靠性
- 21. Optimizely可靠性
- 22. RAMDisk可靠性
- 23. Kryonet可靠性
- 24. Logback可靠性
- 25. 在C#中的交易中的交易#
- 26. 在MVC中,如何驗證提交表單隱藏字段的可靠性?
- 27. Ethereum中的交互可靠性與外部C++庫
- 28. 交易不可用?
- 29. Tar檔案:追加可靠性如何?
- 30. 可靠性和WCF
定義「可靠」。插入重複主鍵實際上是不可能的,但是您的多語句替代方法需要非常小心的表鎖定。 –
自動增量id的最大挑戰是如果你有多個環境,並且需要保持ID在同一值行上同步。就像查找表一樣。否則,他們一般工作正常。 – xQbert