0

我正在使用 SQL Server 2008 来维护一个数据库,在该数据库中我有一个userAcccounts在网站上注册时存储用户详细信息的表。该userID列是一个带有标识的整数。

我注意到的是,不知何故,该列跳过了一些 id(随机数的 id,有时它会跳过 5、11、10 等),即 ID 不是连续的。我在这里读过一个类似的问题,有一个类似的问题建议

“每次尝试插入时,身份序列都会增加 - 这包括失败或回滚的插入”

我检查了我的日志是否有错误,但在跳过 id 期间没有错误。此外,我的插入不在任何事务中进行回滚,因为不需要删除帐户。注册过程中也不涉及其他表格

虽然这不是一个主要问题,因为 id 将是唯一的,但我想知道为什么会出现这种行为?也许我忽略了一些东西。

还有其他可能发生这种行为的场景吗?即身份列跳过了几个ID?这可能是并发访问的问题吗?

这是表的创建脚本。

CREATE TABLE [dbo].[UserAccounts](
    [AccountID] [int] IDENTITY(1,1) NOT NULL,
    [FirstName] [varchar](30) NULL,
    [LastName] [varchar](30) NULL,
    [Gender] [varchar](10) NULL,
    [Email] [varchar](150) NULL,
    [EmailVerified] [bit] NULL,
    [UserName] [varchar](30) NULL,
    [Password] [varchar](50) NULL,
    [ProfilePicture] [varchar](150) NULL,
    [BackgroundPicture] [varchar](150) NULL,
    [DateOfBirth] [smalldatetime] NULL,
    [CreateDate] [smalldatetime] NULL,
    [LastUpdatedOn] [smalldatetime] NULL,
    [Points] [int] NULL,
    [CurrentBadge] [varchar](30) NULL,
    [FBID] [varchar](50) NULL,
    [TwitterID] [varchar](50) NULL,
    [Abused] [int] NULL,
    [isActive] [bit] NULL,
    [AccountTypeID] [int] NULL,
    [DateStamp] [timestamp] NOT NULL,
    [Location] [varchar](50) NULL,
    [About] [varchar](250) NULL,
    [UsingBackgroundPicture] [bit] NULL,
 CONSTRAINT [PK__UserAcco__349DA5867F60ED59] PRIMARY KEY CLUSTERED 
(
    [AccountID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

感谢这方面的任何帮助?另外,如果您需要任何其他详细信息,请告诉我。

谢谢

4

1 回答 1

0

如果不对每个事务全局锁定整个数据库,就不可能保证序列或 ID 的精确顺序 - 以防止任何并发事务,这也可能要求 ID。

这显然会将其减少为有效的单用户数据库,并完全破坏性能。

由于这些原因,明确不能保证连续的顺序性

于 2013-05-07T05:01:48.203 回答