PostgreSQL中多列的主键?

81
如何在 PostgreSQL 中为单个表中的多个列提供主键?
示例:
Create table "Test" 
(
   "SlNo" int not null primary key,
   "EmpID" int not null, /* Want to become primary key */
   "Empname" varchar(50) null,
   "EmpAddress" varchar(50) null
);

注意:我想将"EmpID"也作为主键。


1
我不太确定我理解了,您是想创建一个包含两个列的单一主键,还是两个完全独立的键? - Joachim Isaksson
1
@Joachim Isaksson,两列使用相同的主键。 - Sarfaraz Makandar
1
只是为了记录,以便即使对于数学倾向的人来说,这个问题也变得清晰明了:楼主希望将(SlNo,EmpID)作为主键。 - Andreas Rejbrand
3个回答

165

每个表只能有一个主键 - 如“primary”所示。
您可以拥有其他唯一,例如:

CREATE TABLE test(
   sl_no int PRIMARY KEY,  -- NOT NULL due to PK
   emp_id int UNIQUE NOT NULL,
   emp_name text,
   emp_addr text
);

主键中的列(部分)将自动标记为NOT NULL

或者使用表约束代替列约束来创建一个单一的多列主键。这在语义上与上述方法不同:现在,只有这两个列的组合必须是唯一的,每个列本身都可以包含重复项。

CREATE TABLE test(
   sl_no int,     -- NOT NULL due to PK below
   emp_id int ,   -- NOT NULL due to PK below
   emp_name text,
   emp_addr text,
   PRIMARY KEY (sl_no, emp_id)
);

多列UNIQUE约束也是可能的。

另外:请不要在Postgres中使用驼峰式标识符。使用合法的小写标识符,这样您就永远不必使用双引号。让您的生活更轻松。请参阅:


7
如果您想指定主键约束的名称:
CREATE TABLE test(
   sl_no int not null,
   emp_id int not null,
   emp_name text,
   emp_addr text,
   constraint pk_test primary key (sl_no, emp_id)
);

来源:https://www.postgresqltutorial.com/postgresql-primary-key/

在关系型数据库中,主键是一种用于唯一标识表中每个行的列或列组合。PostgreSQL支持使用单列或多列作为主键。

定义主键时,需要满足以下条件:

  • 主键值必须唯一且不能为空。
  • 一个表只能定义一个主键。
  • 主键列不能有重复值或NULL值。

通常情况下,将自动创建一个索引来加速主键访问。


3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接