【发布时间】:2011-04-23 18:31:33
【问题描述】:
我在博客、文章、书籍、论坛、SO 等中的 TSQL 中创建表的脚本中经常看到“非空主键”。
例如,如果要搜索“not null” NEAR “primary key” “sql server”,BING 会给出 630,000 个结果((仅英文):
http://www.bing.com/search?q=%22not+null%22+NEAR+%22primary+key%22+%22sql+server%22&go=&form=QBRE&filt=lf
我一直认为“NOT NULL”是 PRIMARY KEY 定义不可分割的一部分,至少在 SQL Server 中是这样。
我尝试在 SQL Server 中创建带有和不带有“NOT NULL”的主键的表,但无法掌握可能的区别。
为什么即使在快速(短)插图中也都使用“NOT NULL”来创建主键?
更新:
NULL 如何标识任何内容或唯一性(以及如果允许一个 NULL,也可以防止多个 NULL)?它是未指定的、缺失的、不适用的值
我的问题还暗示了子问题:
如果为 PK 定义了“NOT NULL”,为什么没有指定 UNIQUE?
PK的定义是什么。是 UNIQUE CONSTRAINT + NOT NULL 还是 UNIQUE INDEX(那么为什么不是 NULL)?
请给我关于它的 msdn 文档的链接。
更新 2: @Damien_The_Unbeliever
为什么没有“NOT NULL”就不是同义词?
CREATE TABLE T3
(
PK int -- NOT NULL commented out
, nonPK int -- to double-check my sanity
, constraint PK_vgv8 PRIMARY KEY (PK) on [PRIMARY]
)
仍然不允许 NULL 给出:
Microsoft SQL Server 管理工作室
没有更新任何行。
第 2 行中的数据未提交。 错误来源:.Net SqlClient 数据提供程序。 错误消息:无法将值 NULL 插入列 'PK',表 'TestData.dbo.T3';列不允许空值。插入失败。
语句已终止。
更正错误并重试或按 ESC 取消更改。
确定帮助
更新3:
这个,概念和术语定义,可能看起来不切实际的麻烦。
并非如此,在基本概念上的一些错误陈述(在沟通/讨论期间其他人的意见)足以被视为白痴,并在专业互动和沟通中造成障碍。
我忘了说,NOT NULL 是 SSMS 为 PK 编写的脚本!
【问题讨论】:
-
如果记录可以被唯一标识,你将如何找到它?????
-
@InSane,我已经习惯了 GOOGLE,但 BING 碰巧找到了 GOOGLE 没有的结果(尤其是已删除网页的缓存)。此外,当我只用英语搜索时,google.com 重定向到 google.ru 给了我很多西里尔文(俄语)的结果。
-
@leppie,我不明白,SQL Server 中的“PK = UNIQUE + Not NuLL”(?),请发布您的答案
-
@vgv8:您可以将其设为 NULL,但由于 PK 唯一性约束,这将只允许 1 个和 1 个单个 NULL 条目。我认为您可以同意我的观点,即单个 NULL PK 是荒谬的。
-
@leppie,我如何在 PK 中有 NULL?发表你的答案
标签: sql-server tsql database-design primary-key