Detta är ett missförstånd.
Den UNIQUE
begränsning gör exakt vad du vill. Flera NULL
värden kan samexistera i en kolumn definierad UNIQUE
.
Manualen:
I allmänhet överträds en unik begränsning när det finns mer än en rad i tabellen där värdena för alla kolumner som ingår i begränsningen är lika. Två nollvärden anses dock inte vara lika i denna jämförelse. Det betyder att även i närvaro av en unik begränsning är det möjligt att lagra dubbletter av rader som innehåller ett nollvärde i minst en av de begränsade kolumnerna. Detta beteende överensstämmer med SQL-standarden, men vi har hört att andra SQL-databaser kanske inte följer denna regel. Så var försiktig när du utvecklar applikationer som är avsedda att vara bärbara.
Djärv betoning min.
Tänk på att teckentyper tillåter en tom sträng (''
), vilket inte är en NULL
värde och skulle utlösa en unik överträdelse precis som alla andra icke-nullvärden när de anges på mer än en rad.