我使用 PostgreSQL 中的以下两个表来保存我读过的书籍的数据库:
CREATE TABLE authors (
id SERIAL PRIMARY KEY,
name text
);
CREATE TABLE books (
id SERIAL PRIMARY KEY,
title text,
author_id integer REFERENCES authors(id) ON UPDATE CASCADE ON DELETE CASCADE,
UNIQUE(title, author_id)
);
Run Code Online (Sandbox Code Playgroud)
现在,在浏览我的作者列表时,我发现了以下两个条目:
id | name
----------
1 | Mark Twain
2 | Samuel Clemens
Run Code Online (Sandbox Code Playgroud)
我想要做的是删除“马克吐温”条目,并有效地更新所有引用“马克吐温”的书籍以引用“塞缪尔克莱门斯”。我知道我可以手动执行此操作,但我想要一个有效的解决方案,无论哪些表正在引用authors(id)
我想过这样做(在交易中):
id
为 2,让我们UPDATE CASCADE
负责更改引用。但这会遇到一些问题,主要是:
DELETE CASCADE
让我担心的第二个步骤还有一个更微妙的问题,可以用我(精心策划的)books
表格的一部分来说明:
id | title | …
Run Code Online (Sandbox Code Playgroud)