为什么SELECT在同一个WHERE上查找查询但UPDATE更新为none?

时间:2012-05-24 08:39:37

标签: mysql null

我有一个最奇怪的问题 - 当我跑:

SELECT * FROM `words` WHERE `translation` = ''

我得到:Showing rows 0 - 29 (6,925 total, Query took 0.0008 sec)

但是当我跑步时:

UPDATE `words` SET `translation`= NULL WHERE `translation`= ''

我得到:0 row(s) affected. ( Query took 0.2200 sec )

为什么不想对这些行进行更新?它是相同的WHERE子句。

5 个答案:

答案 0 :(得分:3)

translationnot null,默认值为''吗?如果是这样,将NULL设置为UPDATE无效,并且MySQL正确报告没有更改任何行。也就是说,你正在做相当于UPDATE words SET translation = 'a' WHERE translation = 'a'

但是你应该收到警告。 MySQL命令行客户端报告如下警告:

mysql> UPDATE words SET translation=NULL WHERE translation = '';
Query OK, 0 rows affected, 2 warnings (0.00 sec)
Rows matched: 2  Changed: 0  Warnings: 2

要查看警告,请使用命令show warnings;

mysql> show warnings;
+---------+------+-------------------------------------+
| Level   | Code | Message                             |
+---------+------+-------------------------------------+
| Warning | 1048 | Column 'translation' cannot be null |
| Warning | 1048 | Column 'translation' cannot be null |
+---------+------+-------------------------------------+

答案 1 :(得分:3)

好的,试试这个:

UPDATE words SET translation='$$$' WHERE translation = '';
UPDATE words SET translation=NULL WHERE translation = '$$$';

其次;也许列定义不允许NULL值?检查表设计。

答案 2 :(得分:0)

我敢打赌,您不允许translation列为NULL。它会返回

Error Code: 1048
Column 'translation` cannot be null

执行语句时?

答案 3 :(得分:0)

我认为翻译允许null,如果是os尝试这个

 UPDATE `words` SET `translation`= NULL WHERE `translation IS NULL.

答案 4 :(得分:-1)

尝试使用ID或其他类似的其他列

update 'words' set 'translation'=null where id in (select id from 'words' where 'translation'=''

不知道为什么会这样。