如何在PostgreSQL中添加外键

20

我创建了第一个名为'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));

但错误是:ERROR:没有唯一的约束条件与引用的表"bookstore"匹配。SQL状态:42830

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


1
你搞反了,书店需要作者的外键。 - Adrian Klaver
1个回答

30

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

-- 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

2
谢谢,我现在明白了。 - Eric Gideon
1
如果我创建了图书馆表格而没有分配外键,那么我如何之后添加它? - Eric Gideon
1
@EricGideon 欢迎。请尝试在创建表后执行修改脚本。 - Rahul Biswas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接