PostgreSQL 主键

2025年03月17日 | 阅读 9 分钟

在本节中,我们将了解 PostgreSQL 主键 的工作原理,PostgreSQL 主键的示例,以及如何通过 SQL 命令管理 PostgreSQL 主键约束。

此外,还将了解如何向现有表添加一个 自增 (SERIAL) 主键 以及如何 删除主键

什么是 PostgreSQL 的主键?

它是数据库表中用于独立标识每一行或记录的字段,并且包含一个唯一值。

主键不包含任何 NULL 值。因此,我们也可以说 主键 集合了表中的 唯一非空约束。如果列具有 主键约束,则它不能为 NULL 或为空

它用于区分数据库表中的每个记录。我们可以拥有其他唯一列,但 一个数据库表中只有一个主键,包括单个或多个字段。

它是创建数据库表时最重要的键,可以是一个唯一的 ID。它可以是单个列或一组列。

主键的工作方式与 唯一约束 类似。但是,主键和唯一约束之间的主要区别在于,一个表只能有一个 主键;然而,一个表可以有一个或多个 唯一非空 约束。

当我们向表中插入新行时,主键列还可以使用 SERIAL (自增) 功能为该特定行的下一个数字自动创建。

换句话说,我们可以说 PostgreSQL 主键 是唯一指定数据的字段或字段组。并且主键的任何字段都不能具有 NULL 值。

每当为主键添加表时,PostgreSQL 都会在描述主键的 列或列组上创建一个唯一的 B-tree 索引

主键规则

如果我们正在处理 PostgreSQL 主键,我们应该遵循以下规则:

  • 主键列不能包含 NULL 或空值。
  • 主键列的值必须是唯一的。
  • 每个表只能有一个主键。
  • 如果我们使用主键,建议使用 INT 或 BIGINT 数据类型。

如何在 PostgreSQL 中创建主键

PostgreSQL 中,我们可以通过以下命令创建主键:

  • CREATE TABLE 命令
  • ALTER TABLE 命令

注意:在 PostgreSQL 中,ALTER TABLE 命令用于添加或删除主键。

现在,我们将详细讨论这两个命令。

使用 CREATE TABLE 命令创建主键

我们可以借助 CREATE TABLE 命令在 PostgreSQL 中生成主键。

当我们使用 CREATE TABLE 命令 指定表结构时,通常会为主键添加到表中。

使用 create table 语句创建主键的语法:

以下图示用于展示我们如何使用 CREATE TABLE 命令创建主键:

第一个语法用于在表中创建 单个主键列

我们可以使用第二个图示在表中 创建多个主键 列。

在上面的语法中,我们使用了以下参数,我们将在下表中讨论

参数说明

参数名称描述
Table_name这是我们要创建的表的名称。
column1, column2这些是我们创建的表中的列。
constraint_nameconstraint_name 用于指定主键的名称。
Column_name(s)这些是要成为主键的列。

使用 Create 命令创建 PostgreSQL 主键的示例

为了理解 PostgreSQL 主键的工作原理,我们将看到下面的示例,它描述了 PostgreSQL 中主键的用法。

在下面的示例中,我们创建了一个名为 Applicant 的新表,该表包含 四个列,如 applicant_Id, applicant_username, applicant_password 和 applicant_email

并且 applicant_id 是主键,它在 Applicant 表中唯一标识申请人 ID。

输出

在执行上述命令后,我们将看到下面的消息窗口,其中显示 Applicant 表已成功创建到 Organization 数据库中。

PostgreSQL Primary key

在成功创建名为 Applicant 的新表后,我们将借助 INSERT 命令向其中插入一些值。

输出

在执行上述命令后,我们将看到以下消息窗口,其中显示 两个值 已成功插入到 Applicant 表中。

PostgreSQL Primary key

如上图所示,第一个 insert 命令 将被执行,因为我们为主键列使用了唯一值。

但是,如果我们想使用与 101 相同的 applicant_id 值向 Applicant 表插入另一个值,PostgreSQL 将会报错。

输出

在执行上述 insert 命令后,我们将收到以下错误:Duplicate key value violates unique constraint "applicant_pkey",因为 applicant_id =101 的值已存在。

PostgreSQL Primary key

在多个列上定义主键

让我们看一个示例,以了解 PostgreSQL 在多个列上的主键 的工作原理。

假设我们想在 多个列 上指定主键;在这种情况下,我们可以看到下面的 Create 命令 示例,我们在其中创建了一个名为 Trainee 的新表,其主键是 trainee_ID 和 trainee_roll_no 的组合。

输出

在执行上述命令后,我们将看到以下消息窗口,其中显示 Trainee 表已成功创建到 Organization 数据库中。

