Jak zaktualizować kolumnę z wartością null


148

Używam mysql i muszę zaktualizować kolumnę z wartością null. Próbowałem tego na wiele różnych sposobów, a najlepsze, co otrzymałem, to pusty ciąg.

Czy jest do tego specjalna składnia?


4
Czy kolumna dopuszcza wartość NULL?
poke

8
UPDATE tabeli SET kolumna = NULL WHERE ...; nie działa?

1
Nie, wcale. To naprawdę dziwne
jim

Odpowiedzi:


226

Brak specjalnej składni:

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)

Dzięki, Daniel. Jestem trochę przekonany, że ten problem może leżeć w kodzie mojej aplikacji
jim

42

NULLto specjalna wartość w SQL. Aby wyzerować właściwość, wykonaj następujące czynności:

UPDATE table SET column = NULL;

Teraz pozwól mi wyjaśnić. Poprzez php używam PDO i aktualizuję poprzez zapytanie.
jim

1
Podręcznik MySQL stwierdza, że ​​jeśli kolumna nie zezwala na wartości NULL, ustawienie jej na NULL da w wyniku wartość domyślną dla typu danych (np. Pusty ciąg). Czy w 100% Twoja kolumna dopuszcza wartość NULL? Czy możesz nam pokazać STWÓRZ TABELĘ?

Jestem pewien na 1000%. Sprawdziłem to dwukrotnie. Pozwól mi spojrzeć jeszcze raz.
jim

Tak, w rzeczywistości jest to nieważne. Widzę wartość NULL utworzoną przez moje oprogramowanie frnt end w danych, które powinny być zerowe.
jim

20

Użyj ISzamiast = To rozwiąże Twój problem przykładowej składni:

UPDATE studentdetails
SET contactnumber = 9098979690
WHERE contactnumber IS NULL;

6

Pamiętaj, aby sprawdzić, czy Twoja kolumna może być pusta. Możesz to zrobić za pomocą

mysql> desc my_table;

Jeśli twoja kolumna nie może mieć wartości null, po ustawieniu wartości na null będzie to wartość rzutowania na nią.

Oto przykład

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

Dla tych, którzy mają podobny problem, zauważyłem, że podczas „symulacji” SET = NULLzapytania PHPMyAdmin generuje błąd. To czerwony śledź ... po prostu uruchom zapytanie i wszystko będzie dobrze.


Dzięki, szukałem tutaj, ponieważ PHPMyAdmin twierdził, że w pobliżu NULL znajduje się nierozpoznane słowo kluczowe. Po przeczytaniu twojej odpowiedzi uruchomiłem zapytanie i zostało wykonane zgodnie z przeznaczeniem.
dading84

4

W powyższych odpowiedziach zaproponowano wiele sposobów i powtórzeń tego samego. Szukałem odpowiedzi, jak wspomniano, ale nie mogłem tu znaleźć.

Ale w przeciwieństwie do powyższego pytania „zaktualizuj kolumnę o wartość null” Może być „ZAKTUALIZUJ WSZYSTKIE WIERSZE W KOLUMNIE DO NULL”

W takiej sytuacji działa dalej

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

isis notdziała również w mysql



1

Innym możliwym powodem pustego ciągu zamiast prawdziwej wartości null jest to, że pole jest indeksem lub jest częścią indeksu. Przydarzyło mi się to: używając phpMyAdmin, wyedytowałem strukturę pola w jednej z moich tabel, aby zezwolić na wartości NULL, zaznaczając pole wyboru „ Null ”, a następnie naciskając przycisk „ Zapisz ”. Wyświetlany był komunikat „Cena stołu została pomyślnie zmieniona ”, więc założyłem, że zmiana nastąpiła - tak się nie stało. Po wykonaniu UPDATE w celu ustawienia wszystkich tych pól na NULL , zamiast tego ustawiono je na puste ciągi , więc ponownie przyjrzałem się strukturze tabeli i zobaczyłem, że „ Null„kolumna dla tego pola została ustawiona na„ nie ”. Wtedy zdałem sobie sprawę, że to pole było częścią klucza podstawowego !


1

Jeśli chcesz ustawić wartość null za pomocą aktualizacji zapytania ustaw wartość kolumny na NULL (bez cudzysłowów) zaktualizuj nazwę tabeli ustaw nazwę kolumny = NULL

Jeśli jednak bezpośrednio edytujesz wartość pola w środowisku roboczym mysql, użyj klawisza (Esc + del), aby wstawić wartość null do wybranej kolumny


0

jeśli podążasz

UPDATE table SET name = NULL

wtedy nazwa to "", a nie NULL IN MYSQL oznacza zapytanie

SELECT * FROM table WHERE name = NULL nie działa lub rozczarowuje się


0

Podejrzewam, że problem polega na tym, że cudzysłowy zostały wprowadzone jako literały w wartości ciągu. Możesz ustawić te kolumny na null za pomocą:

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

Powinieneś oczywiście najpierw sprawdzić, czy te wartości są rzeczywiście "" takie jak:

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

0

jeśli ustawisz NULL dla wszystkich rekordów, spróbuj tego:

UPDATE `table_name` SET `column_you_want_set_null`= NULL

LUB po prostu ustaw NULL dla specjalnych rekordów użyj WHERE

UPDATE `table_name` SET `column_you_want_set_null`= NULL WHERE `column_name` = 'column_value' 
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.