为注册时的用户生成递增的唯一ID

时间:2020-04-23 15:04:33

标签: asp.net sql-server vb.net

我有一个网站,我需要用户在该网站上添加自己的详细信息并提交来进行注册。提交时,应为每个用户分配增量唯一ID。为了进行测试,我有15个用户在网站上输入必要的详细信息,然后同时单击“注册”,但是两组用户分配了相同的ID。当所有人都在不同时间注册时,这不是问题,那么id的分配是唯一的。

如何确保每个用户即使同时注册也能获得唯一的ID。

1 个答案:

答案 0 :(得分:1)

为每个用户提供唯一ID的“最简单”方法是在用户表上使用IDENTITY column(如果您希望在成功写入记录时分配ID),或者SEQUENCE object,如果要在数据库中创建用户帐户之前 之前获得唯一ID。

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。在事务回滚的情况下,它们都将仍然自动递增,并且这些值将“丢失”。但是,您不应该首先依赖它们是顺序的。

您可能还希望在这些用户名字段上使用唯一的约束。

相关问题