我有一个网站,我需要用户在该网站上添加自己的详细信息并提交来进行注册。提交时,应为每个用户分配增量唯一ID。为了进行测试,我有15个用户在网站上输入必要的详细信息,然后同时单击“注册”,但是两组用户分配了相同的ID。当所有人都在不同时间注册时,这不是问题,那么id的分配是唯一的。
如何确保每个用户即使同时注册也能获得唯一的ID。
答案 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。在事务回滚的情况下,它们都将仍然自动递增,并且这些值将“丢失”。但是,您不应该首先依赖它们是顺序的。
您可能还希望在这些用户名字段上使用唯一的约束。