Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Was ist der Sinn von NOT NULL DEFAULT '' ?

NULLen haben ein besonderes Verhalten:Wenn Sie irgendetwas mit NULL vergleichen, erhalten Sie ein NULL , was etwas anderes als false ist oder 0 . Es bedeutet "unbekannt".

Nehmen Sie zum Beispiel diese Tabelle:

 user_id | gender
------------------
 1       | NULL
 2       | 'M'
 3       | 'F'
 4       | 'F'

SELECT * FROM mytable WHERE gender = 'M' wird wie erwartet 1 Zeile zurückgeben

SELECT * FROM mytable WHERE gender != 'M' gibt 2 Zeilen zurück, NICHT 3 Zeilen.

SELECT * FROM mytable WHERE gender != 'M' OR gender IS NULL gibt die erwarteten 3 Zeilen zurück.

Bearbeiten:Verwenden Sie für einige Anwendungen 0 (oder, Gott bewahre, eine andere "magische Zahl") anstelle von NULL ist nicht einmal ratsam (Einheiten oder genaue Werte sind in diesem Beispiel nicht relevant):

 Date       | Temperature 
--------------------------
 2010-01-01 | 10          
 2010-01-02 | 4
 2010-01-03 | 0
 2010-01-04 | -22
 2010-01-05 | -45
 2010-01-06 | NULL
 2010-01-07 | -34

Hier der NULL am 6. Januar bedeutet "Wert unbekannt" - vielleicht, weil die Temperatur so niedrig war, dass die Thermometersonde nicht mehr reagierte. Es hat jedoch eine völlig andere Bedeutung als der 3. Januar, als die Temperatur 0 war , also 0 Grad.

Außerdem verhalten sich NULLen, wie @Bill Karwin erwähnt, speziell in Aggregatfunktionen (COUNT ,SUM ,AVG usw.):Berechnung von AVG(Temperature) auf die obigen Daten würde Ihnen -14.5 geben , da die NULL-Zeile ignoriert wird.