我是SQL Server 2008的初学者StudentID
。 StudentID
将是表的 pk,它只能是整数,而且将是一个巨大的数字。
我的问题是 SQL Server 2008 中 StudentID 列的哪种类型最好?
bigint
? numeric(18,0)
?还是其他人?
多谢。
使用 IDENTITY
属性定义类型为 INT
(或 SMALLINT, TINYINT, BIGINT
)的列:
CREATE TABLE dbo.YourTable( ID INT IDENTITY(1,1) ......
通过此设置,SQL Server 将在将行插入表中时自动生成表的连续 ID。
使用类型 INT
,从 1 开始,您将获得超过 20 亿行的可能行 - 这对于绝大多数情况来说应该绰绰有余。有了BIGINT
,你得到大约 922 千万亿(922 有 15 个零 - 922'000 亿) - 足够你了??
如果您使用从 1 开始的INT IDENTITY
,并且每秒插入一行,则需要 66.5 年才能达到 20 亿的限制......(所以在我看来,这对于绝大多数情况来说绰绰有余!
如果你使用从 1 开始的BIGINT IDENTITY
,并且每秒插入一千行,你需要一个令人难以置信的 2.92 亿年才能达到 922 千万亿的限制......
INT
使用 4 个字节的存储空间,而BIGINT
使用 8 个字节。特别是如果你处理大量的行和一些非聚集索引,你希望保持尽可能小 - 这是我通常选择INT
作为我的"ID"类型的另一个原因(除非我有一个非常强烈的迹象表明INT
是不够的......
在 MSDN 联机丛书中阅读有关它的详细信息(包括所有选项)。
>Int
是SQL Server中表中Id列的最佳类型
如果表最终有太多记录,我们可以更改为BigInt
我们还可以创建 Id 作为表的标识和/或 PK。
CREATE TABLE [dbo].[TableName](
[TableNameId] [int] IDENTITY(1,1) NOT NULL
) ON [PRIMARY]
标识和主键示例
CREATE TABLE [dbo].[TableName3](
[TableName3Id] [int] IDENTITY(1,1) NOT NULL,
CONSTRAINT [PK_TableName3] PRIMARY KEY CLUSTERED
(
[TableName3Id] ASC
)
)
希望这有助于您的问题对我有所帮助。
是的,int 或 int 的任何变体都是一个不错的选择,但我能想到它有一个缺点。删除行时,ID 字段显示缺少的数字,如 (1,3,4,5)。GUID 可能是 ID 字段的第二选择