null値で列を更新する方法


148

私はmysqlを使用しており、列をnull値で更新する必要があります。私はこれまでにさまざまな方法を試しましたが、私が得た最良の方法は空の文字列です。

これを行うための特別な構文はありますか?


4
列はNULL値を許可しますか?
2010年

8
UPDATEテーブルSET列= NULL WHERE ...; 動作しません?

1
いいえ、まったくありません。それは本当に奇妙です
ジム

回答:


226

特別な構文はありません:

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)

ダニエルに感謝します。私は、この問題は、自分のアプリケーションのコードにあることを確信種類のだ
ジム・

42

NULLSQLの特別な値です。プロパティをnullにするには、次のようにします。

UPDATE table SET column = NULL;

さて、はっきりさせておきましょう。phpを介して私はPDOを使用し、クエリを介して更新しています。
ジム

1
MySQLマニュアルでは、列がNULL値を許可しない場合、それをNULLに設定するとデータ型のデフォルト値(空の文字列など)になると述べています。列でNULLが許可されていると100%ですか?CREATE TABLEを見せていただけますか?

私は1000%確信しています。二度確認しました。もう一度見てみましょう。
ジム

はい、実際にはnullです。nullであるはずのデータで、frnt endソフトウェアによって生成されたNULLを確認できます。
ジム


6

列がnullになる可能性があるかどうかを確認してください。あなたはそれを使うことができます

mysql> desc my_table;

列をnullにできない場合、値をnullに設定すると、その列がキャスト値になります。

ここに例

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

同様の問題に直面している人のために、SET = NULLクエリを「シミュレート」すると、PHPMyAdminがエラーをスローすることがわかりました。それは赤いニシンです。クエリを実行するだけで、すべてがうまくいきます。


PHPMyAdminがNULLの近くに認識されないキーワードがあると主張したため、私はここを探していました。回答を読んだ後、クエリを実行したところ、意図したとおりに実行されました。
dading84

4

上記の回答では、同じことについて多くの方法と繰り返しが提案されています。質問のとおり答えを探し続けましたが、ここでは見つかりませんでした。

ただし、上記の「null値で列を更新する」の質問の反対は、「列の行をすべてNULLに更新する」である可能性があります。

このような状況での作業後

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

isis notmysql でも動作します



1

真の null ではなく、空の文字列のもう1つの考えられる理由は、フィールドがインデックスであるか、インデックスの一部であるということです。これは私に起こりました:phpMyAdminを使用して、「Null」チェックボックスをオンにして「保存」ボタンをクリックすることにより、テーブルの1つのフィールドの構造を編集してNULLを許可しました。「表の価格設定は正常に変更されました」と表示されたため、変更が行われたと想定しましたが、実際には行われませんでした。これらのフィールドをすべてNULLに設定するためにUPDATEを実行した後、それらは代わりに空の文字列に設定されたため、テーブル構造をもう一度見てみると、 " Nullそのフィールドの列は「いいえ」に設定されました。そのとき、フィールドが主キーの一部であることに気づきました。


1

更新クエリを使用してnull値を設定する場合は、列の値を(引用符なしで)NULLに更新します。更新テーブル名セット列名= NULL

ただし、mysqlワークベンチ内でフィールド値を直接編集している場合は、(Esc + del)キーストロークを使用して、選択した列にnull値を挿入します


0

あなたが従うなら

UPDATE table SET name = NULL

次に、名前は ""です。MYSQLではNULLではなく、クエリを意味します

SELECT * FROM table WHERE name = NULL 仕事をしないか、自分をがっかりさせる


0

ここでの問題は、引用符が文字列値のリテラルとして入力されたことにあると思います。以下を使用して、これらの列をnullに設定できます。

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

もちろん、最初にこれらの値が実際に ""であることを次のように確認する必要があります。

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

0

すべてのレコードに NULLを設定した場合、これを試してください:

UPDATE `table_name` SET `column_you_want_set_null`= NULL

または、特別なレコードの NULL 設定するだけでWHEREを使用

UPDATE `table_name` SET `column_you_want_set_null`= NULL WHERE `column_name` = 'column_value' 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.