Comment mettre à jour la colonne avec une valeur nulle


148

J'utilise mysql et je dois mettre à jour une colonne avec une valeur nulle. J'ai essayé de nombreuses façons différentes et le mieux que j'ai obtenu est une chaîne vide.

Existe-t-il une syntaxe spéciale pour ce faire?


4
La colonne autorise-t-elle une valeur NULL?
piquer

8
UPDATE table SET colonne = NULL WHERE ...; ne marche pas?

1
Non pas du tout. C'est vraiment bizarre
jim

Réponses:


226

Aucune syntaxe particulière:

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)

Merci Daniel. Je suis un peu convaincu que ce problème peut résider dans le code de mon application
jim

42

NULLest une valeur spéciale dans SQL. Donc, pour annuler une propriété, procédez comme suit:

UPDATE table SET column = NULL;

Maintenant, laissez-moi clarifier. Grâce à php, j'utilise PDO et je mets à jour via une requête.
jim

1
Le manuel MySQL indique que si la colonne n'autorise pas les valeurs NULL, la définir sur NULL entraînera la valeur par défaut du type de données (par exemple, une chaîne vide). Êtes-vous à 100% que votre colonne autorise NULL? Pouvez-vous nous montrer le CREATE TABLE?

Je suis sûr à 1000%. Je l'ai vérifié deux fois. Laissez-moi regarder une fois de plus.
jim

Oui, il est en fait nul. Je peux voir le NULL produit par mon logiciel frnt end dans les données qui devraient être nulles.
jim

20

Utilisez ISau lieu de = Cela résoudra votre exemple de syntaxe de problème:

UPDATE studentdetails
SET contactnumber = 9098979690
WHERE contactnumber IS NULL;

6

N'oubliez pas de regarder si votre colonne peut être nulle. Vous pouvez le faire en utilisant

mysql> desc my_table;

Si votre colonne ne peut pas être null, lorsque vous définissez la valeur sur null, elle sera la valeur de conversion.

Voici un exemple

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

Pour ceux qui sont confrontés à un problème similaire, j'ai trouvé que lors de la «simulation» d'une SET = NULLrequête, PHPMyAdmin lançait une erreur. C'est un hareng rouge .. lancez simplement la requête et tout ira bien.


Merci, j'étais ici à la recherche parce que PHPMyAdmin a affirmé qu'il y avait un mot-clé non reconnu près de NULL. Après avoir lu votre réponse, j'ai exécuté la requête et elle s'est exécutée comme prévu.
papa84

4

Dans les réponses ci-dessus, de nombreuses façons et répétitions ont été suggérées pour la même chose. J'ai continué à chercher une réponse comme mentionné est la question mais je n'ai pas pu trouver ici.

Mais à l'opposé de la question ci-dessus «mettre à jour une colonne avec une valeur nulle» pourrait être «METTRE À JOUR TOUTES LES LIGNES DE LA COLONNE À NULL»

Dans une telle situation suite à des travaux

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

isfonctionne également is notdans mysql



1

Une autre raison possible pour la chaîne vide, plutôt qu'un vrai null, est que le champ est un index ou fait partie d'un index. Cela m'est arrivé: en utilisant phpMyAdmin, j'ai édité la structure d'un champ dans l'une de mes tables pour autoriser les NULL en cochant la case " case Null " puis sur le bouton " Enregistrer ". "La tarification de la table a été modifiée avec succès " s'affichait donc j'ai supposé que le changement s'était produit - ce n'est pas le cas. Après avoir fait un UPDATE pour mettre tous ces champs à NULL , ils étaient, au contraire, mis à des chaînes vides , alors je pris un coup d' oeil à la structure de la table à nouveau et vu que la " Null"La colonne pour ce champ était définie sur" non ". C'est à ce moment-là que j'ai réalisé que le champ faisait partie de la clé primaire !


1

Si vous souhaitez définir une valeur nulle à l'aide de la requête de mise à jour, définissez la valeur de la colonne sur NULL (sans guillemets), mettez à jour le nom de la table, définissez le nom de la colonne = NULL

Cependant, si vous éditez directement la valeur du champ dans mysql workbench, utilisez la touche (Esc + del) pour insérer une valeur nulle dans la colonne sélectionnée


0

si vous suivez

UPDATE table SET name = NULL

alors le nom est "" non NULL IN MYSQL signifie votre requête

SELECT * FROM table WHERE name = NULL ne pas travailler ou te décevoir


0

Je soupçonne que le problème ici est que les guillemets ont été saisis comme littéraux dans la valeur de votre chaîne. Vous pouvez définir ces colonnes sur null en utilisant:

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

Vous devez bien sûr d'abord vérifier que ces valeurs sont bien "" avec quelque chose comme:

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

0

si vous définissez NULL pour tous les enregistrements, essayez ceci:

UPDATE `table_name` SET `column_you_want_set_null`= NULL

OU définissez simplement NULL pour les enregistrements spéciaux, utilisez WHERE

UPDATE `table_name` SET `column_you_want_set_null`= NULL WHERE `column_name` = 'column_value' 
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.