Come aggiornare la colonna con valore null


148

Sto usando mysql e ho bisogno di aggiornare una colonna con un valore nullo. Ho provato questo in molti modi diversi e il migliore che ho ottenuto è una stringa vuota.

C'è una sintassi speciale per fare questo?


4
La colonna consente un valore NULL?
colpì il

8
UPDATE table SET column = NULL WHERE ...; non funziona?

1
No, per niente. È davvero strano
jim

Risposte:


226

Nessuna sintassi speciale:

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)

Grazie Daniel. Sono un po 'convinto che questo problema potrebbe risiedere nel mio codice dell'applicazione
jim

42

NULLè un valore speciale in SQL. Quindi per annullare una proprietà, procedere come segue:

UPDATE table SET column = NULL;

Ora vorrei chiarire. Attraverso PHP sto usando PDO e l'aggiornamento tramite una query.
jim

1
Il manuale di MySQL afferma che se la colonna non consente valori NULL, impostandola su NULL si otterrà il valore predefinito per il tipo di dati (ad esempio una stringa vuota). Sei al 100% che la tua colonna consente NULL? Puoi mostrarci la CREATE TABLE?

Sono sicuro al 1000%. L'ho verificato due volte. Fammi guardare ancora una volta.
jim

Sì, in realtà è nullo. Riesco a vedere il NULL prodotto dal mio software frnt nei dati che dovrebbe essere nullo.
jim

20

Usa al ISposto di = Ciò risolverà la sintassi del tuo esempio di problema:

UPDATE studentdetails
SET contactnumber = 9098979690
WHERE contactnumber IS NULL;

6

Ricorda di vedere se la tua colonna può essere nulla. Puoi farlo usando

mysql> desc my_table;

Se la tua colonna non può essere nulla, quando imposti il ​​valore su null sarà il valore cast su di essa.

Ecco un esempio

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

Per coloro che si trovano ad affrontare un problema simile, ho scoperto che durante la "simulazione" di una SET = NULLquery, PHPMyAdmin generava un errore. È un'aringa rossa .. basta eseguire la query e tutto andrà bene.


Grazie, stavo guardando qui perché PHPMyAdmin ha affermato che c'era una parola chiave non riconosciuta vicino a NULL. Dopo aver letto la tua risposta, ho eseguito la query ed è stata eseguita come previsto.
dading84,

4

Nelle risposte sopra, molti modi e ripetizioni sono stati suggeriti per lo stesso. Ho continuato a cercare una risposta come menzionato è la domanda ma non sono riuscito a trovare qui.

Ma al contrario della domanda precedente "aggiorna una colonna con un valore nullo" Potrebbe essere "AGGIORNA TUTTE LE FILE DELLA COLONNA A NULL"

In una situazione del genere, a seguito di lavori

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

iscome pure is notlavora a mysql



1

Un altro possibile motivo per la stringa vuota, anziché un vero null è che il campo è un indice o fa parte di un indice. Questo mi è successo: usando phpMyAdmin, ho modificato la struttura di un campo in una delle mie tabelle per consentire i NULL selezionando la casella di controllo " Null " e premendo il pulsante " Salva ". " Il prezzo della tabella è stato modificato con successo " è stato visualizzato, quindi ho pensato che il cambiamento fosse avvenuto, ma non è stato così. Dopo aver eseguito un AGGIORNAMENTO per impostare tutti i campi su NULL , sono stati invece impostati su stringhe vuote , quindi ho dato nuovamente un'occhiata alla struttura della tabella e ho visto che " Null"la colonna per quel campo era impostata su" no ". Fu allora che mi resi conto che il campo faceva parte della chiave primaria !


1

Se si desidera impostare un valore null utilizzando la query di aggiornamento impostare il valore della colonna su NULL (senza virgolette) aggiornare tablename set nome colonna = NULL

Tuttavia, se si sta modificando direttamente il valore del campo all'interno del workbench mysql, utilizzare la sequenza di tasti (Esc + del) per inserire il valore null nella colonna selezionata


0

se segui

UPDATE table SET name = NULL

allora il nome è "" non NULL IN MYSQL significa che la tua query

SELECT * FROM table WHERE name = NULL non lavorare o deluderti


0

Sospetto che il problema qui sia che le virgolette sono state inserite come valori letterali nel valore della stringa. Puoi impostare queste colonne su null usando:

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

Ovviamente dovresti prima verificare che questi valori siano effettivamente "" con qualcosa del tipo:

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

0

se si imposta NULL per tutti i record provare questo:

UPDATE `table_name` SET `column_you_want_set_null`= NULL

O semplicemente impostare NULL per record speciali utilizzare WHERE

UPDATE `table_name` SET `column_you_want_set_null`= NULL WHERE `column_name` = 'column_value' 
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.