:: DEVELOPER ZONE
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.
© 1995-2005 MySQL AB. All rights reserved.
