O conceito do valor NULL é uma fonte comum
de confusão para os iniciantes em SQL, que frequentemente pensa
que NULL é a mesma coisa que uma string
vazia "". Este não é o caso! Por exemplo,
as seguintes intruções são completamente diferentes:
mysql>INSERT INTO minha_tabela (telefone) VALUES (NULL);mysql>INSERT INTO minha_tabela (telefone) VALUES ("");
Ambas as intruções inserem um valor na coluna
telefone, mas a primeira insere um valor
NULL e a segunda insere uma string vazia. O
significado do primeiro pode ser considerado como ``telefone
não é conhecido'' e o significado da segunda pode ser
considerado como ``ela não tem telefone''.
Em SQL, o valor NULL é sempre falso em
coparação a qualquer outro valor, mesmo
NULL. Uma expressão que contém
NULL sempre produz um valor
NULL a menos que seja indicado na
documentação para os operadores e funções involvidos na
expressão. Todas as colunas no seguinte exemplo retornam
NULL:
mysql> SELECT NULL,1+NULL,CONCAT('Invisible',NULL);
Se você quiser procurar por uma coluna cujo valor é
NULL, você nãp pode usar o teste
=NULL. A seguinte instrução não retorna
nenhuma linha, pois expr = NULL é FALSO,
para qualquer expressão:
mysql> SELECT * FROM minha_tabala WHERE phone = NULL;
Para procurar por valores NULL, você deve
usar o teste IS NULL. A seguir mostramos como
encontrar o némuro de telefone NULL e o
número de telefone vazio:
mysql>SELECT * FROM minha_tabela WHERE telefone IS NULL;mysql>SELECT * FROM minha_tabela WHERE telefone = "";
Note que você pode adicionar um índice a uma coluna que tenha
valores NULL apenas se você estiver usando o
MySQL versão 3.23.2 ou mais novo e estiver usando tipos de
tabelas NyISAM, InnoDB ou
BDB. Em versões anteriores e com outros
tipos de tabelas, você deve declara tais colunas como
NOT NULL. Isto também significa que você
então não poderá inserir NULL em uma
coluna indexada.
Ao ler dados com LOAD DATA INFILE, colunas
vazias são atualizadas com ''. Se você
quiser um valor NULL em uma coluna, você
deve usar \N no arquivo texto. A palavra
literal 'NULL' também pode ser usada em
algumas circunstâncias. See Secção 6.4.8, “Sintaxe LOAD DATA INFILE”.
Ao usar ORDER BY, valores
NULL são apresentados primeiro, ou por
último se você especificar DESC para
armazenar em ordem decrescente. Exceção: Nos MySQL 4.0.2 até
4.0.10, se você armazenar em ordem decrescente usando
DESC, valores NULL são
apresentados por último.
Ao usar GROUP BY, todos os valores
NULL são considerados iguais.
Funções de agrupamento (resumo) como
COUNT(), MIN() e
SUM() ignoram valores
NULL. A exceção a isto é
COUNT(*), que conta linhas e não colunas
individuais. Por exemplo, a seguinte instrução deve produzir
duas contagens. A primeira é a contagem do número de linhas na
tabela e a segunda é a contagem do número de valores
diferentes de NULL na coluna
age:
mysql> SELECT COUNT(*), COUNT(age) FROM person;
Para ajudar com o tratamento de NULL, você
pode usar os operadores IS NULL e IS
NOT NULL e a função IFNULL().
Para alguns tipos de colunas, valores NULL
são tratados de forma especial, Se você inserir
NULL na primeira coluna
TIMESTAMP de uma tabela, a data e hora atual
serão inseridos. Se você isere NULL em uma
coluna AUTO_INCREMENT, o próximo número na
sequência é inserida.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
