Postgresql

MATCH FULL、MATCH SIMPLE 和 MATCH PARTIAL 之間的區別?

  • January 8, 2019

我注意到一個MATCH SIMPLEand MATCH FULL,但我不明白他們在做什麼。我看到預設是MATCH SIMPLE; 但是,約束函式的其他MATCH子句如何?FOREIGN KEY

檢查CREATE TABLE手冊頁

共有三種匹配類型:MATCH FULLMATCH PARTIALMATCH SIMPLE (預設)。MATCH FULL除非所有外鍵列都為空,否則不允許多列外鍵的一列為空;如果它們都為空,則該行不需要在引用的表中具有匹配項。MATCH SIMPLE允許任何外鍵列為空;如果其中任何一個為空,則該行不需要在引用的表中具有匹配項。MATCH PARTIAL尚未實施。(當然,NOT NULL可以將約束應用​​於引用列以防止出現這些情況。)

此外,在外鍵一章中

通常,如果引用行的任何引用列為空,則引用行不需要滿足外鍵約束。如果MATCH FULL 添加到外鍵聲明中,則僅當引用行的所有引用列都為空時,引用行才會滿足約束(因此保證空值和非空值的混合會導致MATCH FULL 約束失敗)。如果您不希望引用行能夠避免滿足外鍵約束,請將引用列聲明為NOT NULL.

請務必查閱目前手冊或與您的安裝相匹配的版本。不要因為過時的 Google 連結而落入過時的版本。

引用自:https://dba.stackexchange.com/questions/58894