如何更新包含空值的列

188

我正在使用mysql,并且需要将一个字段更新为空值。我已经尝试了多种方法,最好的结果只是得到了一个空字符串。

是否有特殊的语法可以实现这个目的?


5
该列是否允许为空值? - poke
9
UPDATE table SET column = NULL WHERE ...; 无法执行? - user438034
1
不,一点也不。这真的很奇怪。 - jim
你是在使用单引号 IE 'NULL' 吗? - jxwd
14个回答

284

没有特殊的语法:

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
谢谢丹尼尔。我有点相信这个问题可能在我的应用程序代码中。 - jim

61

现在让我澄清一下。通过php,我使用PDO并通过查询进行更新。 - jim
2
MySQL手册指出,如果列不允许NULL值,则将其设置为NULL将导致数据类型的默认值(例如空字符串)。您确定您的列允许NULL吗?能否向我们展示CREATE TABLE语句? - user438034
我很肯定,已经检查过两次了。让我再看一遍。 - jim
是的,它实际上是 null。我可以看到我的前端软件产生的 NULL 在应该为 null 的数据中。 - jim

27

使用IS代替=, 这将解决您的问题。 示例语法:

UPDATE studentdetails
SET contactnumber = 9098979690
WHERE contactnumber IS NULL;

13
在上面的回答中,提出了许多相同的方法和重复的建议。我一直在寻找与问题描述相符的答案,但这里没有找到。另一个表达上述问题“使用null值更新列”的方式可以是“将该列中的所有行更新为null”。在这种情况下,以下操作可行。
update table_name
set field_name = NULL
where field_name is not NULL;

is 以及 is not 在 MySQL 中都可以使用。


您不需要使用“where…”子句。如果一行已经为null,则只需使用您展示代码的前两行,它将运行得非常快,可能更快。已经为null的行不会被写回到数据库中,因为没有任何更改。 - ToolmakerSteve

8

记得检查您的列是否可以为空。您可以使用

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
这个回答应该重新发布为“PHPMyAdmin更新为NULL不起作用...花了很多时间,紧张得我都无法处理一个简单的SQL语句: UPDATE SolicitudesCFDI SET NumPaq = NULL where ID in (754,1042,1043,1045,1046); 为了预防起见,我总是在执行之前模拟查询... 谢谢。 - undefined

2

如果您想使用更新查询设置空值,请将列值设置为NULL(不带引号)

update tablename set columnname = NULL

然而,如果您直接在mysql workbench中编辑字段值,则使用(Esc + del)按键将空值插入所选列。


1

使用is代替=

例如:Select * from table_name where column is null


1

空字符串而不是true null的另一个可能原因是该字段是索引或索引的一部分。我曾经遇到过这种情况:使用phpMyAdmin,我编辑了一个表中的字段结构,通过选中“Null”复选框然后点击“Save”按钮来允许NULLs。显示“Table pricing has been altered successfully”,所以我认为更改已经发生--但实际上并没有。在执行UPDATE将所有这些字段设置为NULL之后,它们被设置为空字符串,因此我再次查看表结构,发现该字段的“Null”列设置为“no”。那时我意识到该字段是主键的一部分!


1

if you set NULL for all records try this:

UPDATE `table_name` SET `column_you_want_set_null`= NULL

或者对于特殊记录,将其设置为NULL,使用WHERE语句

。该内容涉及编程,并保留了HTML格式。
UPDATE `table_name` SET `column_you_want_set_null`= NULL WHERE `column_name` = 'column_value' 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接