SQL主键可以接受'0'吗?

时间:2011-03-25 00:10:10

标签: sql-server-2005 sql-server-2008

SQL Server 2008/2005

我对主键和唯一键感到困惑。

我知道主键不允许NULL,而Unique会接受NULL。 此外,一个表可以有'n'个唯一键..!

主键是否允许归零?

4 个答案:

答案 0 :(得分:14)

主键可以为零,但如果您在列上设置标识,则通常从1开始而不是从零开始。

答案 1 :(得分:7)

主键可以允许0取决于主键的数据类型。自动生成的PK(身份)可以从0开始,但这不是默认行为,您必须将其设置为从0开始(如果需要,您可以从负数开始)。为了获得最佳效果,应在开始向表格输入数据之前完成此操作。

你不能做的是有多个记录,其中0为PK,因为它违反了PK的唯一性要求。

如果您有现有数据并且想要一个特定用途的值为零的记录(例如我们为我们的导入过程输入了一个用户,那么insertedby字段可以显示该记录来自导入),那么你可能想要的是允许手动插入到身份字段中,这样你就可以以你想要的值输入这一个特定的记录,然后返回到通常的设置。这样做是这样的:

set Identity_insert dbo.table1 ON
insert dbo.table1 (id, myfield)
Values (0, 'test')
set Identity_insert dbo.table1 OFF

不要在应用程序生产代码中执行此操作,这是一种系统管理员类型的任务,只应在常规数据范围之外设置特定记录或插入从其他来源传输的记录时偶尔执行(当你知道他们现有的id值当前未使用时)。这不应该轻易用于绕过身份字段的限制。特别是它永远不应该用于填写跳过身份的记录(由于删除或回滚),因为这会破坏使用身份的目的,如果没有建立正确的PK / FK关系,可能会导致数据完整性问题。 / p>

答案 2 :(得分:3)

是。 NULL是缺少值。 0是一个值。

答案 3 :(得分:0)

是的,您可以将默认值为0的列定义为外键。但是,为了使约束生效,您将需要在源表中也有一行值也为0的行。 ...您可以在主表中插入0个主要ID记录。