在 PostgreSQL 中,外键是一种用于在两个表之间建立关联的机制,用于维护表与表之间的引用完整性。外键确保一个表的某列值只能引用另一表中已存在的主键或唯一键值。以下是关于 PostgreSQL 外键的基本概念和使用方法:

1. 定义外键: 在创建表时,可以使用 FOREIGN KEY 关键字定义外键。以下是一个简单的例子:
   CREATE TABLE orders (
       order_id SERIAL PRIMARY KEY,
       product_name VARCHAR(100),
       customer_id INT REFERENCES customers(customer_id)
   );

   在这个例子中,orders 表中的 customer_id 列是一个外键,它引用了 customers 表中的 customer_id 列。这意味着在 orders 表中的每一行,customer_id 的值必须在 customers 表中的 customer_id 列中存在。

2. 删除外键: 如果需要删除一个表上的外键,可以使用 DROP CONSTRAINT 语句。以下是一个删除外键的示例:
   ALTER TABLE orders
   DROP CONSTRAINT orders_customer_id_fkey;

   这里假设 orders_customer_id_fkey 是之前定义的外键的名称。

3. 外键约束选项: 在定义外键时,还可以使用不同的选项来指定外键的行为。例如,可以定义在删除父表中的记录时应该如何处理子表中的引用。以下是一些常见的选项:

   - ON DELETE CASCADE: 删除父表中的记录时,子表中的相关记录也会被删除。
   - ON DELETE SET NULL: 删除父表中的记录时,子表中的相关记录的外键列会被设置为 NULL。
   - ON DELETE RESTRICT(默认): 禁止删除父表中有关联的记录,除非没有任何外键引用。
   - ON DELETE NO ACTION(与 RESTRICT 相同): 禁止删除父表中有关联的记录。

4. 检查外键约束: 在插入或更新数据时,外键约束会被检查以确保数据的引用完整性。如果违反了外键约束,将无法执行相应的操作。
   -- 例如,在插入数据时检查外键约束
   INSERT INTO orders (product_name, customer_id) VALUES ('Product A', 1000);

   如果尝试插入一个在 customers 表中不存在的 customer_id,将触发外键约束错误。

外键是一种非常有用的工具,它有助于维护数据库中表之间的关系,确保数据的引用完整性。在设计数据库模型时,合理使用外键可以提高数据的质量和一致性。


转载请注明出处:http://www.zyzy.cn/article/detail/8111/PostgreSQL