因为主键和唯一键是相似的。我很难理解这两个概念。我知道主键不接受null,而唯一键只接受null一次。因为空值是唯一的值,所以它只能被接受一次。但是主键的概念是在每一行中都具有唯一性。这也是唯一密钥所做的。这就是为什么我在问什么时候应该使用主键而不是唯一键,反之亦然。
发布于 2012-03-07 11:20:42
唯一约束类似于主键,但每个表可以有多个唯一约束。
声明唯一约束时,SQL Server将创建唯一索引以加快搜索重复项的过程。在这种情况下,索引默认为NONCLUSTERED index,因为每个表只能有一个聚集索引。
与主键相反,UNIQUE约束只能接受一次NULL。如果约束是在字段的组合中定义的,那么只要组合值是唯一的,每个字段都可以接受NULL,并且可以有一些值。
另请参阅其他链接(MSDN)
发布于 2012-03-07 16:49:07
执行摘要:使用PRIMARY KEY或NOT NULL UNIQUE,每个基表都要有一个键,这一点很重要。两者之间的差异不是关系上的考虑,从逻辑角度来看也不重要;相反,这只是一种心理考虑。
一个relvar可以有多个键,但我们只选择一个作为下划线,并将其称为主键。选择是任意的,所以从逻辑的角度来看,主数的概念并不是很重要。然而,key的一般概念非常重要!术语候选关键字的含义与关键字完全相同(即,添加候选关键字没有实际意义-它是由Ted Codd提出的,因为他将每个关键字视为提名为主关键字的候选关键字)……SQL允许将表的列的子集声明为该表的键。它还允许将其中一个指定为主键。将键指定为主键可以在一定程度上方便可能需要的其他约束
What Is a Key? by Hugh Darwen
这是很平常的.挑选一个键作为主键(然后将所讨论的relvar的任何其他键称为备用键)。但是,是否选择某个关键字作为主要关键字,如果是,则本质上是心理问题,超出了关系模型本身的范围。作为一个良好的实践,大多数基本关系变量可能应该有一个主键-但是,重复一遍,如果这是一个规则,那么它实际上不是一个关系问题……强烈建议SQL用户:对于基表,至少要使用主键和/或唯一规范,以确保每个这样的表至少有一个键。
SQL and Relational Theory: How to Write Accurate SQL Code By C.J. Date
在标准SQL PRIMARY KEY中
空值表示唯一性,但是您可以显式地指定它(使用UNIQUE).
,以便在一个表中省略它的列,但是您可以指定它们为每个表只声明一个键,但不清楚为什么(最初提出这个概念的Codd没有强加这样的
在一些产品中,PRIMARY KEY隐含着表的聚集索引,但是您可以显式地指定它(您可能不希望主键成为聚集索引!)
对一些人来说,PRIMARY KEY具有纯粹的心理意义:
认为它表示表的唯一键(但未能强制执行其他候选键会导致数据丢失,并认为它暗示了一个对业务没有任何意义的“替代”或“人工”键(但实际上通过向用户公开,对企业施加了不必要的重要性)。
发布于 2012-03-07 13:10:54
一个表可以有多个唯一键,但一个表只能有一个主键。如果您的唯一键不是NUL唯一键,那么将其提升为主键总是一个好主意。如果你的存储引擎是INNODB,如果你没有任何主键,那么innodb会自动创建一个内部的HEXDECIMAL主键,这会对性能产生一些影响,因此最好总是使用INNODB存储引擎创建一个主键。
https://stackoverflow.com/questions/9595327
复制相似问题