我是 SQL Server 2008 的初学者,我的表格里有一个叫做 StudentID
的列。
StudentID
是这个表的主键,只能是整数类型,且它的值将会非常大。
我的问题是,在 SQL Server 2008 中,哪种类型最适合作为 StudentID
列的数据类型?
bigint
? numeric(18,0)
? 还是其他类型?
非常感谢。
我是 SQL Server 2008 的初学者,我的表格里有一个叫做 StudentID
的列。
StudentID
是这个表的主键,只能是整数类型,且它的值将会非常大。
我的问题是,在 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千万亿(15个零的922亿亿)-这对您来说足够了吗?
如果使用以1为起始值的INT IDENTITY
,并且您每秒插入一行,则需要66.5年才能达到20亿限制... (所以,在我看来,这对于绝大多数情况来说是足够多的!)
如果使用以1为起始值的BIGINT IDENTITY
,并且每秒插入1000行,则需要一个令人难以置信的292亿年才能达到922千万亿的限制...
INT
使用4字节存储空间,而BIGINT
使用8字节。特别是当处理大量行和许多非聚集索引时,您希望将其尽可能小-这是为什么我通常选择INT
作为我的“ID”类型的另一个原因(除非我有很强的迹象表明INT
不够用...)
在MSDN Books Online中阅读更多信息(包括所有可用选项)。
Int
是SQL Server表中Id列的最佳类型
如果表最终有太多记录,我们可以更改为BigInt
我们还可以将Id创建为表的Identity和/或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
)
)