Null değerli sütun nasıl güncellenir?


153

Mysql kullanıyorum ve boş değerli bir sütunu güncellemem gerekiyor. Bu kadar farklı yolu denedim ve aldığım en iyi şey boş bir dizi.

Bunu yapmak için özel bir sözdizimi var mı?


4
Sütun bir NULL değerine izin veriyor mu?
dürtmek

9
GÜNCELLEME tablosu SET sütunu = NULL NEREDE ...; çalışmıyor?

1
Hayır, hiç de değil. Gerçekten tuhaf
jim

Yanıtlar:


232

Özel sözdizimi yok:

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)

1
Teşekkürler Daniel. Bu sorunun uygulama
kodumdan

45

NULLSQL'de özel bir değerdir. Yani bir özelliği sıfırlamak için şunu yapın:

UPDATE table SET column = NULL;

Şimdi, açıklamama izin verin. Php aracılığıyla PDO kullanıyorum ve bir sorgu aracılığıyla güncelleme yapıyorum.
jim

1
MySQL kılavuzu, sütun NULL değerlere izin vermiyorsa, bunu NULL olarak ayarlamanın veri türü için varsayılan değerle sonuçlanacağını (örneğin boş bir dizge) belirtir. Sütununuzun NULL'a izin verdiğinden% 100 müsünüz? Bize CREATE TABLE'ı gösterebilir misiniz?

% 1000 eminim. İki kez kontrol ettim. Bir kez daha bakayım.
jim

Evet, aslında boştur. Boş olması gereken verilerde frnt end yazılımım tarafından üretilen NULL görebiliyorum.
jim

21

ISBunun yerine kullanın = , sorunlu örnek söz dizimini çözecektir:

UPDATE studentdetails
SET contactnumber = 9098979690
WHERE contactnumber IS NULL;

6

Sütununuzun boş olup olmadığına bakmayı unutmayın. Bunu kullanarak yapabilirsin

mysql> desc my_table;

Sütununuz boş olamazsa, değeri null olarak ayarladığınızda, ona cast değeri olacaktır.

İşte bir örnek

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

Benzer bir sorunla karşılaşanlar için, bir SET = NULLsorguyu 'simüle ederken' PHPMyAdmin'in bir hata atacağını buldum . Bu bir kırmızı ringa .. sadece sorguyu çalıştırın ve her şey yoluna girecek.


Teşekkürler, arıyordum çünkü PHPMyAdmin NULL yakınında tanınmayan bir anahtar kelime olduğunu iddia etti. Cevabınızı okuduktan sonra sorguyu çalıştırdım ve amaçlandığı gibi yürütüldü.
dading84

4

Yukarıdaki cevaplarda, aynı şekilde birçok yol ve tekrar önerilmiştir. Soru sorulduğu gibi bir cevap aradım ama burada bulamadım.

Ancak yukarıdaki sorunun tersi "boş değerli bir sütunu güncelle" "Sütundaki TÜM SATIRLARI BOŞ OLARAK GÜNCELLE" olabilir

Böyle bir durumda işleri takiben

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

isis notmysql'de de çalışır


"Nerede ..." maddesine ihtiyacın yok. Bir satırda zaten boş değer varsa ve şov kodunuzun ilk iki satırını kullanırsanız, aynı hızda, muhtemelen daha hızlı çalışacaktır. Zaten boş olan satırlar, değişiklik olmadığı için DB'ye geri yazılmaz.
ToolmakerSteve

2

Güncelleme sorgusunu kullanarak null değeri ayarlamak istiyorsanız, sütun değerini NULL (tırnak işaretleri olmadan) olarak ayarlayın, tablename ayarlayın sütun adı = NULL

Ancak, alan değerini doğrudan mysql workbench içinde düzenliyorsanız, seçilen sütuna boş değer eklemek için (Esc + del) tuş vuruşunu kullanın.



1

Gerçek bir boştan ziyade boş dizenin başka bir olası nedeni , alanın bir dizin olması veya bir dizinin parçası olmasıdır. Bu bana oldu: phpMyAdmin'i kullanarak, tablolarımdan birindeki bir alanın yapısını " Null " onay kutusunu işaretleyip " Kaydet " düğmesine basarak NULL'lara izin verecek şekilde düzenledim . " Tablo fiyatlandırması başarıyla değiştirildi " görüntülendi, bu nedenle değişikliğin gerçekleştiğini varsaydım - değişmedi. Tüm bu alanları NULL olarak ayarlamak için bir GÜNCELLEME yaptıktan sonra , bunun yerine boş dizelere ayarlandılar , bu yüzden tablo yapısına tekrar baktım ve " Null"bu alan için sütun" olarak ayarlandı hayır. İşte o zaman alanın Birincil anahtarın parçası olduğunu fark ettim !


1

tüm kayıtlar için NULL ayarlarsanız şunu deneyin:

UPDATE `table_name` SET `column_you_want_set_null`= NULL

YA DA özel kayıtlar için NULL ayarlayın WHERE

UPDATE `table_name` SET `column_you_want_set_null`= NULL WHERE `column_name` = 'column_value' 

0

takip edersen

UPDATE table SET name = NULL

MYSQL'DE "" NULL değil, sorgunuz anlamına gelir

SELECT * FROM table WHERE name = NULL çalışmamak ya da kendini hayal kırıklığına uğratmamak


0

Buradaki sorunun, tırnakların dize değerinize değişmez değerler olarak girilmiş olmasından şüpheleniyorum. Şunları kullanarak bu sütunları null olarak ayarlayabilirsiniz:

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

Elbette önce bu değerlerin gerçekten "" aşağıdaki gibi bir şeyle "" olup olmadığını kontrol etmelisiniz:

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

0

Ekte kullanabiliriz

$arrEntity=$entity->toArray();        
    foreach ($arrEntity as $key => $value) {    
        if (trim($entity->$key) == '' && !is_null($entity->$key) && !is_bool($entity->$key)){
        unset($entity->$key);
        }
    }

Güncellemede kullanabiliriz

$fields=array();
foreach ($fields as $key => $value) {
        if (trim($value) == '' && !is_null($value) && !is_bool($value)){
            $fields[$key] = null;
        }
    }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.