Mysql
 sql >> Base de données >  >> RDS >> Mysql

A quoi sert NOT NULL DEFAULT '' ?

Les NULL ont un comportement spécial :comparer n'importe quoi avec un NULL vous renvoie un NULL , qui est autre chose que false ou 0 . Cela signifie "inconnu".

Par exemple, prenez ce tableau :

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

SELECT * FROM mytable WHERE gender = 'M' renverra 1 ligne, comme prévu

SELECT * FROM mytable WHERE gender != 'M' renverra 2 lignes, PAS 3 lignes.

SELECT * FROM mytable WHERE gender != 'M' OR gender IS NULL renverra les 3 lignes attendues.

Modifier :pour certaines applications, en utilisant 0 (ou, à Dieu ne plaise, un autre "nombre magique") au lieu de NULL n'est même pas conseillé (les unités ou les valeurs exactes ne sont pas pertinentes dans cet exemple) :

 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

Ici, le NULL le 6 janvier signifie "valeur inconnue" - peut-être parce que la température était si basse que la sonde du thermomètre a cessé de répondre. Cependant, sa signification est complètement différente de celle du 3 janvier, lorsque la température était de 0 , c'est-à-dire 0 degré.

De plus, comme @Bill Karwin le mentionne, les NULL se comportent spécialement dans les fonctions d'agrégation (COUNT ,SUM ,AVG etc.) :calcul AVG(Temperature) sur les données ci-dessus vous donnerait -14.5 , car la ligne NULL est ignorée.