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.