NULL
-Werte stiften bei SQL-Neulingen immer
wieder Verwirrung, da diese oft denken, NULL
sei dasselbe wie der leere String ''
. Doch
das ist nicht der Fall. Die folgenden Anweisungen sind
beispielsweise völlig verschieden:
mysql>INSERT INTO my_table (phone) VALUES (NULL);
mysql>INSERT INTO my_table (phone) VALUES ('');
Beide Anweisungen fügen einen Wert in die
phone
-Spalte ein, die erste allerdings einen
NULL
-Wert und die zweite einen leeren String.
Die erste Eingabe bedeutet so viel wie „Telefonnummer
unbekannt“ und die zweite bedeutet „Die Person hat
kein Telefon und somit keine Telefonnummer“.
Als Hilfe für den Umgang mit NULL
-Werten
sind die Operatoren IS NULL
und IS
NOT NULL
sowie die Funktion
IFNULL()
da.
In SQL ergibt ein Vergleich zwischen NULL
und
irgendeinem anderen Wert nie einen Treffer, selbst wenn auch der
andere Wert NULL
ist. Ein Ausdruck, der
NULL
enthält, ergibt immer den Wert
NULL
, es sei denn, die Dokumentation der
Operatoren und Funktionen, die an dem Ausdruck beteiligt sind,
sagt ausdrücklich etwas anderes. Alle Spalten im folgenden
Beispiel geben NULL
zurück:
mysql> SELECT NULL, 1+NULL, CONCAT('Invisible',NULL);
Wenn Sie Spaltenwerte suchen, die NULL
sind,
verwenden Sie bitte nicht den Test expr =
NULL
. Die folgende Anweisung gibt gar keine Zeilen
zurück, da expr = NULL
niemals wahr sein
kann:
mysql> SELECT * FROM my_table WHERE phone = NULL;
Wenn Sie NULL
-Werte suchen, dann mit
IS NULL
. Die folgenden Anweisungen zeigen,
wie man die Telefonnummer NULL
und die leere
Telefonnummer finden kann:
mysql>SELECT * FROM my_table WHERE phone IS NULL;
mysql>SELECT * FROM my_table WHERE phone = '';
Weitere Informationen und Beispiele finden Sie unter
Abschnitt 3.3.4.6, „Mit NULL
-Werten arbeiten“.
Sie können einer Spalte, die NULL
-Werte
enthält, einen Index hinzufügen, wenn Sie
MyISAM
, InnoDB
,
BDB
oder MEMORY
als
Speicher-Engine einsetzen. Andernfalls müssen Sie die
indizierte Spalte als NOT NULL
deklarieren
und können keine NULL
-Werte in sie
einfügen.
Wenn Sie Daten mit LOAD DATA INFILE
lesen,
werden leere oder fehlende Spalten mit ''
aktualisiert. Möchten Sie in eine Spalte einen
NULL
-Wert einfügen, so müssen Sie
\N
in die Datendatei schreiben. Das Literal
„NULL
“ kann unter bestimmten
Umständen ebenfalls verwendet werden. Siehe
Abschnitt 13.2.5, „LOAD DATA INFILE
“.
DISTINCT
, GROUP BY
oder
ORDER BY
betrachten alle
NULL
-Werte als gleich.
ORDER BY
stellt die
NULL
-Werte immer an den Anfang oder, wenn
DESC
für eine absteigende Sortierreihenfolge
angegeben wurde, an das Ende.
Aggregatfunktionen (Summenfunktionen) wie
COUNT()
, MIN()
und
SUM()
ignorieren
NULL
-Werte. Eine Ausnahme bildet die Funktion
COUNT(*)
, die Zeilen und nicht einzelne
Spaltenwerte zählt. Die folgende Anweisung erstellt
beispielsweise zwei Zählungen: eine Zählung der Zeilen in der
Tabelle und eine Zählung der von NULL
verschiedenen Werte in der Spalte age
:
mysql> SELECT COUNT(*), COUNT(age) FROM person;
Für manche Datentypen behandelt MySQL
NULL
-Werte ganz speziell. Wenn Sie
NULL
in eine
TIMESTAMP
-Spalte einfügen, werden Datum und
Uhrzeit von jetzt eingefügt. Wenn Sie NULL
in eine Integer-Spalte einfügen, die das
AUTO_INCREMENT
-Attribut hat, wird stattdessen
die nächste Folgenummer eingesetzt.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.