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

Hvad er meningen med IKKE NULL DEFAULT ''?

NULL'er har speciel adfærd:Hvis du sammenligner noget med en NULL, får du en NULL tilbage , som er noget andet end false eller 0 . Det betyder "ukendt".

Tag for eksempel denne tabel:

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

SELECT * FROM mytable WHERE gender = 'M' returnerer 1 række som forventet

SELECT * FROM mytable WHERE gender != 'M' returnerer 2 rækker, IKKE 3 rækker.

SELECT * FROM mytable WHERE gender != 'M' OR gender IS NULL returnerer de forventede 3 rækker.

Rediger:For nogle programmer, brug 0 (eller, gud forbyde, et andet "magisk tal") i stedet for NULL er ikke engang tilrådeligt (enheder eller nøjagtige værdier er ikke relevante i dette eksempel):

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

Her er NULL den 6. januar betyder "værdi ukendt" - måske fordi temperaturen var så lav, at termometersonden holdt op med at reagere. Det er dog en helt anden betydning end den 3. januar, hvor temperaturen var 0 , altså 0 grader.

Også, som @Bill Karwin nævner, opfører NULL'er sig specielt i aggregerede funktioner (COUNT ,SUM ,AVG osv.):beregner AVG(Temperature) på ovenstående data ville give dig -14.5 , da rækken NULL ignoreres.



  1. Guide til design af database til medarbejderstyringssystem i MySQL

  2. Hvordan tvinger man genbrug af forbindelser i jdbc pool?

  3. Problemer med konfiguration af transaktionslog

  4. Lagring af SHA1-hashværdier i MySQL