Mysql
 sql >> Database >  >> RDS >> Mysql

Qual è il punto di NOT NULL DEFAULT ''?

I NULL hanno un comportamento speciale:confrontare qualsiasi cosa con un NULL restituisce un NULL , che è qualcosa di diverso da false o 0 . Significa "sconosciuto".

Ad esempio, prendi questa tabella:

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

SELECT * FROM mytable WHERE gender = 'M' restituirà 1 riga, come previsto

SELECT * FROM mytable WHERE gender != 'M' restituirà 2 righe, NON 3 righe.

SELECT * FROM mytable WHERE gender != 'M' OR gender IS NULL restituirà le 3 righe previste.

Modifica:per alcune applicazioni, utilizzando 0 (o, Dio non voglia, un altro "numero magico") invece di NULL non è nemmeno consigliabile (unità o valori esatti non sono rilevanti in questo esempio):

 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

Qui, il NULL il 6 gennaio significa "valore sconosciuto" - forse perché la temperatura era così bassa che la sonda del termometro ha smesso di rispondere. Tuttavia, è un significato completamente diverso dal 3 gennaio, quando la temperatura era 0 , ovvero 0 gradi.

Inoltre, come menziona @Bill Karwin, i NULL si comportano specialmente nelle funzioni aggregate (COUNT ,SUM ,AVG ecc.):calcolando AVG(Temperature) sui dati sopra riportati ti darebbero -14.5 , poiché la riga NULL viene ignorata.