如何用空值更新列


148

我正在使用mysql,并且需要使用空值更新列。我尝试了许多不同的方法,而我得到的最好的结果是一个空字符串。

有特殊的语法可以做到这一点吗?


4
该列是否允许使用NULL值?

8
UPDATE表的SET列= NULL WHERE ...; 不起作用?

1
一点都不。真的很奇怪
吉姆,

Answers:


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)

谢谢丹尼尔。我确信这个问题可能出在我的应用程序代码中
jim 2010年

42

NULL是SQL中的特殊值。因此,要使属性为空,请执行以下操作:

UPDATE table SET column = NULL;

现在,让我澄清一下。通过php,我使用PDO并通过查询进行更新。
吉姆·

1
MySQL手册指出,如果该列不允许使用NULL值,则将其设置为NULL将导致数据类型的默认值(例如,空字符串)。您是100%的列允许NULL吗?您可以向我们展示创建表吗?

我有1000%的把握。我已经检查了两次。让我再看一次。
吉姆

是的,它实际上是空的。我可以在应该为null的数据中看到由frnt终端软件产生的NULL。
吉姆·


6

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

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 '16

4

在上面的答案中,对于相同的内容,已经提出了许多方法和重复步骤。我一直在寻找答案,因为提到的是问题,但在这里找不到。

但是与上述问题“用空值更新列”相反,可能是“将列中的所有行都更新为空”

在这种情况下,后续工作

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

is以及is not在mysql中工作



1

另一个可能的原因为空字符串,而不是一个真正的空是该字段是一个指数或指数的一部分。这发生在我身上:使用phpMyAdmin,我在一个表中编辑了一个字段的结构,以允许NULL,方法是选中“ Null ”复选框,然后单击“ Save ”按钮。显示了“ 表价格已成功更改 ”,因此我认为发生了更改-并未发生。在执行UPDATE将所有这些字段设置为NULL之后,它们改为设置为空字符串,因此我再次查看了表结构,并看到“ Null“该字段的列设置为' no '。那就是我意识到该字段是主键的一部分!


1

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

但是,如果直接在mysql工作台中编辑字段值,则使用(Esc + del)击键将空值插入所选列


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' 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.