sql >> Base de Datos >  >> RDS >> Mysql

¿Cuál es el punto de NOT NULL DEFAULT ''?

Los NULL tienen un comportamiento especial:comparar cualquier cosa con un NULL te devuelve un NULL , que es algo más que false o 0 . Significa "desconocido".

Por ejemplo, tome esta tabla:

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

SELECT * FROM mytable WHERE gender = 'M' devolverá 1 fila, como se esperaba

SELECT * FROM mytable WHERE gender != 'M' devolverá 2 filas, NO 3 filas.

SELECT * FROM mytable WHERE gender != 'M' OR gender IS NULL devolverá las 3 filas esperadas.

Editar:para algunas aplicaciones, usando 0 (o, Dios no lo quiera, otro "número mágico") en lugar de NULL ni siquiera es aconsejable (las unidades o los valores exactos no son relevantes en este ejemplo):

 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

Aquí, el NULL el 6 de enero significa "valor desconocido", tal vez porque la temperatura era tan baja que la sonda del termómetro dejó de responder. Sin embargo, tiene un significado completamente diferente al del 3 de enero, cuando la temperatura era 0. , es decir, 0 grados.

Además, como menciona @Bill Karwin, los NULL se comportan especialmente en funciones agregadas (COUNT ,SUM ,AVG etc.):calculando AVG(Temperature) en los datos anteriores le daría -14.5 , ya que se ignora la fila NULL.