ホームページ  >  記事  >  データベース  >  MySQL で Null を扱う場合、注意すべき落とし穴が 2 つあります。

MySQL で Null を扱う場合、注意すべき落とし穴が 2 つあります。

黄舟
黄舟オリジナル
2017-02-21 10:29:171121ブラウズ



概要: MySQL データベース管理者として、私たちはしばしば Null と戦わなければなりません。ただし、注意しなければならない大きな落とし穴が 2 つあります。

MySQL データベースは、構造化データに基づくオープンソース データベースです。 SQL ステートメントは、MySQL データベースの中核となる言語です。ただし、MySQL データベースで SQL ステートメントを実行する場合は、2 つの落とし穴に注意する必要があります。

罠 1: null 値は必ずしも null であるとは限りません

null 値は特別なフィールドです。 MySQL データベースでは、null 値はさまざまな状況で異なる意味を表すことがよくあります。これは MySQL データベースの機能です。たとえば、通常のフィールド (文字データ) では、NULL 値は NULL 値を表します。ただし、TimesTamp タイプのフィールドに null 値を挿入した場合、null 値は必ずしも null であるとは限りません。このとき (以下に示すように) 何が起こるでしょうか?

MySQL で Null を扱う場合、注意すべき落とし穴が 2 つあります。

最初にテーブルを作成しました。このテーブルには、User_id (データ型は int)、Date (データ型は TimesTamp) の 2 つのフィールドがあります。次に、このテーブルにレコードを挿入します。このテーブルでは、日付フィールドに NULL 値が挿入されます。しかし、クエリを実行すると、結果にはレコードが挿入された現在の時刻が表示されます。何が起こっているのでしょうか? 実際、これは MySQL データベースで SQL ステートメントを実行するときによく発生する罠です。つまり、null 値は必ずしも null であるとは限りません。操作中に NULL 値が挿入されたことは明らかですが、最終的なクエリ結果は NULL 値ではありません。

MySQL データベースでは、NULL は単なる null 値ではなく、一部の特別なタイプの列に対する特別な意味を表します。このような特殊なタイプのコラムについて、読者が覚えておくべき主な点が 2 つあります。 1 つは、前述の TimesTamp データ型です。このデータ型の列に Null 値を挿入すると、その値はシステムの現在時刻を表します。もう 1 つは auto_increment 属性を持つ列です。この属性の列に Null 値を挿入すると、システムは一連の正の整数を挿入します。また、文字データなど、他のデータ型の列に Null データを挿入すると、Null 値が挿入されます。

罠 2: Null 値は必ずしも null 文字と等しいとは限りません

MySQL では、Null 値 (Null) は Null 文字 ('') と同じですか? 答えは「いいえ」です。以下のデモンストレーションをご覧ください。

MySQL で Null を扱う場合、注意すべき落とし穴が 2 つあります。

同じデータベーステーブルに、Null 値データと '' Null 文字データを同時に挿入し、Select ステートメントを使用してクエリを実行します。最終的に表示される結果は上の図に示されています。明らかに表示される結果が異なります。この結果から、NULL 値は NULL 文字と等しくないことがわかります。これは、MySQL で SQL ステートメントを実行するときに発生する 2 番目のトラップです。実際の業務では、null データと null 文字は異なる意味を持つことがよくあります。データベース管理者は、実際のニーズに基づいて選択できます。


電話番号などのフィールドは、デフォルトでnull値(相手の電話番号が全くわからないことを示す)や空文字(後で番号がキャンセルされたことを示す)などに設定できます。これらはデータベース内で異なる表現を持つため、データベース管理者はそれらを異なる方法で扱う必要があります。作成者は、null 文字ではなく null 値を使用することを好みます。これは主に、NULL 値のデータ型に特殊な演算文字がいくつかあるためです。フィールドに null 文字が含まれている場合、データベースは代わりにフィールド名を使用します。逆にNULL値を挿入した場合は、そのままNULLが表示されます。これは、他のデータベースの表示方法とも異なります。

1 つは、IS NULL キーワードと IS NOT NULL キーワードです。フィールドに NULL 値のデータが含まれているかどうかを確認したい場合は、特別なキーワードを使用する必要があります。前者はこのフィールドが空であることを意味し、後者はこのフィールドが空ではないことを意味します。これら 2 つのキーワードは、Select ステートメントのクエリ条件で非常に役立ちます。電話番号が空のすべてのユーザーをクエリする必要がある場合 (および電話番号情報を補足する必要がある場合)、クエリ条件に is not null キーワードを追加できます。

MySQL で Null を扱う場合、注意すべき落とし穴が 2 つあります。

2 つ目は Count などの統計関数で、これにも null 値に対する特別なアプリケーションがあります。ユーザー情報テーブルに電話番号を持つユーザーの数をカウントする必要がある場合は、count 関数を使用して電話番号をパラメーターとして使用できます。統計処理中に、この関数は NULL 値データを自動的に無視するためです。このときカウントされるのは電話番号を伴うユーザー情報です。 NULL文字を含むデータが使用されている場合、この関数はそれをカウントします。次の図に示すように、作成された 2 つのレコードをカウントすると、システム統計の結果は 2 ではなく 1 になります。システムが Null 値データを自動的に無視していることがわかります。

上記は、MySQL で Null を扱うときに注意すべき 2 つの落とし穴です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。