如何在 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 中添加外键的主要内容,如果未能解决你的问题,请参考以下文章