DATE
NULL
alias
Buy this Reference Manual in softcover from Barnes & Noble!
NULL
Концепция NULL
-значения часто вводит в заблуждение новичков в SQL, которые считают, что NULL
- то же, что и пустая строка ""
. Это ошибка! Например, следующие команды совершенно различны:
mysql> INSERT INTO my_table (phone) VALUES (NULL); mysql> INSERT INTO my_table (phone) VALUES ("");
Обе команды вставляют значение в столбец phone
, но первая - значение NULL
, а вторая - пустую строку. Смысл первого можно передать как ``номер телефона неизвестен'', смысл второго - ``у нее нет телефона''.
В SQL сравнение значения NULL
с любым другим значением, даже со значением NULL
, всегда ложно. Выражение, содержащее NULL
, всегда дает значение NULL
, за исключением случаев, специально оговоренных в документации по операторам и функциям, присутствующим в выражении. Все столбцы в следующем примере возвращают NULL
:
mysql> SELECT NULL,1+NULL,CONCAT('Invisible',NULL);
Если в столбце нужно найти значения NULL
, то нельзя использовать условие =NULL
. Следующая команда не возвращает ни одной строки, поскольку для любого выражения expr = NULL
ЛОЖНО:
mysql> SELECT * FROM my_table WHERE phone = NULL;
Для поиска значений NULL
необходимо использовать проверку IS NULL
. Ниже показано, как найти телефонный номер NULL
и пустой телефонный номер:
mysql> SELECT * FROM my_table WHERE phone IS NULL; mysql> SELECT * FROM my_table WHERE phone = "";
Заметим, что добавлять индекс по столбцу, в котором допускаются значения NULL
, можно только в случае, если вы работаете с версией MySQL 3.23.2 или выше, а используемый тип таблиц - MyISAM
или InnoDB
. В более ранних версиях или для других типов таблиц необходимо объявлять такие столбцы с атрибутом NOT NULL
. Это также подразумевает, что тогда нельзя вставлять NULL
в индексированный столбец.
При чтении данных с помощью LOAD DATA INFILE
пустые поля обновляются значениями ''. Если необходимо поместить в столбец значение
NULL, то в текстовом файле следует использовать \N
. Также при некоторых обстоятельствах можно использовать слово-литерал NULL
(see section 6.4.9 Синтаксис оператора LOAD DATA INFILE
).
При использовании ORDER BY
значения NULL
выдаются первыми. При сортировке в убывающем порядке с помощью DESC
значения NULL
также выдаются первыми. При использовании GROUP BY
все значения NULL
считаются равными.
Для обработки NULL
предназначены операторы IS NULL
и IS NOT NULL
, а также функция IFNULL()
.
Для некоторых типов столбцов значения NULL
обрабатываются специальным образом. Если NULL
вставляется в первый в таблице столбец типа TIMESTAMP
, то в него помещается значение текущей даты и времени. При вставке NULL
в AUTO_INCREMENT
-столбец вставляется следующее число последовательности.
Posted by [name withheld] on Wednesday February 12 2003, @5:15pm | [Delete] [Edit] |
This might help shed some light on the matter.
mysql> select count(aag) from e2 where aag !="" and aag not like ""\g
+------------+
| count(aag) |
+------------+
| 724 |
+------------+
1 row in set (0.06 sec)
mysql> select count(aag) from e2 where aag !="" \g
+------------+
| count(aag) |
+------------+
| 724 |
+------------+
1 row in set (0.06 sec)
mysql> select count(aag) from e2 where aag is not like "" \g
ERROR 1064: You have an error in your SQL syntax near 'like ""' at line 1
mysql> select count(aag) from e2 where aag not like ""\g
+------------+
| count(aag) |
+------------+
| 724 |
+------------+
1 row in set (0.06 sec)
mysql> select count(aag) from e2 where aag is not like '' \g
ERROR 1064: You have an error in your SQL syntax near 'like ''' at line 1
mysql> select count(aag) from e2 where aag not like '' \g
+------------+
| count(aag) |
+------------+
| 724 |
+------------+
1 row in set (0.06 sec)
mysql> select count(aag) from e2 where aag not like null\g
+------------+
| count(aag) |
+------------+
| 0 |
+------------+
1 row in set (0.06 sec)
mysql> select count(aag) from e2 where aag is not null \g
+------------+
| count(aag) |
+------------+
| 798 |
+------------+
1 row in set (0.06 sec)
Add your own comment.