0

我正在对 mysql 数据库进行查询。

有一个名为用于标记远程数据source的默认值的列。NULL

在我的开发服务器上,我使用了类似的查询DELETE FROM mytable WHERE source——这很好用,并删除了所有带有 in 值的行source

在实时服务器上,此查询无法删除任何行。我假设我需要使用DELETE FROM mytable WHERE source IS NOT NULL.

NULL但是,mysql 处理值的方式会有所不同,这似乎很奇怪。这种行为是否因 mysql 版本而异?或者我是否需要在实时服务器上查找此查询失败的其他原因?

4

2 回答 2

0

你为什么要写带有潜在歧义条件的语句?
我建议您始终在 MySQL 查询中编写完整的条件:

DELETE FROM mytable WHERE source IS NULL;
DELETE FROM mytable WHERE source=0; /* and so on */

它使代码更易于理解,并且您出错的可能性更小。
我建议在用其他语言编写代码时做同样的事情。

于 2013-04-10T17:52:54.220 回答
0
DELETE FROM mytable WHERE source

DELETE FROM mytable WHERE source is not null

由于 MySQL 的表达式处理中断,这是两个完全不同的事情。

如果source是数字列(整数、小数、..),第一个将删除所有source大于零的行。

有关示例,请参见此处:http ://sqlfiddle.com/#!2/87325/1

如果source是一个字符值,MySQL 将尝试将内容转换为一个数字,如果有效,如果该数字大于零,则该行将被删除。

见这里的例子:http ://sqlfiddle.com/#!2/5ebad/1

(基本上损坏的)第一个查询在一个数据库上工作而不在另一个数据库上工作的原因可能与列中的值有关。

于 2013-04-10T18:26:15.740 回答