sql >> Database teknologi >  >> RDS >> PostgreSQL

NOT NULL begrænsning over et sæt kolonner

@Igor har helt ret og et par OR 'ed udtryk er hurtige og enkle.

For en lang liste af kolonner (a , b , c , d , e , f , g i eksemplet), er dette kortere og lige så hurtigt:

CHECK (NOT (a,b,c,d,e,f,g) IS NULL)

db<>spil her
Gamle SQL violin.

Hvordan fungerer det?

En mere udførlig form af ovenstående ville være:

CHECK (NOT ROW(a,b,c,d,e,f,g) IS NULL)

ROW er redundant syntaks her.

Test af en ROW udtryk med IS NULL kun rapporterer TRUE hvis hver enkelt kolonne er NULL - hvilket tilfældigvis er præcis det, vi ønsker at udelukke.

Det er ikke muligt blot at vende dette udtryk med (a,b,c,d,e,f,g) IS NOT NULL , fordi det ville teste, at hver enkelt kolonne IS NOT NULL . Negér i stedet hele udtrykket med NOT . Voilá.

Flere detaljer i manualen her og her.

Et udtryk for formen:

CHECK (COALESCE(a,b,c,d,e,f,g) IS NOT NULL)

ville opnå det samme, mindre elegant og med en større begrænsning:virker kun for kolonner med matchende datatype , mens kontrollen på en ROW udtryk fungerer med enhver kolonner.



  1. Sådan fungerer tidszone()-funktionen i PostgreSQL

  2. Masseindsæt felter med fast bredde

  3. Hvordan tilføjer man et specifikt antal tomme rækker i sqlite?

  4. DATEDIFF_BIG() Eksempler i SQL Server