表可以有多个主键吗?

Pan*_*mar 17 mysql sql database sql-server sql-server-2008

我现在很困惑,也许你可以帮助我更好地理解这个问题,如果表有两个主键,如果是,那么如何?那不是为什么?

小智 28

你问是否可以拥有多个主键字段,而你肯定可以.您只能拥有一个主键,但可以包含唯一标识行所需的列数.

在创建表时使用类似的东西:

CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName) 
Run Code Online (Sandbox Code Playgroud)

其中,P_TdLastName在你的表列.

如果您认为您需要多个主键,那么答案就是"不是真的".您只能拥有一个主键.但是,您可以拥有任意数量的索引,这些索引对它们具有唯一约束.唯一索引与主键完全相同.

例如 :-

CREATE TABLE Persons
(
   P_Id int NOT NULL,
   LastName varchar(255) NOT NULL,
   FirstName varchar(255),
   Address varchar(255),
   City varchar(255),
   CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
)
Run Code Online (Sandbox Code Playgroud)

注意:在上面的示例中,只有一个PRIMARY KEY(pk_PersonID).但是,它的值pk_PersonID由两列(P_IdLastName)组成.


zzl*_*ani 14

否您在一个表中不能有两个主键,但可以使用复合主键

因为主键是行的标识,并且对一行不能有两个ID.


nvo*_*gel 6

一张表可以有许多键,但按照惯例,每个表只有一个键被指定为“主”键。通常,这可能是被视为该表中信息的“首选”标识符的键,或者它可能是表设计者出于某些其他特定目的而挑选出来的键。

原则上,与指定为“主”的键关联的任何功能或属性也可以与任何其他键关联。因此,出于许多实际目的,如果您愿意,您可以指定多个这样的“主”键 - 但前提是任何特定 DBMS 的限制允许。

在数据的关系模型下,所有键都是相等的,并且没有为主键赋予特殊功能(事实上,术语主键的关系用法最初是指关系的任何所有键,而不仅仅是一个键)。不幸的是,许多 DBMS 不尊重这一原则,并且可能将某些功能限制为表的一个且仅一个键,因此必须有选择地将哪个键指定为主键。所以原则上你的问题的答案应该是肯定的。当您需要在某些特定的 SQL DBMS 中实现它时,实际的答案是:这取决于情况。