Sql 主键和唯一约束是否以相同的方式组合元组?

Sql 主键和唯一约束是否以相同的方式组合元组?,sql,primary-key,unique-constraint,Sql,Primary Key,Unique Constraint,据我所知,如果将多个列标记为主键,它们的元组将是实际的主键,即,给定表中的两个主键,多个行my对于其中一个主键具有相同的条目,只要它们没有与任何其他行的2个匹配项。我说得对吗?如果是这样,唯一约束是否也以同样的方式工作?我觉得有一个类似于主键的结构是很有用的,但是它与其他行的键的比较是OR'd而不是AND'd,因此如果每行有n个主键,那么可能没有匹配项而不是n-1个潜在匹配项。您的描述在功能上是正确的,但术语是错误的 任何表都只有一个主键。如果将主键修改器与多个列一起使用,则表示每列都成为键的元

据我所知,如果将多个列标记为主键,它们的元组将是实际的主键,即,给定表中的两个主键,多个行my对于其中一个主键具有相同的条目,只要它们没有与任何其他行的2个匹配项。我说得对吗?如果是这样,唯一约束是否也以同样的方式工作?我觉得有一个类似于主键的结构是很有用的,但是它与其他行的键的比较是OR'd而不是AND'd,因此如果每行有n个主键,那么可能没有匹配项而不是n-1个潜在匹配项。

您的描述在功能上是正确的,但术语是错误的

任何表都只有一个主键。如果将主键修改器与多个列一起使用,则表示每列都成为键的元素,而不是有两个或多个主键

唯一约束的工作方式与主键相同,约束中元素的元组在所有行中必须是唯一的

然而,我并不完全理解你问题的其余部分,我相信这只是在对单独处理主要或唯一约束的要素存在误解的情况下才有意义


如果您有一个复合主键,并且希望确保该键中的每一列都是唯一的,那么您将需要对构成主键的每一列使用单独的唯一约束。这听起来像是一个非常奇怪的要求,让我觉得您实际上在同一个表中存储了一堆不同的项。

您使用的是哪种允许多个主键的数据库?这在博士后是不允许的。而且,这也没什么意义实际上,问题中没有提到的Postgres确实允许CREATE TABLE语句在键的每个元素旁边指定主键,作为表级约束的替代,这可能是OP混淆的原因。@LarryLustig:您的意思是PostgreSQL允许这样的操作吗?创建表test a int主键,b int主键;它当然允许创建表测试一个int主键b int;。阅读文档时,并未说明列约束主键格式不能用于多个主键列,但也未包含使用此语法创建复合主键的示例。所以,我并不完全清楚它是否被允许。@LarryLustig:它当然允许createtable测试一个int主键,b int;当然,它允许这样做,但这是标准的SQL,它没有在键的每个元素旁边指定主键,至少在某种意义上,OP和您似乎在使用键的每个元素。