了解回滾期間 SQL Server 識別列行為
SQL Server 的自動遞增識別列呈現出一個獨特的特徵:即使在交易回滾之後它們也會繼續遞增。這可能會導致身份序列中出現間隙,這是特定應用中的潛在問題。
當交易中的 INSERT
語句失敗且交易回滾時,插入的行將被刪除。 但是,回滾之前指派的標識值保持不變。這會導致未使用的身份值,從而產生間隙,或者如果您嘗試重新使用這些值,則可能會導致問題。
身份列的這種非交易性質是有意為之的。 在多用戶環境中,使身分分配事務化會帶來顯著的效能開銷和瓶頸,因為它需要鎖定機制來防止並發存取和分配相同的身分值。
因此,在回滾後恢復「遺失」的身份值是不可能的。
為了縮小身分差距,請考慮產生唯一識別碼的替代方法,包括:
以上是為什麼 SQL Server 識別列在交易回滾後仍會增加?的詳細內容。更多資訊請關注PHP中文網其他相關文章!