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_Td
和LastName
在你的表列.
如果您认为您需要多个主键,那么答案就是"不是真的".您只能拥有一个主键.但是,您可以拥有任意数量的索引,这些索引对它们具有唯一约束.唯一索引与主键完全相同.
例如 :-
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_Id
和LastName
)组成.
一张表可以有许多键,但按照惯例,每个表只有一个键被指定为“主”键。通常,这可能是被视为该表中信息的“首选”标识符的键,或者它可能是表设计者出于某些其他特定目的而挑选出来的键。
原则上,与指定为“主”的键关联的任何功能或属性也可以与任何其他键关联。因此,出于许多实际目的,如果您愿意,您可以指定多个这样的“主”键 - 但前提是任何特定 DBMS 的限制允许。
在数据的关系模型下,所有键都是相等的,并且没有为主键赋予特殊功能(事实上,术语主键的关系用法最初是指关系的任何和所有键,而不仅仅是一个键)。不幸的是,许多 DBMS 不尊重这一原则,并且可能将某些功能限制为表的一个且仅一个键,因此必须有选择地将哪个键指定为主键。所以原则上你的问题的答案应该是肯定的。当您需要在某些特定的 SQL DBMS 中实现它时,实际的答案是:这取决于情况。