PostgreSQL 约束2025年3月17日 | 阅读 7 分钟 约束用于描述表中数据列的规则。如果约束与数据操作之间有任何冲突,则操作将立即终止。约束确保数据库中数据的可靠性和正确性。 在本节中,我们将讨论所有 PostgreSQL 约束。 约束可以进一步划分为列级或表级,其中表级约束用于整个表,而列级约束仅用于一列。 在哪里使用约束?约束最常用于以下领域
PostgreSQL 约束类型让我们来看一下 PostgreSQL 中最常用的约束。 ![]()
NOT NULL 约束在 NOT NULL 约束中,列默认可以包含 NULL 值。如果我们不希望某一列有 NULL 值,那么我们需要在此列状态上解释此类约束,即该特定列现在不允许 NULL。它始终创建为 列约束,它表示未知数据,但并不意味着数据将为 NULL。 例如 在下面的情况下,我们正在创建一个名为 Customer 的新表,该表有五个列,分别是 Cust_Id、Cust_Name、Cust_Address、Cust_Age 和 Cust_Salary。 PgAdmin4 中的 SQL 查询在下面的屏幕截图中,我们可以在 pgAdmin4 中看到上述查询。 ![]() 说明上面的示例显示已创建 Customer 表,其中 Cust_Id、Cust_Name 和 Cust_Age 列被指定为不接受 NULL 值。 表结构执行 SELECT 命令后,我们可以看到 Customer 表的表结构。 ![]() CHECK 约束在 PostgreSQL 中,CHECK 约束可以由单独的名称定义。它用于控制插入的列的值。它允许我们验证将值存储到记录中的条件。如果语句为 false,则数据会破坏约束,并且不会保存到表中。 例如 在下面的示例中,我们正在创建一个名为 Customer2 的新表,该表包含 五个列。 PgAdmin4 中的 SQL 查询![]() 说明在上面的示例中,我们在 Customer2 表的 Cust_SALARY 列中添加了一个 CHECK,其中 Cust_Salary 列不能包含小于或等于 零 (0) 的任何值。 表结构执行 SELECT 命令后,我们可以看到 Customer2 表的表结构。 ![]() 唯一约束UNIQUE 约束用于维护我们存储在表字段或列中的值的唯一性。它与一组列约束或列约束和表约束兼容。 当我们使用 UNIQUE 约束时,会在一个或多个列上自动生成索引。如果我们向不同行的同一列中添加两个不同的 NULL 值,但这不会破坏 UNIQUE 约束的规范。 例如 在下面的示例中,我们正在创建一个名为 Customer3 的新表,该表具有与上面表相同的五个列。 PgAdmin4 中的 SQL 查询![]() 说明上面的示例中,Cust_Age 列设置为 UNIQUE; 因此,我们可以避免两个人拥有相同年龄的重复。 表结构执行 SELECT 命令后,我们可以看到 Customer3 表的表结构。 ![]() 主键约束它是表中的一个字段,可以唯一地标识数据库表中的每一行或记录,并且它包含一个唯一值。主键不包含任何 NULL 值。因此,我们也可以说 主键 是表中的 UNIQUE 和 NOT NULL 约束的集合。 它用于独特地标识数据库表中的每个记录。在这里,我们可以包含其他唯一列,但数据库表中只有一个主键,它包含单个或多个字段。它是创建数据库表时最重要的键,它可能是一个唯一 ID。它可以指定为一列或一组列。 主键的工作方式与 UNIQUE 约束类似。但是,它们之间最重要的区别是,一个表只能有一个 主键;但是,一个表可以有一个或多个 UNIQUE 和 NOT NULL 约束。 示例 在下面的示例中,我们正在创建一个名为 Employee 的新表,该表包含 四列,分别是 Emp_Id、Emp_Name、Emp_Address 和 Emp_Age。 PgAdmin4 中的 SQL 查询![]() 说明上面的示例中,已创建 Employee 表,其中 Emp_Id 列作为 主键,它唯一地表示 员工 ID。 表结构执行 SELECT 命令后,我们可以看到 Employee 表的表结构。 ![]() 外键约束它是一组列,其值依赖于另一个表的主键的好处。它用于使列或列组合中的值必须显示在另一个表中的相同列或列组合中。 在 PostgreSQL 中,外键的值与另一个表中的主键的实际值并行;因此,它也被称为 参照完整性约束。 例如 在下面的示例中,我们正在创建一个名为 Employee1 的新表,该表包含与上一个表类似的四列。 在这个特定的示例中,我们将创建另一个名为 cust 的表,该表包含三列。在这里,我们将 Cust_Id 列创建为 外键,它引用 Employee1 表的 Emp_ID 字段。 PgAdmin4 中的 SQL 查询![]() 表结构在这里,我们可以看到 Cust 表的表结构,它引用 Employee1 表。 ![]() EXCLUSION 约束它用于确保两个行使用定义的运算符链接在指定的列或语句上。在任何情况下,其中一个运算符的求值都将返回 NULL 或 FALSE。 例如 在下面的示例中,我们正在创建一个名为 Employee 的新表,该表包含五列。在这里,我们还将使用 EXCLUDE 约束。 现在,对于 EXCLUSION 约束,我们将使用 USING GIST,它是用于创建和实现的索引。 注意:如果我们使用排除约束,我们必须运行 CREATE EXTENSION。btree_gist 命令,在一个数据库中运行一次。之后,它将连接 btree_gist 扩展,该扩展定义了基本标量数据类型的约束。 现在,我们将向 Employee3 表插入一些记录,并且我们也强制执行了相同的年龄。 前两个 INSERT 命令将成功执行。 记录已添加到 Employee3 表中,如下面的屏幕截图所示。 ![]() 但是对于 第三个 INSERT 命令,我们可能会遇到以下错误: ![]() PgAdmin4 中的 SQL 查询![]() 删除约束如果我们要删除一个约束,那么我们应该记住该约束的名称,因为这样更容易直接按名称删除该约束。否则,我们将需要识别系统生成的名称。 在 psql 中,可以使用以下命令查找名称。 删除约束的语法如下: 下一个主题PostgreSQL 主键 |
我们请求您订阅我们的新闻通讯以获取最新更新。