Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Qual é o ponto de NOT NULL DEFAULT '' ?


NULLs têm um comportamento especial:comparar qualquer coisa com um NULL retorna um NULL , que é algo diferente de false ou 0 . Significa "desconhecido".

Por exemplo, pegue esta tabela:
 user_id | gender
------------------
 1       | NULL
 2       | 'M'
 3       | 'F'
 4       | 'F'

SELECT * FROM mytable WHERE gender = 'M' retornará 1 linha, como esperado

SELECT * FROM mytable WHERE gender != 'M' retornará 2 linhas, NÃO 3 linhas.

SELECT * FROM mytable WHERE gender != 'M' OR gender IS NULL retornará as 3 linhas esperadas.

Editar:para alguns aplicativos, usando 0 (ou, Deus me livre, outro "número mágico") em vez de NULL nem é aconselhável (unidades ou valores exatos não são relevantes neste exemplo):
 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

Aqui, o NULL em 6 de janeiro significa "valor desconhecido" - talvez porque a temperatura estava tão baixa que a sonda do termômetro parou de responder. No entanto, é um significado completamente diferente de 3 de janeiro, quando a temperatura era 0 , ou seja, 0 graus.

Além disso, como @Bill Karwin menciona, NULLs se comportam especialmente em funções agregadas (COUNT ,SUM ,AVG etc.):calculando AVG(Temperature) nos dados acima lhe daria -14.5 , pois a linha NULL é ignorada.