假設我有一個關聯的 Persons 和 Books 表。
PERSONS TABLE BOOKS TABLE
uid | userCode | name id| name | owner
------------------------- --------------------------
1 | 0xc! | john 1 | book foo | 0xc!
2 | li5$ | doe 2 | foo book | li5$
3 | 1y&t | temp 3 | ddia | 0xc!
目前persons.usercode 用作主鍵,因此是關聯表上的外鍵。我想將persons表的主鍵改為persons.uid。所以現在我想讓書桌看起來像
PERSONS TABLE BOOKS TABLE
uid | usercode | name id| name | owner
------------------------- --------------------------
1 | 0xc! | john 1 | book foo | 1
2 | li5$ | doe 2 | foo book | 2
3 | 1y&t | temp 3 | ddia | 1
洗掉和添加新的主鍵約束應該不成問題。但是,如果書籍表中有超過 10,000 行,我該如何使用新的主鍵更新整個 books.owner 列
uj5u.com熱心網友回復:
您需要洗掉/禁用當前外鍵并重新添加它。您可能還需要在洗掉之前找出該主/外鍵約束的名稱。
ALTER TABLE "PERSONS"
DROP CONSTRAINT "primary_fkey"
UPDATE BOOKS bk SET owner=(SELECT uid FROM PERSONS WHERE userCode = bk.owner);
ALTER TABLE "PERSONS"
ADD CONSTRAINT "primary_fkey"
FOREIGN KEY ("uid")
REFERENCES BOOKS("owner")
ON UPDATE CASCADE;
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/360638.html
標籤:sql 数据库 PostgreSQL的
