Mysql
 sql >> база данни >  >> RDS >> Mysql

Какъв е смисълът на NOT NULL DEFAULT ''?

NULL имат специално поведение:сравняването на нещо с NULL ви връща NULL , което е нещо различно от false или 0 . Означава "неизвестен".

Например вземете тази таблица:

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

SELECT * FROM mytable WHERE gender = 'M' ще върне 1 ред, както се очаква

SELECT * FROM mytable WHERE gender != 'M' ще върне 2 реда, НЕ 3 реда.

SELECT * FROM mytable WHERE gender != 'M' OR gender IS NULL ще върне очакваните 3 реда.

Редактиране:За някои приложения използвайте 0 (или, не дай си Боже, друго "магическо число") вместо NULL дори не е препоръчително (единиците или точните стойности не са релевантни в този пример):

 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

Тук NULL на 6 януари означава "стойност неизвестна" - може би защото температурата е била толкова ниска, че сондата на термометъра спря да реагира. Това обаче е съвсем различно значение от 3 януари, когато температурата беше 0 , тоест 0 градуса.

Също така, както споменава @Bill Karwin, NULL се държат специално в агрегатните функции (COUNT ,SUM ,AVG и т.н.):изчисляване на AVG(Temperature) на горните данни ще ви даде -14.5 , тъй като редът NULL се игнорира.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вземете броя на записите за всички таблици в базата данни на MySQL

  2. PDO грешка - PDOException" със съобщение "SQLSTATE[HY000]:Обща грешка"

  3. MySQL - Присъединете се към 2 таблици

  4. Вътрешно съединение с 3 таблици в mysql

  5. Unicode в MySQL Regex?