-2

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

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

这在 SQL 中合法吗?如果不是,请链接我对标准的引用,该标准说这是不可能的......

4

6 回答 6

1

澄清问题后进行编辑。

主键的定义是只有一个。因此,不,您不能在两个不同的列上创建两个主键。

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

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

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

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

书中引用:

一个基表可以被不超过一个 PRIMARY KEY 约束

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

A<table definition>应指定至多一个隐式或显式<unique constraint definition>指定PRIMARY KEY.

(强调我的)


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

于 2013-10-17T16:35:38.017 回答
0

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

您可以创建一个复合主键,例如主键(姓氏,姓名),但这将永远不适用,不好的做法是姓名和姓氏的主键。

于 2013-10-17T16:33:57.900 回答
0

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

来自MSDN

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

一张表只能有一个 PRIMARY KEY 约束,参与 PRIMARY KEY 约束的列不能接受空值。因为 PRIMARY KEY 约束保证数据的唯一性,所以它们经常在标识列上定义。

于 2013-10-17T16:34:54.330 回答
0

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

于 2013-10-17T16:35:52.770 回答
0

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

例子:

create table "TABLE NAME"(
    "Surname" CHAR(100),
    "Name" CHAR(100),
    primary key ("Surname", "Name")
);
于 2013-10-17T16:36:22.437 回答
0

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

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

于 2013-10-17T16:36:24.940 回答