生成表的唯一标识符

时间:2019-07-01 16:46:53

标签: sql sql-server database

This is a screanshot for the database

我正在尝试在SQL Server中创建一个表。我想生成一个唯一的32位标识符并作为主键。

我将其定义为主键并设置类型-如何打开世代?如何将其设置为32位?

2 个答案:

答案 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()设计用于与本质上是顺序的数据类型一起使用,例如IDENTITYINT ...这样可以保证行的唯一性,还可以为您提供顺序存储和查找聚簇索引并防止索引碎片。

如果您希望使用BIGINT类型的值来简化从API调用之类的查询,那么最好使用一个映射表,该映射表的主键和{{ 1}}作为表上的非聚集列。这样,联接可以基于所有外表的有序主键。