我现在非常困惑,也许你可以帮助我更好地理解问题,如果表有两个主键,如果是,那么如何?那不是为什么?
答案 0 :(得分:28)
您询问是否可以拥有多个主键字段,而且您肯定可以。您只能拥有一个主键,但可以包含唯一标识行所需的列数。
在创建表格时使用类似的内容:
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
其中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)
)
注意:在上面的示例中,只有一个PRIMARY KEY(pk_PersonID
)。但是,pk_PersonID
的值由两列(P_Id
和LastName
)组成。
答案 1 :(得分:14)
否一个表中不能有两个主键,但可以使用复合主键
因为主键是行的标识,并且对一行不能有两个ID。
答案 2 :(得分:4)
一个表可以有很多键,但按照惯例,每个表只有一个键被指定为“主键”。通常,这可能是被认为是该表中信息的“首选”标识符的密钥,或者它可能是表格设计者为某些其他特定目的挑出的密钥。
原则上,与指定为“primary”的键相关联的任何功能或属性也可以与任何其他键相关联。因此,出于许多实际目的,如果您愿意,可以指定多个这样的“主要”密钥 - 但仅限于任何特定DBMS的限制允许。
在数据的关系模型下,所有键都相等,并且没有给主键提供特殊功能(事实上,术语主键的关系用法最初是指 any 和关系的所有键,而不仅仅是一个键)。遗憾的是,许多DBMS不遵守这一原则,并且可能将某些特征限制为表中的一个且仅一个键,因此必须选择将哪个键指定为主键。所以你的问题的答案原则上应该是肯定的。当你需要在某个特定的SQL DBMS中实现它时,实际的答案是:它取决于它。
答案 3 :(得分:3)
您只能拥有1个主键 - 可能都是主键的键范围可以称为候选键。您选择的是主键,其他备用键可以实现为唯一约束/索引。
因此,虽然只有一个主键,但您仍然可以使用唯一约束/索引确保其他字段/字段组合的原始性。
答案 4 :(得分:3)
不。表只有主键。但是该主键可以包含多个字段。表示创建表时以及提及主键时,可以添加多个所需的列。 例如
CREATE TABLE table_name(col1数据类型,col2数据类型,col3数据类型,col4数据类型,PRIMARY KEY(col1,col2,col3))
通过这种方式,您可以在单个表中添加主键
答案 5 :(得分:1)
在表格中,您可以创建索引,这允许内部数据库引擎处理受影响列的内容(1到多个)以便于查找。因为引擎在此时已经在评估和排序字段的内容,所以它还可以轻松地确保值的唯一性。因此,索引可以跨越1到多行,并且可选地也可以是唯一的。
主键在理论上是可选的,但在实际上是强制性的,在特定索引上标记,它是引用表中特定行的永久唯一方式。它通常是GUID或自动增量整数(SQL Server中的identity
)。主键本身对于任何给定的表都是唯一的,并且根据定义强制执行唯一约束,但可以选择跨越多行(跨越索引/键)。
例如,您可以使用仅包含2个字段的联结表,这两个字段都是外键,并且一起构成表的主键/索引。
答案 6 :(得分:0)
不可以。你不能在表中使用多个主键。因为你有复合键,它是多个字段的组合。
答案 7 :(得分:0)
由于您无法将多个列定义为主键,如下所示
create table test1 (col1 numeric(10) primary key, col2 numeric(10) primary key
,col3 numeric(10) primary key, col4 numeric(10))
它需要是一个复合键。是的,我们可以有多个列作为解决某些业务需求的主键。主键确保列不会在表中具有重复值Null。
以下是使用Composite Primary Key创建表的SQL
CREATE TABLE track(
col1 numeric(10) , col2 numeric(10) ,col3 numeric(10) primary key, col4 numeric(10),
PRIMARY KEY (col1,col2,col3)
)
答案 8 :(得分:0)
CREATE TABLE曲目( col1数字(10),col2数字(10),col3数字(10),col4数字(10), 主键(col1,col2,col3) )
答案 9 :(得分:0)
你可以尝试FOREIGN KEY是一个表中的一个字段(或字段集合),它引用另一个表中的PRIMARY KEY。