Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jaki jest sens NOT NULL DEFAULT '' ?

NULL mają specjalne zachowanie:porównanie czegokolwiek z NULL daje z powrotem NULL , czyli coś innego niż false lub 0 . Oznacza „nieznany”.

Weźmy na przykład poniższą tabelę:

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

SELECT * FROM mytable WHERE gender = 'M' zwróci 1 wiersz, zgodnie z oczekiwaniami

SELECT * FROM mytable WHERE gender != 'M' zwróci 2 wiersze, a NIE 3 wiersze.

SELECT * FROM mytable WHERE gender != 'M' OR gender IS NULL zwróci oczekiwane 3 wiersze.

Edycja:w przypadku niektórych aplikacji użycie 0 (lub, nie daj Boże, inny "magiczny numer") zamiast NULL nie jest nawet zalecane (jednostki lub dokładne wartości nie mają znaczenia w tym przykładzie):

 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

Tutaj NULL 6 stycznia oznacza "wartość nieznana" - może dlatego, że temperatura była tak niska, że ​​sonda termometru przestała reagować. Jest to jednak zupełnie inne znaczenie niż 3 stycznia, kiedy temperatura wynosiła 0 , czyli 0 stopni.

Ponadto, jak wspomina @Bill Karwin, wartości NULL zachowują się specjalnie w funkcjach agregujących (COUNT ,SUM ,AVG itp.):obliczanie AVG(Temperature) na powyższych danych dałoby ci -14.5 , ponieważ wiersz NULL jest ignorowany.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. HQL generuje niekompletne „łączenie krzyżowe” podczas executeUpdate

  2. Asynchroniczne wywołania bazy danych węzła JS

  3. Aktualizacja H2 z dołącz

  4. Jak działa funkcja TO_BASE64() w MySQL

  5. Nielegalna mieszanka błędów sortowania w MySql