W terminologii SQL wartość NULL jest określeniem dla brakującej wartości potocznie zwanej pustym polem.
Całkowitym przeciwieństwem jest wyrażnie NOT NULL, które pozwoli nam zrozumieć cały mechanizm.
Posługując się wiedzą zdobytą w poprzednich wpisach przygotujemy nową tabelę wraz z kilkoma kolumnami. Pierwsza z nich będzie kluczem główny, kolejne będą reprezentowały różne typy danych. Na dwie z nich nałożymy ograniczenie NOT NULL określające, że akceptowane są tylko jawane wartości danego typu. Dwie kolumny będą pozbawione tego ograniczenia – prześledzimy zachowanie tabeli z wykorzystaniem polecenia INSERT.
W pierwszej kolejności utworzymy nową tabelę:
CREATE TABLE Cars ( Id INT IDENTITY(1,1) PRIMARY KEY, -- klucz główny z indeksowaniem od 1 co 1 Brand VARCHAR(20) NOT NULL, -- marka samochodu jako pole wymagane Model VARCHAR(20) NOT NULL, -- model samochodu jako pole wymagane Engine VARCHAR(20), -- oznaczenie silnika jako pole niewymagane Power INT, -- moc samochodu również nie jest wymagana )
Pierwszy INSERT będzie dodawał do tabeli wszystkie dane:
-- Polecenie dodaje jeden rekord do tabeli Cars INSERT INTO Cars(Brand,Model, Engine, Power) VALUES ('Audi', 'S8 D3', 'V10 5.2', 450);Dodajmy drugi rekord z wartością pustą dla mocy danego silnika:
-- Polecenie dodaje jeden rekord do tabeli Cars INSERT INTO Cars(Brand,Model, Engine, Power) VALUES ('Audi', 'RS6 C5', 'V8 4.2', NULL);Oraz trzeci z wartością pustą dla silnika oraz jego mocy:
-- Polecenie dodaje jeden rekord do tabeli Cars INSERT INTO Cars(Brand,Model, Engine, Power) VALUES ('Audi', 'RS6 C6', NULL, NULL);Zanim przejdziemy dalej zobaczymy jakie dane zostały zapisane:
Kolumny tabeli (Engine, Power) akceptują wartości NULL a my w sposób świadomy tych danych nie przekazaliśmy. Pola te nie są równoznacze wstawieniu samych znaków spacji – pamiętajcie o tym.
Spróbujmy jeszcze 'złamać' nasze ograniczenia zdefiowane dla tej tabeli poniższym zapytaniem:
-- Wykonanie polecenia rzuca wyjątek -- Cannot insert the value NULL into column 'Brand', table 'AdventureWorks2017.dbo.Cars'; -- column does not allow nulls. INSERT fails. INSERT INTO Cars(Brand, Model, Engine, Power) VALUES (NULL, NULL, NULL, NULL);