Vad är null?
Tags: Databas, Datatyp, Null, Systemutveckling
Null betyder att det inte finns något definierat värde.
När man skapar en kolumn i en tabell i sin databas anger man, förutom datatyp, huruvida kolumnen får vara null eller inte.
Ett fält på en rad kommer att vara null om man inte talat om att det ska vara något annat. Antingen kan man ange ett standardvärde när man skapar tabellen, eller så får man ange ett värde när man lägger till en ny rad, eller så kan man uppdatera raden senare. För att lägga till och ändra rader i en tabell använder man SQL-kommandona INSERT och UPDATE som jag kommer skriva om senare.
När ett fält är null kommer alla jämförelser med det fältet också att bli null. Det betyder att null slår undan fötterna på all booleansk algebra:
- Sant OCH NULL är NULL
- Falskt OCH NULL är NULL
osv…
Vanlig matematik fungerar inte heller eftersom 4 + NULL = NULL
En rolig effekt av detta är att om man jämför två värden som båda är null så är resultatet inte Sant, det är null.
För att handskas med fält som kan innehålla null finns det ett par olika varianter. I både T-SQL (Microsoft SQL Server) och MySql kan man använda COALESCE() eller ISNULL().
ISNULL(): returnerar ett förutbestämt värde om det man egentligen letar efter är null. SELECT ISNULL(null, 1) kommer att returnera 1
COALESCE(): returnerar det första värdet i en lista som inte är null: SELECT COALESCE(a, b, c, d …)
I MySql finns det dessutom en nullsäker jämförelseoperator: a <=> b Den returnerar 1 om båda värdena är null och 0 om det ena värdet är null.
När man ska räkna rader i en tabell kan man ocksÃ¥ behöva tänka pÃ¥ hur null behandlas. SELECT COUNT(*) FROM TabellNamn kommer att returnera antalet rader i tabellen, men SELECT COUNT(Fältnamn) FROM TabellNamn kommer bara returnera antalet rader i tabellen där ‘Fältnamn’ inte är null.
Ganska ofta ser man att den som designat databasen slentrianmässigt har satt ett standardvärde pÃ¥ en kolumn, eller angivit att kolumnen inte fÃ¥r vara null. När man gör sÃ¥ tvingar man alla som använder databasen att hitta pÃ¥ ‘magiska’ värden när de egentligen inte har nÃ¥got vettigt värde att använda.
Anta att vi har en tabell för att lagra fordon och i den tabellen har vi en kolumn som anger respektive fordons bränsletyp. Vad ska man dÃ¥ ange för bränsletyp för en cykel? Om kolumnen tillÃ¥ter null är svaret enkelt; eftersom det inte finns nÃ¥gon motor i en vanlig cykel finns det heller ingen bränsletyp att ange. SÃ¥lunda sätter man kolumnen till null pÃ¥ alla rader som representerar cyklar. Om databasdesignern i stället sagt att man inte fÃ¥r ha null i kolumnen för bränsletyp mÃ¥ste man hitta pÃ¥ ett värde. Om fältet är ett heltal kan man knaske sätta det till 0 för att representera ‘ingen’. Om man dessutom har alla giltiga bränsletyper i en separat tabell som man förväntas referera till för att hitta benämningar pÃ¥ olika sprÃ¥k mÃ¥ste man lägga till lÃ¥tsasposter i den referarade tabellen för att databasservern ska kunna upprätthÃ¥lla informationens dataintegritet.
Null är en bra konstruktion i databaser som mÃ¥nga ‘vanliga’ programmeringssprÃ¥k saknar, men man mÃ¥ste hÃ¥lla koll pÃ¥ var och hur det används.