PostgreSQL

关注公众号 jb51net

关闭
首页 > 数据库 > PostgreSQL > PostgreSQL外键与主键

PostgreSQL中的外键与主键操作示例

作者:骐骥1月

在PostgreSQL中,外键(Foreign Key)是一种用于建立表间关联的数据库约束机制,其核心作用与主键(Primary Key)有显著区别,本文给大家介绍PostgreSQL中的外键与主键操作示例,感兴趣的朋友一起看看吧

什么是外键?

外键(FOREIGN KEY)用于与另一张表关联,列(或一组列)中的值必须匹配另一个表的某一行中出现的值,用于保持数据的一致性。

一个外键约束指定一列(或一组列)中的值必须匹配出现在另一个表中某些行的值。我们说这维持了两个关联表之间的引用完整性。

在 PostgreSQL 中,外键(Foreign Key) 是一种用于建立表间关联的数据库约束机制,其核心作用与主键(Primary Key)有显著区别。

一、外键的定义与作用

        维护参照完整性:确保子表(外键所在表)的数据必须存在于父表中,避免“无效引用”。例如,订单中的客户 ID 必须存在于客户表中。

        级联操作支持:当父表数据更新或删除时,可自动同步子表数据。例如

CREATE TABLE orders (
    id SERIAL PRIMARY KEY,
    customer_id INT REFERENCES customers(id) ON DELETE CASCADE 
);

          当父表 customers 中的某行被删除,子表 orders 中关联的订单也会被级联删除。

          数据关系建模:通过外键明确表间关联(如一对多、多对多关系),支持复杂查询。

二、外键与主键的区别

特性外键主键
唯一性允许重复值(只要父表存在对应值)值必须唯一且非空
空值处理可包含 NULL(除非显式约束为 NOT NULL)不允许 NULL
数量限制一个表可有多个外键一个表仅有一个主键
功能定位建立表间关联唯一标识表中的每行数据
约束类型依赖父表的主键或唯一键自身字段的唯一性和非空性

三、典型应用场景

  1. 订单系统
    订单表通过外键 user_id 关联用户表,确保每个订单对应有效用户。
  2. 多表级联操作
    删除用户时自动删除其所有订单(通过 ON DELETE CASCADE);ON DELETE CASCADE:当父表的行被删除时,相关的子表行也将被删除。ON UPDATE CASCADE:当父表的主键被更新时,相关的子表行也将被更新。其他级联操作如 SET NULLSET DEFAULTRESTRICT 和 NO ACTION 也是可用的。
  3. 数据冗余控制
    将重复数据(如地区信息)抽离到独立表,通过外键引用减少冗余

四、外键的高级配置

  1. 约束行为
    • ON DELETE RESTRICT:阻止删除父表关联数据。
    • ON UPDATE CASCADE:父表主键更新时同步子表外键。
    • 子表(包含外键的表)的外键值必须引用父表中存在的值。如果引用了不存在的值,将引发外键违反错误
  2. 性能优化
    外键字段建议创建索引,以加速关联查询。

五、总结

如需具体操作示例或约束语法细节,可参考 PostgreSQL 官方文档。   

到此这篇关于PostgreSQL中的外键与主键操作示例的文章就介绍到这了,更多相关PostgreSQL外键与主键内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文