PostgreSQL Primary key

注意:PostgreSQL 默认使用 table-name_pkey 作为主键约束的默认名称。

在上面的示例中,PostgreSQL 为 Trainee 表创建了名为 trainee_pkey主键约束

如果我们想定义主键约束的名称,可以使用 CONSTRAINT 子句,如下面的命令所示:

使用 ALTER TABLE 命令创建主键

我们可以借助 ALTER TABLE 命令在 PostgreSQL 中生成主键。

由于为现有表指定主键的情况非常少见,因此可以使用 ALTER TABLE 命令添加主键约束。

使用 alter table 语句创建主键的语法:

以下图示用于在 PostgreSQL 中使用 ALTER TABLE 命令创建主键:

在上面的语法中,我们使用了以下参数,我们将在下表中讨论

参数名称描述
Table_name这是我们要修改的表的名称。
Column_list这些是我们表中创建的列。
constraint_name用于定义主键的名称。
index_col1, index_col2, ... index_col_n这些是用于构成主键的列。

使用 ALTER TABLE 命令创建 PostgreSQL 主键的示例

为了理解 使用 ALTER TABLE 命令创建 PostgreSQL 主键的工作原理,我们将看到下面的示例。

在下面的示例中,我们创建了一个名为 Customers 的新表,该表在 表描述中不包含主键列。

输出

在执行上述命令后,我们将看到以下消息窗口,其中显示 Customers 表已成功创建到 Organization 表中。

PostgreSQL Primary key

如果我们想为主 Customers 表添加主键约束,我们可以使用下面的 ALTER TABLE 命令:

输出

在执行上述命令后,我们将看到下面的消息窗口,显示 Customers 表已成功修改到同一个数据库中。

PostgreSQL Primary key

在理解了使用 CREATE TABLE 和 ALTER TABLE 命令创建 PostgreSQL 主键的工作原理 后,我们将尝试向当前表添加一个 自增 主键。

如何向当前表添加自增主键

让我们看一个向当前表添加自增主键的示例。

假设我们使用 CREATE table 命令创建了一个名为 Seller 的表,并且该表不包含任何主键。

输出

在执行上述命令后,我们将收到一个消息窗口,其中显示 Seller 表已成功创建到 Organization 数据库中。

PostgreSQL Primary key

在成功创建 Seller 表后,我们将借助 INSERT 命令向其中插入一些值。

输出

在执行上述命令后,我们将看到以下消息窗口,其中显示 三个值 已成功插入到 Seller 表中。

PostgreSQL Primary key

在创建和插入 Seller 表的值后,我们将使用 SELECT 命令Seller 表中检索数据。

输出

在成功执行上述命令后,我们将得到以下结果:PostgreSQL 返回 Seller 表中存在的数据。

PostgreSQL Primary key

如果我们想向 Seller 表添加一个名为 Seller_id 的新列,并且该列也是 主键列

我们将使用下面的命令,其中 Seller_id 列将按一的步长自增,如下面的示例所示:

输出

在执行上述命令后,我们将看到以下消息窗口,其中显示 Seller 表已成功修改。

PostgreSQL Primary key

修改 Seller 表后,我们将再次使用 select 命令来验证该表的修改。

输出

在执行上述命令后,我们将得到以下输出,显示 Seller 表中的修改已成功。

PostgreSQL Primary key

如何删除 PostgreSQL 主键

在 PostgreSQL 中,我们可以借助 ALTER TABLE 命令删除主键。

使用 alter table 命令删除主键的语法:

以下图示用于在 PostgreSQL 中使用 ALTER TABLE 命令删除主键:

在上面的语法中,我们使用了以下参数,我们将在下表中讨论

参数描述
table_nametable name 参数用于指定需要修改的表的名称。
constraint_nameconstraint name 参数用于定义要删除的主键的名称。

使用 ALTER TABLE 命令删除 PostgreSQL 主键的示例

让我们看一个从指定表中删除主键的示例。

为此,我们将使用 ALTER TABLE 命令从 Applicant 表中删除主键,如下面的语句所示:

输出

在成功执行上述命令后,我们将看到以下消息窗口,显示主键已从 Applicant 表中 删除

PostgreSQL Primary key

概述

PostgreSQL 主键 部分,我们学习了以下主题:

  • 我们使用 CREATE TABLE 命令为特定表创建了 主键
  • 我们理解了使用 CREATE TABLE 修改 PostgreSQL 主键的概念。
  • 我们向现有表添加了 自增主键
  • 我们使用 ALTER TABLE 命令从特定表中删除了 主键

下一主题PostgreSQL 外键