拥有多个主键表约束是错误的吗?

时间:2015-11-27 10:30:20

标签: sql

我对主键表约束有疑问。

在一个表定义中有多个主键表约束是错误的吗?

create table "entity" (
  "id1" integer,
  "id2" integer,
  primary key ("id1"),
  primary key ("id2")
);

SQL BNF<table element list>定义为<column definiton><table constraint definition>的列表。这不会限制每个表的primary key语句数。所以问题是:非自由SQL标准中的其他任何地方是否定义了主键语句的限制?

或者上述定义的语义是否等同于组合主键?

create table "entity" (
  "id1" integer,
  "id2" integer,
  primary key ("id1", "id2")
);

更新

似乎SQL Fiddle支持的RDBMS不允许第一个例子,尽管BNF允许它。

Sqlite说:

  

错误:表“entity”有多个主键

PostgreSQL说:

  

错误:不允许表“实体”的多个主键

Oracle说:

  

ORA-02260:表只能有一个主键

MS SQL说:

  

无法向表'entity'添加多个PRIMARY KEY约束。

MySQL根本不符合标准。所以它不算数。

1 个答案:

答案 0 :(得分:4)

一个表只能有一个primary key,这就是它被称为“主要”的原因(请注意,这一个键可以是复合的,即基于多个列)。

某些数据库允许您添加其他alternate / candidate keys。大多数允许您将列或列集定义为unique,这实际上与使用备用键相同。