一組用戶可能都有一個AccountNumber,所以爲了創建一個新的賬戶,我會將現有的最高賬戶數量增加1.您如何跟蹤上次發佈的數字?當然,人們可以循環查看所有賬戶,但是有沒有什麼原因可能會選擇保留最後發佈的號碼或所有號碼的單獨表格?我應該跟蹤在單獨的表中增加AccountNumber嗎?
我只是看着幾千個賬戶,所以這並不是我擔心優化。
一組用戶可能都有一個AccountNumber,所以爲了創建一個新的賬戶,我會將現有的最高賬戶數量增加1.您如何跟蹤上次發佈的數字?當然,人們可以循環查看所有賬戶,但是有沒有什麼原因可能會選擇保留最後發佈的號碼或所有號碼的單獨表格?我應該跟蹤在單獨的表中增加AccountNumber嗎?
我只是看着幾千個賬戶,所以這並不是我擔心優化。
如果您使用的是Oracle使用序列。http://www.techonthenet.com/oracle/sequences.php
對於MSSQL使用這樣的事情。http://blogs.msdn.com/b/sqlcat/archive/2006/04/10/sql-server-sequence-number.aspx
問題最初是標記.NET和C#等我如總結了MSSQL,事實並非如此。使用Sqlite時,我不知道這個答案有多少是有效的。
有幾種策略可以解決這個問題。我覺得這兩個是最有趣的:
使用的IDENTITY
列,當兩個進程同時創建帳戶,它會自動採取的競爭條件照顧,回滾事務和其他東西。 IDENTITY
專欄的缺點是,您可能會在數字系列中出現漏洞。如果這是不可接受的,你需要使用另一種方法。
自己處理數字。我希望有一個特殊的表格,其中包含下一個免費號碼。當您創建一個新賬戶時,您必須在一個事務中執行此操作,並使用隔離級別在讀取它時立即鎖定空閒數字表,並保留該鎖直到更新的數字被存儲。這樣做很尷尬,會降低可擴展性,但可以保證獲得連續的數字。
無論使用哪種方式,您都應該在帳號列上有一個唯一的密鑰作爲額外的安全措施。
恐怕我不熟悉SQLlite。但是現在大多數SQL引擎都具有某種「自動編號」功能。
如果失敗,則創建一個序列。數據庫引擎應該爲您管理序列,以便您永遠不會得到重複的數字。
如果由於某種原因這些事情都不可能,那麼您可以創建一個單獨的表來保存最後使用的ID。一定要使用「選擇更新」閱讀它以避免競爭條件。
這與C#或.net有什麼關係?看起來它沒有任何關係,所以請刪除'c#'和'.net'標籤。 – comecme
最好的方法是建立一個帳戶表,它將存儲將分配給所有用戶的帳戶ID。 AccountID應該是一個會自動增加的身份。無論何時添加新用戶,您都將查找帳戶表中的AccountID並將其分配給用戶。 – Zachary