我对主键表约束有疑问。
在一个表定义中有多个主键表约束是错误的吗?
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根本不符合标准。所以它不算数。
答案 0 :(得分:4)
一个表只能有一个primary key
,这就是它被称为“主要”的原因(请注意,这一个键可以是复合的,即基于多个列)。
某些数据库允许您添加其他alternate / candidate keys。大多数允许您将列或列集定义为unique
,这实际上与使用备用键相同。