在注册时为用户生成增量唯一ID



我有一个网站,我需要用户通过添加他们的详细信息并提交来注册自己。提交时,应为每个用户分配增量的唯一ID。为了测试这一点,我让15名用户在网站上输入必要的详细信息,然后同时点击注册,然而有两组用户获得了分配给他们的相同id。当所有人在不同的时间注册时,这不是问题,那么id的分配是唯一的。

如何确保每个用户在同时注册时都能获得唯一的id。

给每个用户一个唯一ID的"最简单"方法是使用用户表上的IDENTITY列(如果您希望在成功写入记录时分配ID(,或者如果您想在数据库中创建用户帐户之前获得唯一ID,则使用SEQUENCE对象。

create table MyUserTable (
UserID int identity(1,1) NOT NULL constraint PK_MyUserTable PRIMARY KEY CLUSTERED
,UserName nvarchar(50)
,Email nvarchar(100);
insert into MyUserTable output inserted.UserId values ('MyUserName', 'me@example.com');

将记录写入表并返回创建的ID。

如果您想在写入表之前获取ID:

CREATE SEQUENCE UserIds as int start with 1 increment by 1;
create table MyUserTable (
UserID int NOT NULL constraint PK_MyUserTable PRIMARY KEY CLUSTERED
,UserName nvarchar(50)
,Email nvarchar(100);
select next value for UserIds
-- Do whatever you need to do in the application
insert into MyUserTable (UserId,UserName,Email) values (UserIdYouGotEarlier, 'MyUserName','me@example.com');

要明白,对于这两种方法,都不能保证您具有顺序ID。在事务回滚的情况下,这些值仍将自动递增,并且这些值将"丢失"。但您不应该首先依赖于它们的顺序。

您可能还需要对这些用户名字段进行唯一约束。

最新更新