sql >> Databáze >  >> RDS >> Mysql

Jaký má smysl NOT NULL DEFAULT ''?

Hodnoty NULL mají zvláštní chování:porovnání čehokoli s hodnotou NULL vám vrátí hodnotu NULL , což je něco jiného než false nebo 0 . Znamená to „neznámý“.

Vezměme si například tuto tabulku:

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

SELECT * FROM mytable WHERE gender = 'M' vrátí 1 řádek podle očekávání

SELECT * FROM mytable WHERE gender != 'M' vrátí 2 řádky, NE 3 řádky.

SELECT * FROM mytable WHERE gender != 'M' OR gender IS NULL vrátí očekávané 3 řádky.

Upravit:U některých aplikací pomocí 0 (nebo, nedej bože, další "magické číslo") místo NULL není ani vhodné (jednotky nebo přesné hodnoty nejsou v tomto příkladu relevantní):

 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

Zde je NULL 6. ledna znamená "hodnota neznámá" - možná proto, že teplota byla tak nízká, že sonda teploměru přestala reagovat. Je to však úplně jiný význam než 3. ledna, kdy byla teplota 0 , tedy 0 stupňů.

Také, jak zmiňuje @Bill Karwin, hodnoty NULL se chovají speciálně v agregačních funkcích (COUNT ,SUM ,AVG atd.):výpočet AVG(Temperature) na výše uvedených datech by vám dalo -14.5 , protože řádek NULL je ignorován.



  1. MySQL zkrátí zřetězený výsledek funkce GROUP_CONCAT

  2. XAMPP Spustit automaticky při spuštění Windows 7

  3. Jak mohu dotazovat hodnotu ve sloupci SQL Server XML

  4. Zbláznil se dotaz MySQL?