Como atualizar coluna com valor nulo


148

Estou usando o mysql e preciso atualizar uma coluna com um valor nulo. Eu tentei de muitas maneiras diferentes e o melhor que consegui é uma string vazia.

Existe uma sintaxe especial para fazer isso?


4
A coluna permite um valor NULL?
cutuca

8
UPDATE table SET coluna = NULL WHERE ...; não funciona?

1
Não, não mesmo. É realmente estranho
jim

Respostas:


226

Nenhuma sintaxe especial:

CREATE TABLE your_table (some_id int, your_column varchar(100));

INSERT INTO your_table VALUES (1, 'Hello');

UPDATE your_table
SET    your_column = NULL
WHERE  some_id = 1;

SELECT * FROM your_table WHERE your_column IS NULL;
+---------+-------------+
| some_id | your_column |
+---------+-------------+
|       1 | NULL        |
+---------+-------------+
1 row in set (0.00 sec)

Obrigado Daniel. Estou convencido de que esse problema pode estar no código do meu aplicativo
jim

42

NULLé um valor especial no SQL. Portanto, para anular uma propriedade, faça o seguinte:

UPDATE table SET column = NULL;

Agora, deixe-me esclarecer. Através do php, estou usando o DOP e atualizando através de uma consulta.
quer

1
O manual do MySQL afirma que, se a coluna não permitir valores NULL, defini-la como NULL resultará no valor padrão para o tipo de dados (por exemplo, uma string vazia). Você é 100% permitido pela sua coluna como NULL? Você pode nos mostrar a CREATE TABLE?

Eu tenho 1000% de certeza. Eu verifiquei duas vezes. Deixe-me olhar mais uma vez.
jim

Sim, é de fato nulo. Eu posso ver o NULL produzido pelo meu software frnt final nos dados que devem ser nulos.
jim

20

Use em ISvez de = Isso resolverá o exemplo de sintaxe do seu problema:

UPDATE studentdetails
SET contactnumber = 9098979690
WHERE contactnumber IS NULL;

6

Lembre-se de verificar se sua coluna pode ser nula. Você pode fazer isso usando

mysql> desc my_table;

Se sua coluna não puder ser nula, quando você definir o valor como nulo, será o valor de conversão para ele.

Aqui um exemplo

mysql> create table example ( age int not null, name varchar(100) not null );
mysql> insert into example values ( null, "without num" ), ( 2 , null );
mysql> select * from example;
+-----+-------------+
| age | name        |
+-----+-------------+
|   0 | without num |
|   2 |             |
+-----+-------------+
2 rows in set (0.00 sec)

mysql> select * from example where age is null or name is null;
Empty set (0.00 sec)

4

Para aqueles que enfrentam um problema semelhante, descobri que, ao "simular" uma SET = NULLconsulta, o PHPMyAdmin gerava um erro. É um arenque vermelho .. basta executar a consulta e tudo ficará bem.


Obrigado, eu estava procurando aqui porque o PHPMyAdmin alegou que havia uma palavra-chave não reconhecida perto de NULL. Depois de ler sua resposta, executei a consulta e ela foi executada conforme o esperado.
dading84

4

Nas respostas acima, muitas maneiras e repetições foram sugeridas para o mesmo. Continuei procurando uma resposta, como mencionado, é a pergunta, mas não consegui encontrar aqui.

Mas o oposto da pergunta acima "atualizar uma coluna com um valor nulo" pode ser "ATUALIZAR TODAS AS LINHAS DA COLUNA PARA NULAR"

Em tal situação, após trabalhos

update table_name
set field_name = NULL
where field_name is not NULL;

istambém is notfunciona no mysql



1

Outro motivo possível para a cadeia vazia, em vez de um nulo verdadeiro, é que o campo é um índice ou faz parte de um índice. Isso aconteceu comigo: usando o phpMyAdmin, editei a estrutura de um campo em uma das minhas tabelas para permitir NULLs marcando a caixa de seleção " Null " e pressionando o botão " Save ". " O preço da tabela foi alterado com sucesso " foi exibido, então eu assumi que a alteração ocorreu - não ocorreu. Depois de fazer um UPDATE para definir todos esses campos como NULL , eles foram configurados para cadeias vazias ; então, olhei novamente a estrutura da tabela e vi que o " Null ""a coluna desse campo foi definida como ' não '. Foi quando percebi que o campo fazia parte da chave primária !


1

Se você deseja definir um valor nulo usando o valor da coluna do conjunto de consultas de atualização como NULL (sem aspas), atualize o nome da tabela definido nome da coluna = NULL

No entanto, se você estiver editando diretamente o valor do campo no mysql workbench, use a tecla (Esc + del) para inserir valor nulo na coluna selecionada


0

se você seguir

UPDATE table SET name = NULL

então o nome "" não é NULL NO MYSQL significa sua consulta

SELECT * FROM table WHERE name = NULL não trabalhar ou decepcionar-se


0

Eu suspeito que o problema aqui é que as aspas foram inseridas como literais no seu valor de string. Você pode definir essas colunas como nulas usando:

UPDATE table SET col=NULL WHERE length(col)<3;

Naturalmente, você deve primeiro verificar se esses valores estão realmente "" com algo como:

SELECT DISTINCT(col) FROM table WHERE length(col)<3;

0

se você definir NULL para todos os registros, tente o seguinte:

UPDATE `table_name` SET `column_you_want_set_null`= NULL

OU apenas defina NULL para registros especiais, use WHERE

UPDATE `table_name` SET `column_you_want_set_null`= NULL WHERE `column_name` = 'column_value' 
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.