PostgreSQL 外鍵

2021-08-25 17:11 更新

回想第2章中的weathercities表??紤]以下問(wèn)題:我們希望確保在cities表中有相應(yīng)項(xiàng)之前任何人都不能在weather表中插入行。這叫做維持?jǐn)?shù)據(jù)的引用完整性。在過(guò)分簡(jiǎn)化的數(shù)據(jù)庫(kù)系統(tǒng)中,可以通過(guò)先檢查cities表中是否有匹配的記錄存在,然后決定應(yīng)該接受還是拒絕即將插入weather表的行。這種方法有一些問(wèn)題且并不方便,于是PostgreSQL可以為我們來(lái)解決:

新的表定義如下:

CREATE TABLE cities (
        city     varchar(80) primary key,
        location point
);

CREATE TABLE weather (
        city      varchar(80) references cities(city),
        temp_lo   int,
        temp_hi   int,
        prcp      real,
        date      date
);

現(xiàn)在嘗試插入一個(gè)非法的記錄:

INSERT INTO weather VALUES ('Berkeley', 45, 53, 0.0, '1994-11-28');

ERROR:  insert or update on table "weather" violates foreign key constraint "weather_city_fkey"
DETAIL:  Key (city)=(Berkeley) is not present in table "cities".

外鍵的行為可以很好地根據(jù)應(yīng)用來(lái)調(diào)整。我們不會(huì)在這個(gè)教程里更深入地介紹,讀者可以參考第 5 章中的信息。正確使用外鍵無(wú)疑會(huì)提高數(shù)據(jù)庫(kù)應(yīng)用的質(zhì)量,因此強(qiáng)烈建議用戶學(xué)會(huì)如何使用它們。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)