Wenn Sie mit dem Wert NULL
noch keine
Erfahrung haben, kann Ihnen manche Überraschung bevorstehen.
Vom Konzept her bezeichnet NULL
einen
„fehlenden unbekannten Wert“ und wird etwas
anders behandelt als andere Werte. Um auf
NULL
zu prüfen, können Sie arithmetische
Vergleichsoperatoren wie =
,
<
oder <>
nicht
verwenden. Um dies zu demonstrieren, geben Sie einmal
Folgendes ein:
mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
Offensichtlich lassen sich aus diesen Vergleichen keine
sinngebenden Ergebnisse ziehen. Verwenden Sie stattdessen die
Operatoren IS NULL
und IS NOT
NULL
:
mysql> SELECT 1 IS NULL, 1 IS NOT NULL;
+-----------+---------------+
| 1 IS NULL | 1 IS NOT NULL |
+-----------+---------------+
| 0 | 1 |
+-----------+---------------+
Beachten Sie, dass 0
oder
NULL
in MySQL „falsch“
entspricht, während alles andere wahr ist. Der
standardmäßig „wahr“ entsprechende Wert aus
einer booleschen Operation ist 1
.
Die Sonderbehandlung für NULL
ist der
Grund dafür, warum im vorherigen Abschnitt die Frage, welche
Tiere nicht mehr leben, mit todestag IS NOT
NULL
statt mit todestag <>
NULL
ermittelt werden musste.
Zwei NULL
in einer GROUP
BY
-Klausel werden als gleichberechtigt betrachtet.
Wenn Sie eine ORDER BY
-Klausel verwenden,
werden NULL
-Werte zuerst angezeigt, sofern
Sie ORDER BY ... ASC
angeben; im
umgekehrten Fall ORDER BY ... DESC
erscheinen sie hingegen am Ende der Ergebnislisten.
Ein häufiger Fehler beim Umgang mit NULL
besteht in der Annahme, dass es nicht möglich ist, eine Null
oder einen Leer-String in eine Spalte einzufügen, die als
NOT NULL
definiert ist. Das stimmt nicht.
Es handelt sich dabei vielmehr um echte Werte, während
NULL
die Bedeutung „kein Wert“
hat. Sie können dies ganz einfach wie folgt durch Verwendung
von IS
[NOT
]
NULL
testen:
mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;
+-----------+---------------+------------+----------------+
| 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL |
+-----------+---------------+------------+----------------+
| 0 | 1 | 0 | 1 |
+-----------+---------------+------------+----------------+
Es ist also durchaus möglich, eine Null oder einen
Leer-String in eine NOT NULL
-Spalte
einzusetzen, denn diese Werte sind in der Tat NOT
NULL
. Siehe auch
Abschnitt A.5.3, „Probleme mit NULL
-Werten“.
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.