Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql GUID。并将自动id作为SQL数据库中的主键_Tsql_Sql Server 2005_Primary Key - Fatal编程技术网

Tsql GUID。并将自动id作为SQL数据库中的主键

Tsql GUID。并将自动id作为SQL数据库中的主键,tsql,sql-server-2005,primary-key,Tsql,Sql Server 2005,Primary Key,我的算法是: 支票计数 计数+1是新的主键起点 然后在每次插入操作之前继续递增 但这是什么?SQL Server是否提供了自动生成并递增主键的功能?创建您的表 id int indentity1,1主键, col1 varchar10 将自动为您创建主键。 检查T-SQL中的GUID,现在手头上没有它。创建您的表 id int indentity1,1主键, col1 varchar10 将自动为您创建主键。 检查T-SQL中的GUID,现在手头没有。我不确定您是否也在询问标识-但GUID是

我的算法是:

支票计数 计数+1是新的主键起点 然后在每次插入操作之前继续递增 但这是什么?SQL Server是否提供了自动生成并递增主键的功能?

创建您的表 id int indentity1,1主键, col1 varchar10

将自动为您创建主键。 检查T-SQL中的GUID,现在手头上没有它。

创建您的表 id int indentity1,1主键, col1 varchar10

将自动为您创建主键。
检查T-SQL中的GUID,现在手头没有。

我不确定您是否也在询问标识-但GUID是一个唯一标识符,几乎可以保证是唯一的。它可以用于主键,但不建议使用,除非您正在进行脱机工作或计划合并数据库

例如,一个普通的标识主键是

SELECT COUNT(*) FROM table_name;
当与另一个数据库合并时

1   Jason
2   Jake
3   Mike
这将是棘手的。您必须为某些列重新设置关键帧,确保FK处于有序状态,等等。使用GUID,数据如下所示,并且易于合并:

1   Lisa
2   John
3   Sam

请注意,GUID比INT占用的空间要大得多,因此建议使用INT作为主键,除非您确实需要。

我不确定您是否也在询问标识,但GUID是一个唯一的标识符,几乎可以保证是唯一的。它可以用于主键,但不建议使用,除非您正在进行脱机工作或计划合并数据库

例如,一个普通的标识主键是

SELECT COUNT(*) FROM table_name;
当与另一个数据库合并时

1   Jason
2   Jake
3   Mike
这将是棘手的。您必须为某些列重新设置关键帧,确保FK处于有序状态,等等。使用GUID,数据如下所示,并且易于合并:

1   Lisa
2   John
3   Sam
请注意,GUID比INT要占用更多的空间,因此建议使用INT作为主键,除非您绝对需要。

有3个选项

1FB74D3F-2C84-43A6-9FB6-0EFC7092F4CE    Jason
845D5184-6383-473F-A5D6-4DE98DBFBC39    Jake
8F515331-4457-49D0-A9F5-5814EE7F50BA    Mike    
CE789C89-E01F-4BCE-AC05-CBDF10419E78    Lisa
4D51B568-107C-4B63-9F7F-24592704118F    John
7FA4ED64-7356-4013-A78A-C8CCAB329954    Sam
如果使用ID,您可能更喜欢C而不是B的一个原因是为了减少碎片。

有3个选项

1FB74D3F-2C84-43A6-9FB6-0EFC7092F4CE    Jason
845D5184-6383-473F-A5D6-4DE98DBFBC39    Jake
8F515331-4457-49D0-A9F5-5814EE7F50BA    Mike    
CE789C89-E01F-4BCE-AC05-CBDF10419E78    Lisa
4D51B568-107C-4B63-9F7F-24592704118F    John
7FA4ED64-7356-4013-A78A-C8CCAB329954    Sam

您可能更喜欢C而不是B的一个原因是,如果要使用ID,可以减少碎片。

使用count,然后使用count+1作为键的问题是,如果要从中间删除记录,最终会生成一个重复的键。 例如:

现在deletebcount变为3,并插入E。这将尝试使新的主键变为4,它已经存在

Key   Data    
1     A          
2     B
3     C
4     D
或者您可以使用GUID。guid的工作原理是创建一个128位整数,表示为一个32字符的十六进制字符串

CREATE TABLE myTable
(
  P_Id int NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (P_Id)
)
这导致2^128个可能的值非常大,因此由一台计算机创建类似值的可能性非常小。此外,还有一些算法可以帮助尝试并确保这种情况不会发生。所以GUID也是一个很好的键选择


至于是使用整数还是GUID,通常取决于应用程序、策略等。

使用count,然后使用count+1作为键的问题是,如果要从中间删除记录,最终会生成一个重复的键。 例如:

现在deletebcount变为3,并插入E。这将尝试使新的主键变为4,它已经存在

Key   Data    
1     A          
2     B
3     C
4     D
或者您可以使用GUID。guid的工作原理是创建一个128位整数,表示为一个32字符的十六进制字符串

CREATE TABLE myTable
(
  P_Id int NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (P_Id)
)
这导致2^128个可能的值非常大,因此由一台计算机创建类似值的可能性非常小。此外,还有一些算法可以帮助尝试并确保这种情况不会发生。所以GUID也是一个很好的键选择


至于是使用整数还是GUID,通常取决于应用程序、策略等。

能否创建一个名为int的列?无论如何,我相信你指的是id int dentitity1,1主键是的,我指的是id int。现在修好了,谢谢。你能做一个名为int的列吗?不管怎么说,我相信你指的是id int标识1,1主键是的,我指的是id int。现在修好了,谢谢。