2011-03-25 123 views
8

SQL Server 2008/2005SQL主键可以接受'0'吗?

我在主键和唯一键之间感到困惑。

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

主键是否允许为零?

+0

只是一个内容丰富的评论。这个问题也适用于'mySql' – dhpratik 2014-05-19 07:00:29

回答

14

主键可以为零,但是如果您在列上设置了Identity,它通常将从1开始而不是从0开始。

+0

主键将具有标识列..(最有可能或大多数场景的)..所以我可以假设,如果有一个标识列,我们可以开始种子/增量0.为了开始零而不是1,该怎么做? – goofyui 2011-03-25 00:16:25

+0

为什么你要开始零增量呢?但是,在零开始种子,然后增加一个,所以它会是身份(0,1) – 2011-03-25 00:18:06

+0

我测试了场景..!如果没有身份..,Primarykey将允许零..! – goofyui 2011-03-25 00:20:55

3

是的。 NULL是没有值。 0是一个值。

+0

做主键支持ZERO吗? – goofyui 2011-03-25 00:14:21

+0

是的。主键支持ZERO – climbage 2011-03-25 00:16:22

7

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

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

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

​​

不要在申请生产代码做到这一点,这是应该只偶尔做了无论是正常范围之外的特定记录的设置任务的系统管理员类型数据或插入从其他源传输的记录(当您知道其现有ID值目前未被使用时)。这不应该被轻率地用来解决身份领域的限制。特别是,它永远不能用于填写身份被跳过的记录(由于删除或回滚),因为这会破坏使用身份的目的,并且如果未建立适当的PK/FK关系,则会导致数据完整性问题。

+0

感谢您的详尽解释,同时这也是唯一的答案,以显示如何做OP的问题,同时解释为什么不会。辉煌! – Rustavore 2013-04-10 16:45:03