0

mysql データベースに対してクエリを実行しています。

リモートデータにタグを付けるために使用されるsourceデフォルト値で呼び出される列があります。NULL

私の開発サーバーでは、次のようなクエリを使用しましたDELETE FROM mytable WHERE source-これは正常に機能し、値がsource.

ライブ サーバーでは、このクエリは行の削除に失敗します。を使用する必要があると思いますDELETE FROM mytable WHERE source IS NOT NULL

ただし、mysql が値を処理する方法に違いがあるのは奇妙に思えNULLます。この動作は 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 の壊れた式の処理により、2 つの完全に異なるものになります。

が数値列 (integer、decimal、..) の場合source、最初の列sourceは 0 より大きいすべての行を削除します。

例については、http ://sqlfiddle.com/#!2/87325/1 を参照してください。

が文字値の場合source、MySQL は内容を数値に変換しようとします。それが機能する場合、その数値がゼロより大きい場合、行は削除されます。

例については、 http ://sqlfiddle.com/#!2/5ebad/1 を参照してください。

(本質的に壊れた) 最初のクエリが一方のデータベースでは機能し、他方のデータベースでは機能しない理由は、列の値に関係している可能性があります。

于 2013-04-10T18:26:15.740 に答える