答案 0 :(得分:0)
如果您想要一个32位唯一的标识符,该标识符在每一行都是唯一的。 。 。好,您刚刚定义了identity
列:
create table . . . (
id int identity primary key,
. . .
);
这当然是一个序列号,但是符合您的条件。
编辑:
如果您想要newid()
,请使用默认值:
create table . . . (
id uniqueidentifier primary key default newid(),
. . .
);
当然,newsequentialid()
比newid()
更好,但是示例代码使用newid()
。
uniqueidentifer
为16字节(128位),因此不符合您的需求。我认为对于保证唯一的32位唯一数没有其他内置机制。
答案 1 :(得分:0)
使用makeComponentList=(num)=>{
let i=0,arr=[];
for(;i<num;i++){
arr.push(<TestComponent key={i} />)
}
return arr;
}
handle = selected => {
this.setState({number:selected.value});
}
render() {
return(
<React.Fragment>
<Select onChange={this.handle} options = { ... }/>
{this.makeComponentList(this.state.number)}
</React.Fragment>
);
}
类型或随机生成的无序字符作为主键是一个坏主意,并会在将来限制您。是的,保证它们是唯一的,但不能保证它们是顺序的。请记住,如果您要进行任何类型的群集以实现高可用性,则可能会导致uniqueidentifier
重叠的风险。 uniqueidentifier
不会创建重叠,只要它始终在同一服务器上使用即可。当您更换服务器时,并不能保证不会。它可能很少见,但我已经看到了它的发生,并且它发生时还不太漂亮。
NEWID()
设计用于与本质上是顺序的数据类型一起使用,例如IDENTITY
,INT
...这样可以保证行的唯一性,还可以为您提供顺序存储和查找聚簇索引并防止索引碎片。
如果您希望使用BIGINT
类型的值来简化从API调用之类的查询,那么最好使用一个映射表,该映射表的主键和{{ 1}}作为表上的非聚集列。这样,联接可以基于所有外表的有序主键。