如何在 PostgreSQL 中添加外键

Posted

技术标签:

【中文标题】如何在 PostgreSQL 中添加外键【英文标题】:How to add foreign key in PostgreSQL 【发布时间】:2021-10-23 23:55:04 【问题描述】:

我创建了第一个名为“bookstore”的表,其中主键是 book_name:

create table bookstore (book_name varchar primary key, author varchar, price decimal);

我正在尝试创建第二个名为“name”的表,其中 name 是主键。我想把这个主键-author.name 作为 bookstore.author 的外键。

create table author (name varchar primary key, place varchar,
                    constraint fk_author_bookstore foreign key(name) references bookstore(author));

但错误是:错误:没有唯一约束匹配引用表“书店”的给定键 SQL 状态:42830

我是 SQL 新手,所以希望能得到一些帮助。如果可以,请编写正确的代码。 谢谢

【问题讨论】:

你有这个倒退。书店需要外键来创作。 【参考方案1】:

作者表中的名称列为主键,在书店表中作为外键引用。

-- PostgreSQL (v11)

create table author (name varchar primary key, place varchar);

create table bookstore (book_name varchar primary key, author varchar, price decimal
, CONSTRAINT fk_author_bookstore
      FOREIGN KEY(author) 
      REFERENCES author(name));

请查看网址https://dbfiddle.uk/?rdbms=postgres_11&fiddle=8394f796433ed8bc170c2889286b3fc2

建表后添加外键

-- PostgreSQL(v11)
ALTER TABLE bookstore
      ADD CONSTRAINT fk_author_bookstore FOREIGN KEY (author) 
          REFERENCES author (name);

请查看网址https://dbfiddle.uk/?rdbms=postgres_11&fiddle=d93cf071bfd0e3940dfd256861be813c

【讨论】:

谢谢,我明白了。 如果我在没有分配外键的情况下创建书店表怎么办......以后如何添加它? @EricGideon 欢迎。请在建表后尝试执行alter脚本。

以上是关于如何在 PostgreSQL 中添加外键的主要内容,如果未能解决你的问题,请参考以下文章

MySQL建表语句转PostgreSQL建表语句全纪录

PostgreSQL 外键数组

春季启动中的postgresql错误

如何使Doctrine PostgreSQL外键约束DEFERRABLE

向索引列添加外键会提高性能吗?

postgreSQL的主外键