SQL中的主键

时间:2013-10-17 16:31:46

标签: sql

我想知道是否可以在标准 SQL中创建多个主键。我的意思是这样的:

CREATE TABLE(Surname CHAR(100) PRIMARY KEY, Name CHAR(100) PRIMARY KEY)

在SQL中这是合法的吗?如果没有,请链接我一个标准的参考,说明这是不可能的......

6 个答案:

答案 0 :(得分:1)

问题澄清后,

编辑

主键的定义是只有一个。所以,不,你不能在两个不同的columm上创建两个主键。

但是,您可以在一列上创建主键,在另一列上创建唯一的约束

create table person
(
   surname varchar(100) not null primary key,
   name varchar(100) not null,
   constraint only_one_name unique (name)
);

以上是我所知道的标准SQL。

以下是“SQL-99,Complete”一书的链接,该书以更实用的方式重新陈述了SQL标准:https://mariadb.com/kb/en/constraint_type-primary-key-constraint/

从书中引用:

  

基表可能受到不超过一个PRIMARY KEY约束的约束

SQL标准的原始措辞(不是免费的,所以没有人可以给你一个链接):

  

<table definition>应指定最多一个隐式或显式<unique constraint definition>,指定PRIMARY KEY

(强调我的)


请注意,您几乎不会想要char - 特别是长度不超过两三个字符。 CHAR数据类型将所有值填充到定义的长度。因此,如果您将值'FOO'插入CHAR(10)列,它将(必须)存储为'FOO '

答案 1 :(得分:0)

不,在SQL中创建两个主键是不合法的,如果您能够创建两个单独的主键,那么它就不再是主键了。

您可以创建复合主键,例如主键(姓氏,名称),例如但这绝不是适用的,不是好的实践,是名字和姓氏的主键。

答案 2 :(得分:0)

否 - 但您可以拥有一个由多列组合而成的主键:

来自MSDN

  

表通常具有列或列组合,其中包含唯一标识表中每一行的值。此列或列称为表的主键(PK),并强制实施表的实体完整性。您可以在创建或修改表时通过定义PRIMARY KEY约束来创建主键。

     

表只能有一个PRIMARY KEY约束,参与PR​​IMARY KEY约束的列不能接受空值。由于PRIMARY KEY约束保证了唯一数据,因此它们经常在标识列上定义。

答案 3 :(得分:0)

这有点迂腐,但当然你不能创建多个主要键,就像房间里不能有一个以上最高的人一样。但是,您可以(并且应该多次)创建多个唯一键。除了一个小的区别,它们之间没有功能差异。唯一键可以用作FK约束的目标,也可以用作连接,就像主键一样。

答案 4 :(得分:0)

你只能有一个主键,但是这个主键可以由N列组成。

示例:

create table "TABLE NAME"(
    "Surname" CHAR(100),
    "Name" CHAR(100),
    primary key ("Surname", "Name")
);

答案 5 :(得分:0)

您可以拥有包含多个列的主键。这通常在属性表中完成,其中键的一部分包含您所归属的表中记录的id。

您不能只拥有多个主键,因为它被列为“最重要的”。不可能有两件事“最重要”。