1

「ステータス」という列を持つ InnoDB テーブルがあります。コードが例外を実行した場合、これは 'succes' または 'special'、または NULL で埋められます。

このテーブルを見て、'succes' または 'special' 以外のステータスの行を再処理しようとする cronjob があります。しかし、それが機能しないことに気付きました。

そこで、次のクエリでテーブルをクエリしました。

SELECT * FROM master_innodb.some_table WHERE status!= 'succes' AND status!= 'special';

0 行を返します。

返されるはずの行をステータス NULL から空のフィールドに変更すると、クエリはこの行を返しました。

誰かがこれを説明できますか?

よろしく、

マティス

4

1 に答える 1

1

したがって、MySQL データベースで NULL 値が何を表しているかについて、もう少し理解することでできると思います。NULL は、最良の場合でも混乱を招く可能性があります。MySQL ドキュメントから:

NULL 値は、慣れるまで驚くかもしれません。概念的には、NULL は「欠落している未知の値」を意味し、他の値とは多少異なる扱いになります。

したがって、NULL は「データがない」ことを意味します。したがって、述語を指定すると、次のようになります。

status != 'success' AND status != 'special'

次に、列に NULL を含む行は返されません。これは、NULLを含む行が 'succes' に等しいか、'special' に等しいstatusかがわからないためです。statusしたがって、返されません。

CRON ジョブで行を取得して再処理する代わりに、これを試すことができます。

SELECT * FROM master_innodb.some_table WHERE status is null;
于 2013-09-13T13:16:41.400 に答える